java包名以”java“开头会报错的原因
来源:互联网 发布:nginx 入门指南 pdf 编辑:程序博客网 时间:2024/06/11 17:44
Java的ClassLoader就是用来动态装载class的,ClassLoader对一个class只会装载一次,JVM使用的ClassLoader一共有4种:
启动类装载器,标准扩展类装载器,类路径装载器和网络类装载器。
这 4种ClassLoader的优先级依次从高到低,使用所谓的“双亲委派模型”。确切地说,如果一个网络类装载器被请求装载一个 java.lang.Integer,它会首先把请求发送给上一级的类路径装载器,如果返回已装载,则网络类装载器将不会装载这个 java.lang.Integer,如果上一级的类路径装载器返回未装载,它才会装载java.lang.Integer。
类似的,类 路径装载器收到请求后(无论是直接请求装载还是下一级的ClassLoader上传的请求),它也会先把请求发送到上一级的标准扩展类装载器,这样一层一 层上传,于是启动类装载器优先级最高,如果它按照自己的方式找到了java.lang.Integer,则下面的ClassLoader都不能再装载 java.lang.Integer,尽管你自己写了一个java.lang.Integer,试图取代核心库的java.lang.Integer是不 可能的,因为自己写的这个类根本无法被下层的ClassLoader装载。
再说说Package权限。Java语言规定,在同一个包中的 class,如果没有修饰符,默认为Package权限,包内的class都可以访问。但是这还不够准确。确切的说,只有由同一个ClassLoader 装载的class才具有以上的Package权限。比如启动类装载器装载了java.lang.String,类路径装载器装载了我们自己写的 java.lang.Test,它们不能互相访问对方具有Package权限的方法。这样就阻止了恶意代码访问核心类的Package权限方法。
-----------------
JVM 本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,Bootstrap ClassLoader是用本地代码实现的,它负责加载核心Java Class(即所有java.*开头的类)。另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由Bootstrap ClassLoader加载;其中Extension ClassLoader负责加载扩展的Java class(例如所有javax.*开头的类和存放在JRE的ext目录下的类),Application ClassLoader负责加载应用程序自身的类。
- java包名以”java“开头会报错的原因
- Java应用类的包名为什么不能以java.开头?
- Java应用类的包名为什么不能以java.开头?
- Launcher 功能表中优先显示以指定字符串开头的包名的应用
- 从JDK 1.7开始,java程序员不能够调用JDK系统包中以sun开头引入的类
- 从JDK 1.7开始,java程序员不能够调用JDK系统包中以sun开头的类
- package 以java开头的包名报:ClassNotFoundException真相
- 自定义包不能以java开头和为什么不能自定义java.lang.String 类
- java的类名、文件名、包名
- Java 判断字符串是否以什么开头
- Java判断字符串是否以数字开头
- java .class文件为什么以CAFEBABE开头?
- List 转 jsonArray 会报错的原因
- java的开头单词
- java取出以数字开头或者以数字结尾的字符串,将字符串转换为大写
- java包名问题
- java包名问题
- java 遍历一个list的时候 然后修改 会报错
- 分布式Web服务器架构
- 黑马程序员-------Java继承下
- Android Contacts的使用(一)
- 秒杀倒计时的js脚本
- spring的AOP模块配置示例
- java包名以”java“开头会报错的原因
- 程序员面试题
- 交警vs死神
- [Python]python常用代码
- MSN被盗号
- android 高斯模糊
- 厨房显示系统 迪泰餐饮管理系统
- 黑马程序员-------Java多线程
- 提高网站加载速度的3项黄金守则