今日整理:
1.反射的好处是什么?
答:
java的反射机制就是增加程序的灵活性,避免将程序写死到代码里
例如:
……实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码,并重新编译。
……使用反射: class.forName("person").newInstance(); 而且这个类描述可以写到配置文件中,如 **.xml, 这样如果想实例化其他类,只要修改配置文件的"类描述"就可以了,不需要重新修改代码并编译。
2.什么时候会加载Class类对象?
答:
- 创建类的实例
- 调用类的类方法
- 访问类或者接口的类变量,或者为该类变量赋值
- 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
- 初始化某个类的子类
- 直接使用java.exe命令来运行某个主类
3.获取Class类对象有几种方式?
答:
共以下三种方式:
- 类名.class属性
- 对象名.getClass()方法
- Class.forName(全类名)方法
4.为什么反射可以忽略泛型检查?
答:
泛型的作用是把运行期异常提前到编译期,在编译期约束变量的类型,当程序运行后,虚拟机将对泛型进行擦除,而反射的作用是在运行期创建对象,所以反射可以忽略泛型检查
在java的泛型中,实际上只是编译器认识泛型,而虚拟机是不认识泛型的。简单来讲,在运行时,所有的泛型都是object |