
1 package com.yubaby.reflect;
2
3 import com.yubaby.domain.Person;
4
5 /*
6 2 反射:框架设计的灵魂
7
8 * 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
9 * 反射:将类的各个组成部分封装为其他对象,这就是反射机制
10 * 好处:
11 1. 可以在程序运行过程中,操作这些对象。
12 2. 可以解耦,提高程序的可扩展性。
13 */
14 /*
15 获取Class对象的方式:
16 1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
17 多用于配置文件,将类名定义在配置文件中。读取文件,加载类
18 2. 类名.class:通过类名的属性class获取
19 多用于参数的传递
20 3. 对象.getClass():getClass()方法在Object类中定义着。
21 多用于对象的获取字节码的方式
22 结论:
23 同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,
24 不论通过哪一种方式获取的Class对象都是同一个。
25 */
26 public class ReflectDemo1 {
27 public static void main(String[] args) throws ClassNotFoundException {
28 Class<?> aClass = Class.forName("com.yubaby.domain.Person");
29 System.out.println(aClass); //class com.yubaby.domain.Person
30
31 Class<Person> aClass1 = Person.class;
32 System.out.println(aClass1); //class com.yubaby.domain.Person
33
34 Person person = new Person();
35 Class<? extends Person> aClass2 = person.getClass();
36 System.out.println(aClass2); //class com.yubaby.domain.Person
37
38 //比较对象(地址值)
39 System.out.println(aClass == aClass1); //true
40 System.out.println(aClass == aClass2); //true
41
42 Class<Student> studentClass = Student.class;
43 System.out.println(studentClass); //class com.yubaby.reflect.Student
44 }
45 }
46
47 class Student {
48 public void sleep(){
49 System.out.println("sleep...");
50 }
51 }
1 package com.yubaby.domain;
2
3 public class Person {
4 private String name;
5 private int age;
6
7 public int a;
8 protected int b;
9 int c;
10 private int d;
11
12 public Person() {
13 }
14
15 public Person(String name, int age) {
16 this.name = name;
17 this.age = age;
18 }
19
20 public void setName(String name) {
21 this.name = name;
22 }
23
24 public void setAge(int age) {
25 this.age = age;
26 }
27
28 public String getName() {
29 return name;
30 }
31
32 public int getAge() {
33 return age;
34 }
35
36 @Override
37 public String toString() {
38 return "Person{" +
39 "name='" + name + '\'' +
40 ", age=" + age +
41 ", a=" + a +
42 ", b=" + b +
43 ", c=" + c +
44 ", d=" + d +
45 '}';
46 }
47
48 public void eat(){
49 System.out.println("eat...");
50 }
51
52 public void eat(String food){ //函数重载
53 System.out.println("eat:" + food);
54 }
55 }