什么是类加载器

作用:

负责把.class文件(存储的物理文件)加载在到内存中

类加载时机:
  1. 创建类的实例(对象)
  2. 调用类的类方法
  3. 访问类或者接口的类变量,或者为该类变量赋值
  4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
  5. 初始化某个类的子类
  6. 直接使用java.exe命令来运行某个主类

总结:用到就加载,不用就不加载

类加载过程:

当一个类被使用的时候,才会加载到内存

  1. 加载
  2. 验证(链接)
  3. 准备(链接)
  4. 解析(链接)
  5. 初始化
类加载过程——加载:
  1. 通过包名 + 类名,获取这个类,准备用流进行传输
  2. 将这个类加载到内存中
  3. 加载完毕创建一个class对象

在这里插入图片描述

类加载过程:链接

验证:

作用:文件中的信息是否符合虚拟机规范有没有安全隐患

在这里插入图片描述
准备:

作用:负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值

在这里插入图片描述
解析:

作用:本类中如果用到了其他类,此时就需要找到对应的类
像String name 这个变量,String在准备的时候是使用一些符号代替的,到了解析这一步才会找到对应的String类解析并引用

在这里插入图片描述

类加载过程:初始化

作用:对静态变量赋值以及初始化其他资源

在这里插入图片描述

类加载器分类:
  1. Bootstrap class loader:虚拟机的内置类加载器,通常表示为null ,并且没有父null
  2. Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块
  3. System class loader:系统类加载器,负责加载用户类路径上所指定的类库
  4. UserClassloader:自定义类加载器

类加载器的继承关系:

  1. 自定义类的父加载器为System
  2. System的父加载器为Platform
  3. Platform的父加载器为Bootstrap
