JavaWeb-1.2.1【基础加强:反射之获取Class对象的方式】
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 }