要了解类加载器先要了解类的加载

一、类的加载(类的加载概述)

当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。

1、加载

  1. 就是指将class文件读入内存,并为之创建一个Class对象。
  2. 任何类被使用时系统都会建立一个Class对象。

其中class对象也就是下一章节要将的反射的重点。
其中这个class对象描述了这个对象的所有信息,比如都有哪些构造方法,都有哪些成员方法,都有哪些字段等。

2、连接

  1. 验证 是否有正确的内部结构,并和其他类协调一致
  2. 准备 负责为类的静态成员分配内存,并设置默认初始化值
  3. 解析 将类的二进制数据中的符号引用替换为直接引用

3、初始化

 就是我们以前讲过的初始化步骤

3.1 类初始化时机(class初始化时机)

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

二、类加载器

1、类加载器

  1. 负责将.class文件加载到内存中,并为之生成对应的Class对象。
  2. 虽然我们不需要关心类加载机制,但是了解这个机制我们就能更好的理解程序的运行。

2、类加载器的组成

  1. Bootstrap ClassLoader 根类加载器
  2. Extension ClassLoader 扩展类加载器
  3. Sysetm ClassLoader 系统类加载器

3、类加载器的作用

3.1 Bootstrap ClassLoader 根类加载器

也被称为引导类加载器,负责Java核心类的加载
比如System,String等。在JDK中JRE的lib目录下rt.jar文件中

3.2 Extension ClassLoader 扩展类加载器

负责JRE的扩展目录中jar包的加载。
在JDK中JRE的lib目录下ext目录

3.3 System ClassLoader 系统类加载器

负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径

java基础之—类加载器的更多相关文章

  1. 黑马程序员:Java基础总结----类加载器

    黑马程序员:Java基础总结 类加载器   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...

  2. Java基础之类加载器

    Java类加载器是用户程序和JVM虚拟机之间的桥梁,在Java程序中起了至关重要的作用,理解它有利于我们写出更优雅的程序.本文首先介绍了Java虚拟机加载程序的过程,简述了Java类加载器的加载方式( ...

  3. Java基础加强-类加载器

    /*类加载器*/ 把.class文件从硬盘上加载出来,将类的字节码(二进制)加载到内存中 /*类加载器及其委托机制*/ Java虚拟机中可以安装多个类加载器(可以自己编写),系统默认三个主要类加载器, ...

  4. JAVA基础_类加载器

    什么是类加载器 类加载器是Java语言在1.0版本就引入的.最初是为了满足JavaApplet需要.现在类加载器在Web容器和OSGI中得到了广泛的应用,一般来说,Java应用的开发人员不需要直接同类 ...

  5. java 基础之--类加载器的过程

    先来段代码,大家瞧瞧运行pritln的结果是什么?(认真想一想哦

  6. Java中的类加载器

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16102131 从java的动态性到类加载机制   我们知道,Java是一种动态语言.那么怎 ...

  7. Java中的类加载器--Class loader

    学习一下Java中的类加载器,这个是比较底层的东西,好好学习.理解一下.  一.类加载器的介绍 1.类加载器:就是加载类的工具,在java程序中用到一个类,java虚拟机首先要把这个类的字节码加载到内 ...

  8. 黑马程序员——【Java高新技术】——类加载器

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 (一)类加载器(class loader) 用来动态加载Java类的工具,它本身也是Java类. ...

  9. Java中的类加载器以及Tomcat的类加载机制

    在加载阶段,虚拟机需要完成以下三件事情: 1.通过一个类的全限定名来获取其定义的二进制字节流. 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 3.在Java堆中生成一个代表这个类 ...

随机推荐

  1. 求1到n,n个整数的全排列

    package com.dong.harder; public class AllArrays { public static void main(String[] args) { // TODO A ...

  2. 导出excel时设置单元格格式(避免类似0100的数字丢失前面的0)

    <td style="vnd.ms-excel.numberformat:@;"><s:property value="accountCode" ...

  3. springboot org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

    参考 https://www.cnblogs.com/luxd/p/8316243.html https://www.cnblogs.com/s648667069/p/6478559.html @Co ...

  4. js中获取一个对象里面的方法和属性的javascript

    <script type="text/javascript"> var obj = { attribute:1, method:function() { alert(& ...

  5. 终端设备 tty,pty,pts 概念与文件描述符的联系

    第1节 理解终端设备tty.pty.pts概念 简要描述: 终端设备默认具有输入.输出功能. 现代我们最常用的接入服务器端的方式(如:ssh通过tcp/ip的方式连接服务器端,作为服务器的终端设备)为 ...

  6. PHP从规定字符中生成固定位数随即串

               }

  7. A class of finite groups with abelian 2-Sylow subgroups By CHIH-HAN SAH

    Remark: 1.An element of a group which conjugate to its inverse is called a real element. If $G$ has ...

  8. 2018年全国多校算法寒假训练营练习比赛(第四场)B:道路建设

    传送门:https://www.nowcoder.net/acm/contest/76/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 65536K,其他语言131072K 64b ...

  9. queue模拟

    BlockingQueue:顾名思义,首先它是一个队列,并且支持阻塞的机制,阻塞的放入和得到数据.我们要实现LinkedBlockingQueue下面两个简单的方法put和take. put(anOb ...

  10. PHP: PCRE 函数- Manual

    1.函数 http://php.net/manual/zh/ref.pcre.php 2.语法 http://www.runoob.com/regexp/regexp-tutorial.html