类的加载过程
双亲委派机制
原理
优势
避免类的重复加载
保护程序安全,避免核心api被篡改
示例
自定义一个java.lang.String类,加载时会向上委派,启动类加载器Bootstrap ClassLoader一看是java开头的类自己可以加载,于是就由启动类加载器进行加载,这时加载出来的就是核心库中的String类而不是自定义的,并不会打印
由于核心库中的String类是没有main()方法的,于是执行自定义的String类main()方法会报错
这样可以保证对java核心源代码的保护,称为沙箱安全机制
类的主动使用和被动使用
主动使用:
- 创建类的实例
- 访问某个类或接口的静态变量,或者对该静态变量赋值
- 调用类的静态方法
- 反射
- 初始化一个类的子类
- JAVA虚拟机启动时被标明为启动类的类
- JDK7开始提供的动态语言支持
其他使用JAVA类的方式都是对类的被动使用,都不会导致类的初始化