- 虚拟机自带的加载器
- 启动类(根)加载器
- 扩展类加载器
- 应用程序加载器
package demo;
public class Car {
public int age;
public static void main(String[] args) {
// TODO Auto-generated method stub
//Class<Car> car1 = Car.class;
Car car1 = new Car();
Car car2 = new Car();
Car car3 = new Car();
car1.age = 1;
car1.age = 2;
car1.age = 3;
System.out.println(car1.hashCode());
System.out.println(car2.hashCode());
System.out.println(car3.hashCode());
Class<? extends Car> c1 = car1.getClass();
Class<? extends Car> c2 = car1.getClass();
Class<? extends Car> c3 = car1.getClass();
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
System.out.println(c3.hashCode());
ClassLoader classLoader = c1.getClassLoader();
System.out.println(classLoader);//AppClassLoader
System.out.println(classLoader.getParent());//
System.out.println(classLoader.getParent().getParent());//null 1.不存在,2.java程序获得不到 rt.jar
}
}
运行结果:
双亲委派机制(老师讲解,外加自己理解):
- 类加载器收到类加载的请求
- 将这个请求向上委托给父类加载器去完成(直接交给根加载器)
- 启动加载器检查是否能够加载这个类,能加载就结束,使用当前的加载器,否则抛出异常,通知子加载器进行加载
- 重复3
ps:Thread().start()中的start0()是在C++中的,java调用不到