类加载与反射机制
类加载
类加载的顺序
-
step1: 加载: 加载class文件
内存中创建一个特殊对象Class
Car c = new Car(); System.out.println(c.getClass()); System.out.println(Car.class); Class<?> clazz = Class.forName("com.dyit.classloader.Car");
何时加载class文件:
- new Car();
- Class.forName(“包.类”);
谁来加载Car.class: 类加载器
- Bootstrap 类加载器
- Extension 类加载器
- Application 类加载器
app–>继承—>ext–>继承–>-bootstrap
双亲委托机制:
Car.class—>加载(App)–>Ext(检查)–>Bootstrap
-
/* * 类加载器之间关系 */ System.out.println(clazz.getClassLoader()); System.out.println(clazz.getClassLoader().getParent()); System.out.println(clazz.getClassLoader().getParent().getParent());
-
step2:链接: class文件内容合法
-
验证: 0xCAFEBABE
-
准备: 类变量(static)分配内存空间-方法区,初始化
-
解析
-
step3: 初始化,对类中的定义的属性进行初始化
-
step4: 使用
-
step5: 卸载