Java基础加强之反射

时间:2022-03-26 15:05:36

1.什么是反射?

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

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

2.反射机制能做什么?

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

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

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

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

3.反射机制相关的API

获得完整的包名和类名

Student.java

Java基础加强之反射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());
    }

}

 

运行结果

Java基础加强之反射Java基础加强之反射
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);
    }

 

运行结果

Java基础加强之反射Java基础加强之反射
class1:class com.reflect.test.Student
class2:class com.reflect.test.Student
class3:class com.reflect.test.Student
View Code