public class Demo01 {public static void main(String[] args) {//获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();System.out.println("系统类加载器" + systemClassLoader);//获取系统类加载器的父加载器 ‐‐‐ 平台类加载器ClassLoader platform = systemClassLoader.getParent();System.out.println("平台类加载器" + platform);//获取平台类加载器的父加载器 ‐‐‐ 启动类加载器ClassLoader bootstrap = platform.getParent();System.out.println("启动类加载器" + bootstrap);}
}
双亲委派模型:

如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,再一层一层返回给子类,然后子类加载器才会尝试自己去加载,这就是双亲委派模式

在这里插入图片描述

ClassLoader 中的两个方法:
方法名说明
public static ClassLoader getSystemClassLoader()获取系统类加载器
public InputStream getResourceAsStream(String name)加载某一个资源文件
public class Demo02 {public static void main(String[] args) throws IOException {//static ClassLoader getSystemClassLoader() 获取系统类加载器// InputStream getResourceAsStream(String name) 加载某一个资源文件// 获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();//利用加载器去加载一个指定的文件// 参数:文件的路径(放在src的根目录下,默认去那里加载)// 返回值:字节流。InputStream resourceAsStream = systemClassLoader.getResourceAsStream("prop.properties");Properties properties = new Properties();properties.load(resourceAsStream);System.out.println(properties);resourceAsStream.close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring中@Transactional事务回滚(含实例详细讲解,附源码)

原文出处: 小宝鸽 一、使用场景举例 在了解Transactional怎么用之前我们必须要先知道Transactional有什么用。下面举个栗子:比如一个部门里面有很多成员,这两者分别保存在部门表和成员表里面,在删除某个部门的时候,假设…

服务器不稳定 如何让百度重新收录网站,教你如何让百度重新收录首页

很多站长都应该碰到这个问题:百度不收录首页,或者site网站,首页不在第一位。我想这个问题也曾经困扰过许多的站长,我说说导致百度不收录首页或者首页不在第一位的几种状况以及解决的方法。第一 页面链接过多,一般一个…

日志-Log4J

日志: 程序中的日志可以用来记录程序在运行的时候点点滴滴。并可以进行永久存储 日志和输出语句的区别: 输出语句日志技术取消日志需要修改代码,灵活性比较差不需要修改代码,灵活性比较好输出位置只能是控制台可以将日志信息写入…

七月工作笔记 7.7 - 7.11

1. vs第二次单步调试崩溃。。一開始不知道为什么,重装无数次。。后来发现是VAssistX 插件的问题。。。将下载下来的插件包中的VA_X.dll 复制到VAssistX 的安装路径下就可以。2. 发现了一个非常棒的vs配色方案的站点 http://studiostyl.es/3. sendmessage和postme…

VMware安装虚拟机Mac版

VMware: 1、不需要分区或重开机就能再同一台PC上使用多种操作系统。 2、完全隔离并且保护不同操作系统的环境以及所有软件、资料。 3、不同的操作系统之间还能互动操作 4、有复原功能 5、能够设置并且随时修改操作系统的操作环境 下载地址:https://www.v…

Drupal 自己定义主题实体 Theming Custom Entities

在自己定义主题中输出结果时,有三个部分或很多其它特殊的函数。如 hook_menu,Page Callback。MODULE_theme 钩子 1、hook_menu 为了使用自己定义的实体。像创建、编辑、删除、查看实体的功能,就必须要创建一些 Menu path。这里创建、编辑、…

黑暗之魂3正在从服务器获取信息,黑暗之魂3如何解决入侵服务器问题 | 手游网游页游攻略大全...

发布时间:2016-01-04今天为大家带来的是黑暗之魂3法兰守卫入侵方法,一起来看看吧! 黑暗之魂3 法兰守卫入侵方法 法兰守卫怎么入侵 今天为大家带来的是黑暗之魂3法兰守卫入侵方法,一起来看看吧! 你的游戏可能被防火墙禁止了——解决方法:找到你的 ...标签&#xff1a…

Linux用户与用户组

Linux目录详解: 目录名说明/bin重要的二进制 (binary) 应用程序:包含二进制文件,系统的所有用户使用的命令都在这个目录下/boot启动 (boot) 配置文件:包含引导加载程序相关的文件,开机时用到的引导文件/data数据存储区…

数据库增添

条件查询用where 比如&#xff1a;查询Score表中成绩在60到80之间的所有记录。 select DEGREE from score where degree>60 and degree<80 模糊查询用% 比如查询与三相关的数据&#xff1a; where cno like 3% 3%是已三开头 %3%是中间带3 %3是末尾带3 排序查询 orde…

小程序怎样和服务器交互,微信小程序与 Django服务器 数据流 交互通信

Django服务器 解析小程序发送的json二进制字符串https://blog.csdn.net/qq_25068917/article/details/81041048http://www.cnblogs.com/Liang-jc/p/9326680.html小程序 解析Django服务器返回的json二进制字符串(字典)https://blog.csdn.net/qiushi_1990/article/details/759129…

Linux时间date与timedatectl

date&#xff1a; date是Linux里日期管理命令 UTC 协调世界时&#xff0c;又称世界统一时间、世界标准时间、国际协调时间。由于英文&#xff08;CUT&#xff09;和法文&#xff08;TUC&#xff09;的缩写不同&#xff0c;作为妥协&#xff0c;简称UTC GMT 即格林尼治 平太阳时…

2.apache模块mod_rpaf ,让nginx代理后端的apache获取访客真是IP

安装mod_rpaf这个模块 #wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz(下载不了就在百度上找相应的软件包下载) #tar xvfz mod_rpaf-0.6.tar.gz #cd mod_rpaf-0.6检查有没有httpd-devel这个工具包(如果没有就安装一下&#xff0c;有就直接执行…

Linux切换用户

显示目前用户的名称 logname切换用户 su 用户名当在权限不够的时候可以使用下面的命令执行&#xff0c;执行完会再自动切换到执行前的用户 su -c 要执行的命令 要切换的用户名 su -c ls root提高普通用户的操作权限,权限提升到了root sudo <参数> sudo ls sudo其它参…

oracle 之 基础操作

//删除存在的表空间及数据 drop tablespace TS_YYGL including contents and datafiles若是出现了提示 错误 导致无法全部删除&#xff0c;那么就执行以下语句可以得到那些表有主键相关&#xff0c;再执行就可以 select alter table ||owner||.||table_name|| drop constraint …

object类型转换为Array类型

var obj {a: 1, b: 2, c: 3}; // .... var arr []; for(var key in obj){ if(!obj.hasOwnProperty(key)){continue;}var item {}; item[key] obj[key]; arr.push(item); } console.log(arr); // [{a: 1}, {b: 2}, {c: 3}] // 将Object的属性输出成Array function objOf…

关机重启与who

关机&#xff1a; shutdown命令可以用来进行关闭系统&#xff0c;并且在关机以前传送讯息给所有使用者正在执行的程序&#xff0c;shutdown 也可以用来重开机使用者权限&#xff1a;管理员用户 关机语法 shutdown [-t seconds] [-rkhncfF] time [message]参数说明&#xff1a;…

webpack之font-awesome

1、安装font-awesome和font-awesome-loader及依赖 git&#xff1a;https://github.com/shakacode/font-awesome-loader npm install font-awesome-loader less less-loader css-loader style-loader file-loader font-awesome -save 2、配置webpack 官方给出的webpack2.0配置如…

目录命令及权限

目录命令及权限&#xff1a; 命令说明ls列出目录cd切换目录pwd显示目前的目录mkdir创建新目录rmdir删除一个空的目录cp复制文件或目录rm移除文件或目录mv移动文件与目录或修改文件与目录的名称 ls列出目录&#xff1a; ls # 显示不隐藏的文件和文件夹 ls -l # 显示不隐藏的…

【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)

之前的相关文章参考&#xff1a; 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件&#xff08;一&#xff09; 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件&#xff08;二&#xff09; 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件&#xff08;三&#xff09; ---------------…

前端通信:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码(改迭代已作废,移步迭代10)...

该迭代已作废&#xff0c;最新的请移步这里&#xff1a;https://www.cnblogs.com/GerryOfZhong/p/10726306.html 距离上一篇博客书写&#xff0c;又过去了大概几个月了&#xff0c;这段时间暂时离开了这个行业&#xff0c;让大脑休息一下。一个人旅行&#xff0c;一个人休息&am…