反射

来源:互联网 发布:ios 电商app源码 编辑:程序博客网 时间:2024/06/03 18:57

反射(reflect)
一、类加载机制
1. 当出现以下情况时,JVM会退出:
1):程序正常执行结束.
2):使用System.exit(0)方法.
3):出现异常时,没有捕获异常.
4):平台强制结束JVM进程.
JVM进程一旦结束,该进程中内存中的数据将会丢失

二、Class类和Class实例
1.区别
Class类:用来描述类或接口的类型,描述类的类
Class类的实例:在JVM中的一份份字节码,Class实例表示在JVM中的类或接口,枚举是一种特殊的类,注解是一种特殊的接口
2. 如何创建Class对象,如何来表示一个字节码对象?
(http://img.blog.csdn.net/20171112103931022?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRXZlbl8wODE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3. 如何表示基本类型的字节码对象呢?
所有的数据类型都有class属性
Class clazz = 数据类型.class;
3. 数组的Class实例:数组是引用数据类型,数组其实是对象.
4. 如何来表示数组的Class实例.
方式1: 数组类型.class;
方式2: 数组对象.getClass();
所有的具有相同的维数和相同元素类型的数组共享同一份字节码对象,和元素没有关系
5. 一个类中的构造器是外界可以直接访问,同时没有参数.,那么可以直接使用Class类中的newInstance方法创建对象

三、使用反射调用方法
1. 使用反射调用方法:
1):获取方法所在类的字节码对象
2):获取方法对象
3):使用反射调用方法
2. 调用私有方法:
在调用私有方法之前:应该设置该方法为可访问的;又因为Method是AccessibleObject子类,所以Method中具有该方法

四、使用反射调用静态方法和数组参数
1. 使用反射调用静态方法:
静态方法不属于任何对象,静态方法属于类本身
2. 使用反射调用数组参数(可变参数):
调用方法的时候把实际参数统统作为Object数组的元素即可

五、加载资源文件路径
1. 加载资源文件路径:db.properties
注意:加载properties文件,只能使用Properties类的load方法
(http://img.blog.csdn.net/20171112104016028?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRXZlbl8wODE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)