• Java基础加强之反射


    1.什么是反射?

    反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx")时就涉及到了反射。

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    2.反射机制能做什么?

    1. 在运行时判断任意一个对象的所属的类Class

    2. 在运行时判断构造任意一个类的对象Constructor

    3. 在运行时判断任意一个类所具有的成员变量Field和方法Method

    4. 在运行时调用任意一个对象的方法。method.invoke(object,args)

    3.反射机制相关的API

    获得完整的包名和类名

    Student.java

     1 package com.reflect.test;
     2 
     3 public class Student {
     4     private int id;
     5     private String name;
     6     
     7     public Student() {}
     8     
     9     public Student(int id, String name) {
    10         super();
    11         this.id = id;
    12         this.name = name;
    13     }
    14 
    15     public int getId() {
    16         return id;
    17     }
    18 
    19     public void setId(int id) {
    20         this.id = id;
    21     }
    22 
    23     public String getName() {
    24         return name;
    25     }
    26 
    27     public void setName(String name) {
    28         this.name = name;
    29     }
    30 
    31     @Override
    32     public String toString() {
    33         return "Student [id=" + id + ", name=" + name + "]";
    34     }
    35     
    36     
    37     
    38     
    39 }
    View Code

    Test.java

    package com.reflect.test;
    
    public class Test {
        
        Student stu = new Student();
        
        public static void main(String[] args) {
            Test test = new Test();
            test.getClassName();
        }
        //获得完整的包名和类名
        public void getClassName() {
            System.out.println(stu.getClass().getName());
        }
    
    }

    运行结果

    com.reflect.test.Student
    View Code

    获取Class的三种方法

       public static void main(String[] args) {
            Test test = new Test();
            test.getStudentClass();
        }
        
        //获取Class对象的三种犯法
        public void getStudentClass() {
            //第一种方法,forName
            Class<?> class1;
            try {
                class1 = Class.forName("com.reflect.test.Student");
                System.out.println("class1:"+class1);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }        
            //第二种方法,class
            Class<?> class2 = Student.class;
            System.out.println("class2:"+class2);
            //第三种方法,getClass()
            Student stu1 = new Student();
            Class<?> class3 = stu1.getClass();
            System.out.println("class3:"+class3);
        }

    运行结果

    class1:class com.reflect.test.Student
    class2:class com.reflect.test.Student
    class3:class com.reflect.test.Student
    View Code
  • 相关阅读:
    手机网页唤醒app,
    h5 audio进度条
    js判断字符串与字符串相互包含,以及数组是否包含某个元素;
    vue cli 打包项目造成css背景图路径错误
    vue-cli webpack打包不.map文件,iview 项目打包完,图标路径有问题
    常用的活动榜单
    vue-cli的webpack模板项目配置文件分析,配置信息详解
    eclipse怎么debug项目
    什么是前置机,前置机的作用是什么
    jsp中连接数据库及实现增删改查
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8480648.html
Copyright © 2020-2023  润新知