java类的加载过程

1.java在jvm中运行时支持两种类型的类加载器

引导类加载器:用于加载Java核心库(JAVA_HOME/jre/lib/rt.jar,resources.jar或sun.boot.class.path路径下的内容,用于提供JVM自身需要的类,jvm自身所用,由c语言实现,嵌套在jvm内部,没有继承ClassLoder。

自定义类加载器:用户定义的类,或继承ClassLoder的类,都会被jvm划分为自定义类加载器。

2.jdk中自带的三个类加载器

  1、启动类加载器:rt.jar
  2、扩展类加载器: ext\*.jar
  3、应用类加载器: classpath

 

启动类加载器(属于引导类,没有继承ClassLoder)

  • 出于安全考虑,BootStrap启动类加载器只加载包名为java,javax,sun等开头的类

扩展类加载器、应用类加载器(同属于自定义类,因为继承了ClassLoder)

3.加载过程

在写完一段代码后,程序启动时,会将所有需要的类全部加载到jvm中。通过类加载器加载,加载过程如下↓

2.1 首先是通过 "启动类加载器加载"

加载jre下的lib中的jar。

2.2 如果启动类加载不到,那么通过 "扩展类加载器加载"

加载jre中lib下的ext下的jar。

2.3 如果扩展类还加载不到,那么通过 "应用类加载器加载

加载环境变量配置的classpath下的类

可能有的人不懂这个classpath,其实就是为了把java源文件编译之后的所有字节码文件放在一个特定的地方。

区别:

不配置classpath的情况下,你想要运行一个.java文件只能切到所属路径下 java 文件名.jar 才能运行。

配置classpath以后,在哪里都可以打开cmd 输入 java 文件名.java  运行。

配置方法如下↓

新建CLASSPATH 变量,变量值为:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面是有一个点的)

4. 双亲委派

优先从启动类加载器中加载,这个称为"父",
“父"无法加载到,再从扩展类中加载, 这个称为"母”。这就是双亲委派。
如果都加载不到才会考虑从应用类加载器中加载。直到加载到为止

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值