简介:
Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类的时候才会将它的class文件加载到内存中生成class对象,而且加载某个类的class文件时,java虚拟机采用的是双亲委派模式,即将请求交予父类处理,它是一种任务委派模式
创建一个和String同包名/同类名的自定义类String,并写上main方法执行,但是执行报错:
在java.lang.String类中找不到main方法,这是为什么呢?
思考:
按照双亲委派机制可知,当执行main方法时,类加载器会将该类的二进制流加载到内存中,但是双亲委派机制,会将类加载请求给他的上层类加载器,
最终到启动类加载器进行加载,启动类加载器加载以java,javax,sun开头的类,会将rt.jar包中的java.lang.String.class加载到内存中,但是这个
String并没有main方法,所以报上述错误
沙箱安全机制
自定义的String类,但是在加载String类时会率先使用引导类加载器加载,而引导类加载器在加载过程中会先加载JDK自带的文件(rt.jar中的java.lang.string)
报错信息说没有main方法,就是因为加载的时rt.jar包中的String类,这样就保护了java核心代码
这就是沙箱机制
双亲委派机制的优势:
>避免类的重复加载
>保护程序安全,防止核心API被随意篡改
其他补充
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/tech/java/274209.html