JavaSE-24.2.1【反射、获取Class类对象的三种方式】

 

 

 

 1 package day15.lesson2;
 2 
 3 /*
 4 2 反射
 5 
 6 2.1 反射概述
 7     是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。
 8     由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展。
 9 10 
11 2.2 获取Class类对象的三种方式
12 
13     要想通过反射使用一个类,首先要获取到该类的字节码对象文件,即类型为Class类型的对象
14 
15     (1)类名.class属性
16         使用类的class属性来获取该类对应的Class对象。例如:Student.class返回Student类对应的Class对象
17     (2)对象名.getClass()方法
18         调用对象的getClass()方法,返回该对象所属类对应的Class对象
19         该方法是Object类中的方法,所有java对象都可以调用该方法
20     (3)Class.forName(全类名)方法
21         使用Class类中的静态方法forName(String className)
22         该方法需要传入字符串参数,该字符串的值为某类的全路径,即包含完整包名的路径
23 
24  */
25 public class Demo1Reflect {
26     public static void main(String[] args) throws ClassNotFoundException {
27         Class<Student> c1 = Student.class;
28         System.out.println(c1); //class day15.lesson2.Student
29         Class<Student> c2 = Student.class;
30         System.out.println(c2); //class day15.lesson2.Student
31         System.out.println(c1 == c2); //true
32 
33         System.out.println();
34 
35         Student s = new Student();
36         Class<? extends Student> c3 = s.getClass();
37         System.out.println(c3); //class day15.lesson2.Student
38         System.out.println(c1 == c3); //true
39 
40         System.out.println();
41 
42         Class<?> c4 = Class.forName("day15.lesson2.Student"); //抛出异常ClassNotFoundException
43         System.out.println(c4); //class day15.lesson2.Student
44         System.out.println(c1 == c4); //true
45     }
46 }
47 
48 class Student{
49     //成员变量
50     private String name; //私有
51     int age; //默认
52     public String address; //公共
53 
54     //构造方法
55     public Student() { //公共
56     }
57 
58     public Student(String name, int age, String address) { //公共
59         this.name = name;
60         this.age = age;
61         this.address = address;
62     }
63 
64     private Student(String name){ //私有
65         this.name = name;
66     }
67 
68     Student(String name, int age){ //默认
69         this.name = name;
70         this.age = age;
71     }
72 
73     //成员方法
74     private void function(){ //私有
75         System.out.println("function");
76     }
77 
78     public void method1(){ //公共
79         System.out.println("method");
80     }
81 
82     public void method2(String s){ //公共
83         System.out.println("method:" + s);
84     }
85 
86     public String method3(String s, int i){ //公共
87         return s + "," + i;
88     }
89 
90     @Override
91     public String toString() { //公共
92         return "Student{" +
93                 "name='" + name + '\'' +
94                 ", age=" + age +
95                 ", address='" + address + '\'' +
96                 '}';
97     }
98 }

 

posted @ 2021-06-20 19:01  yub4by  阅读(63)  评论(0编辑  收藏  举报