1.类的加载与反射机制
Java程序的运行原理:
a.启动Java虚拟机
b.将class文件装载到虚拟机中
c.class文件读取到内存之后以对象的形式存在,这个对象的类型是Class类型
d.找到主类,执行主函数
2.谁来加载类?
类加载器对象 ClassLoader
AppClassLoader 负责加载应用程序的类
ExtClassLoader 负责加载扩展类库
Bootstrap加载器 引导类加载器 负责加载核心类库
Bootstrap加载器是JVM的一部分,当JVM启动,Bootstrap加载器就已经启动
3.类加载和反射机制中最核心的类 : Class
4.如何获得Class对象
类名.class
对象.getClass()
Class.forName("包名。类名")
ClassLoaderd对象.loadClass("包名。类名");
基本类型的包装类.TYPE
5.判断两个类是不是同一个实际上是比较是不是同一个class对象
实际上在Java体系中一个class文件只能由一个类加载器加载
类加载器在加载class文件的时候总是先判断父加载器是否加载这个文件,如果父加载器加载了,就不再加载
如果父加载器没有加载,再加载这个文件
6.Class对象是类中属性,方法和构造方法的描述
通过class对象可以获得该类的构造方法,属性和方法
7.反射
可以在程序运行时通过类的Class对象动态获得类的属性,方法和构造方法,并动态调用的机制
8.不定项参数
参数个数不确定
在一个方法中只能有一个不定项参数
不定项参数必须是方法的最后一个参数
9.通过Class对象获得构造方法的四种方式
getConstructors()
getContructor(Class...type)
getDeclaredConstructors()
getDeclaredConstructor(Class...type)
1.通过构造方法实例化对象
con.newInstance();
2.通过class对象获得属性
getFields();
getField(String name);
getDeclaredFields();
getDeclaredField(String name)
3.通过属性调用对象
属性.set(对象,属性值);
4.通过Class对象获得方法
getMethods();
getMethod(String name,Class...type);
getDeclaredMethods();
getDeclaredMethod(String name,Class...type);
5.通过方法调用对象
方法.invoke(对象,参数值...);