首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java类加载-加载

什么是类加载 虚拟机把描述类的数据从Class(Class文件或者网络或者其他地方,其实都是一串二进制流)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。...使用java.lang.reflect包的方法进行反射调用的时候,如果类没有初始化,则必须先初始化 初始化一个类的时候,如果父类没有被初始化(只有类的父类,接口的父类不会),则需要先初始化父类 JVM启动时首先初始化主类...java.lang.Class对象,作为方法区(元数据区)这个类的各种数据的访问入口 二进制字节流的来源可以是(但不仅仅是): Class文件 Zip包(也就是我们经常使用的JAR包、WAR包) 网络...非数组类的加载需要通过类加载器实现,既可以使用系统的提供的引导类加载,也可以使用用户自定义的类加载器去完成,关于类加载器后续我会单独写一篇文章来介绍,并且实现我们自己的一个类加载器。...对于数组类来说,数组类是由Java虚拟机直接创建的,但是数组中的元素类型需要通过类加载器加载。数组类的可见性与数组中元素的可见性一致,如果元素不是引用类型,数组类的可见性将默认为public。

1.3K40

java 类的加载

2.为静态[变量]赋值,访问静态变量 3.调用静态方法 4.使用反射方法创建某个类或接口的反射方法java.lang.Class 5.初始化某子类...6.通过java.exe调用类的方法时 类加载器 根类加载器 扩展类加载器 系统类加载 其他加载方式都是属于被动加载...类加载器之间严格遵守父委托机制 Bootsrap 根加载器 主要负责核心类库的加载,例如java.lang 包加载 扩展类加载器 扩展类加载器的父类是根加载器,主要用于加载java_home 下的jre...\lib\ext里面的类库,java实现,可以将自己实现的类打包放到下面加载....系统类加载器 负责加载classpath下的类库资源 双亲委托机制 当一个类加载器调用loadclass之后,它并不会直接将其进行加载,而是先交给当前类加载器的父加载器尝试加载直到最顶层的父加载器,然后再依次向下进行加载

76010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java的类加载

    类加载机制 JVM类加载机制分为五个部分: 加载,验证,准备,解析,初始化 加载 加载是类加载过程中的一个阶段,会在内存中生成一个代表这个类的java.lang.Class 对象,作为方法区这个类的各种数据的入口...初始化 初始化阶段是类加载的最后一个阶段,前面的类加载阶段之后,除了在加载阶段可以自定义类加载器之外,其他操作都有JVM主导 到了初始化阶段,才开始真正执行类中定义的java程序代码 初始化阶段是 执行类构造器...什么时候触发类加载 什么情况需要开始类加载过程的第一阶段(加载)呢? Java虚拟机规范中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。...扩展类加载器(Extension ClassLoader) 负责加载 JAVA_HOME\lib\ext 目录中的,或通过 java.ext.dirs 系统变量指定路径中的类 库。...应用程序类加载器(Application ClassLoader) 负责加载用户路径(classpath)上的类库 双亲委派 JVM通过 双亲委派模型进行类的加载,我们也可以通过继承 java.lang.ClassLoader

    85520

    JAVA类加载

    一、什么是类的加载 在介绍类的加载机制之前,先来看看,类的加载机制在整个 java 程序运行期间处于一个什么环节,下面使用一张图来表示: 从上图可以看,java 文件通过编译器变成了.class 文件,...有了这个印象之后我们再来看类的加载的概念: 其实可以一句话来解释: **类的加载指的是将类的.class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class...,则其父 类 也 会 被 初 始 化 Java 虚 拟 机 启 动 时 被 标 明 为 启 动 类 的 类 ( JavaTest),直接使用 java.exe 命令来运行某个主类好了,到目前为止就是类加载机制的整个过程...我们看到 java为我们提供了三个类加载器,应用程序都是由这三种类加载器互相配合进行加载的,如果有必要,我们还可以加入自定义的类加载器。这三种类加载器的加载顺序是什么呢?...** 4、自定义类加载器 在这一部分第一小节中,我们提到了 java 系统为我们提供的三种类加载器,还给出了他们的层次关系图,最下面就是自定义类加载器,那么我们如何自己定义 类加载器呢?

    1.1K75

    java类加载的过程 父_类加载机制原理

    ; 程序所在平台强制结束了JVM进程; 类加载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件,在java中类装载器把一个类装入JVM,经过以下步骤: 1、加载:查找和导入Class文件...类的加载过程 当Java程序需要使用某个类时,如果该类还未被加载到内存中,JVM会通过加载、连接(验证、准备和解析)、初始化三个步骤来对该类进行初始化。...当Java程序需要使用某个类时,如果该类还未被加载到内存中,Java虚拟机会通过加载、连接和初始化一个Java类, 使该类可以被正在运行的Java程序所使用。...类初始化的时机 在类和接口被加载和连接的时机上, Java虚拟机规范给实现提供了一定的灵活性 。但是它严格地定义了初始化的时机 。所有的Java虚拟机实现必须在每个类或接口首次主动使用时初始化 。...通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源: 从本地文件系统加载class文件; 从一个ZIP、 JAR、 CAB或者其他某种归档文件中提取Java class文件,JDBC

    71520

    Java的类加载机制

    ClassLoader提供了一系列的方法,比较重要的方法如: JVM中类加载器的树状层次结构 引导类加载器(bootstrap class loader): 它用来加载 Java 的核心库(jre/...加载扩展类和应用程序类加载器,并指定他们的父类加载器,在java中获取不到。...该类加载器在此目录里面查找并加载 Java 类。 (jar包用) 系统类加载器(system class loader): 它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。...(我们写的代码用) 自定义类加载器(custom class loader): 除了系统提供的类加载器以外,开发人员可以通过继承 java.lang.ClassLoader类的方式实现自己的类加载器,...双亲委派机制的好处:   保证java核心库的安全性(例如:如果用户自己写了一个java.lang.String类就会因为双亲委派机制不能被加载,不会破坏原生的String类的加载) 代理模式

    21920

    java类的加载机制

    1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构...类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。...加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中,而且在Java堆中也创建一个 java.lang.Class类的对象,这样便可以通过该对象访问方法区中的这些数据。...,有很多其他的虚拟机是用Java语言实现的),是虚拟机自身的一部分;所有其它的类加载器:这些类加载器都由Java语言实现,独立于虚拟机之外,并且全部继承自抽象类 java.lang.ClassLoader...启动类加载器是无法被Java程序直接引用的。

    60931

    【Java】类的加载过程

    类的加载过程 类的加载过程又分为三个步骤: 过程1:类的装载(Loading) 将类的class文件读入内存,并为之创建一个java.lang.Class的实例对象,此过程由类加载器(负责类的加载,对应一个...过程2:链接(Linking) 验证(Verify):确保加载的类的信息符合JVM规范,例如:每一个class文件都以cafebabe开头,没有安全方面的问题。...准备(Prepare):正式为类中的(static)静态变量分配内存,并设置默认初始化值的阶段。这些内存都在方法区中进行分配。...解析(Resolve):虚拟机常量池内得符号引用(常量名)替换为直接引用(地址)的过程。 过程3:初始化(initialization) 执行类构造器方法的过程。...执行所有类中(static)静态变量和(static)静态代码块中的语句的赋值动作,这些操作都在方法中进行。 因为类的加载过程中还没有对象的存在,因而赋值操作也只能是对静态变量进行。

    29820

    Java的类加载器

    分类 系统自带的类加载器 启动类加载器(BootStrap) c++编写 加载核心库 java.* 3.拓展类加载器 (Extension) java编写 加载拓展库 javax.* 4.应用程序加载类...(AppClassLoader)java编写 加载程序所在目录 5.用户自定义的类加载器 自定义类加载器 java编写 定制化加载 我们先了解2个方法 第一个方法 findClass /**...我们通过类加载器去加载这个文件!我们通过类加载器创建该实例!他就会打印构造函数中的一句话!废话不多说我们直接上图吧!...然后开始编写我们自己的类加载器!...在测试之前回顾一下java的一个基础!类在被加载的时候,会自动调用空构造函数!所以我们的外部类,一旦被加载就会打印 HelloClasssLoader!!!来吧,试一下吧!

    36720

    Java类加载的顺序

    前言 那一年,呼延十又回想起被加载顺序支配的恐惧,笔试题上,好几个类,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…. 但是呢,我们还是有了解一下的必要的,在编码过程中有许多的应用....由于B类有父类,因此先加载A类. 加载A类的静态代码块,输出A-----static. 加载B类的静态变量,调用了方法,输出B----- static func....加载B类的静态代码块,输出B----- static. 加载A类的普通变量,private int i = aFunc();由于调用了方法,因此输出A----- default....加载A类的构造方法,输出A----- constructor. 加载B类的普通变量,调用了方法,输出B----- default. 加载B类的构造方法,输出了B----- constructor....在这期间,发现一些小的知识点,也记录一下. 静态变量,静态代码块的加载顺序只和代码编写的顺序有关. 普通变量及构造方法,顺序一定是先普通变量,再构造方法的.

    1.3K20

    java类的加载过程和类加载器的分析

    那JVM是如何来让我们写的java文件运行的呢?    这个问题通常的问法好像是:类是如何被加载的。   ...记得第一次遇见这个问题的时候,同学给我的回答是: 1.虚拟机会加载JDK里类的核心包 2.虚拟机会加载JDK里类的扩展包 3.虚拟机会加载JDK里类的系统包 4.虚拟机再会加载我们写好的java类。...最近在浏览一些博客时看到一些更为详细的讲解,如java类加载全过程,该博文有一万多的点击,但感觉还是讲得不够详细,说了类的加载过程有哪些,但没有详细的展开,说了一些类初始化的细节。  ...希望大家看了之后更能理解JVM的工作原理和java类的生产过程(类加载的过程); 类从被加载到虚拟机类存中开始,到被卸载出内存为止,它的整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...5.初始化 类初始化阶段是类加载过程中的最后一步,这才是执行类中定义的java程序代码(也可以说是字节码)。

    60350

    java类的加载过程和类加载器的分析

    那JVM是如何来让我们写的java文件运行的呢?    这个问题通常的问法好像是:类是如何被加载的。   ...记得第一次遇见这个问题的时候,同学给我的回答是: 1.虚拟机会加载JDK里类的核心包 2.虚拟机会加载JDK里类的扩展包 3.虚拟机会加载JDK里类的系统包 4.虚拟机再会加载我们写好的java类。...最近在浏览一些博客时看到一些更为详细的讲解,如java类加载全过程,该博文有一万多的点击,但感觉还是讲得不够详细,说了类的加载过程有哪些,但没有详细的展开,说了一些类初始化的细节。  ...希望大家看了之后更能理解JVM的工作原理和java类的生产过程(类加载的过程); 类从被加载到虚拟机类存中开始,到被卸载出内存为止,它的整个生命周期包括 加载 → 验证 → 准备 → 解析 → 初始化 ...5.初始化 类初始化阶段是类加载过程中的最后一步,这才是执行类中定义的java程序代码(也可以说是字节码)。

    1.5K80

    java类的加载机制

    一、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构...类加载:将类的.class文件中的二进制数据读入到内存中,生成java.lang.Class对象。Class对象用来封装方法区内的数据结构。JVM规范允许类加载器预先加载类。...也就是说,在JAVA中的同一个类,如果用不同的类加载器加载,则生成的class对象认为是不同的。...其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API...发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。

    41020

    java类加载器加载机制

    在沙箱组件中包括类装载器结构,类加载器体系结构也是java沙箱的第一道防线,因为程序都是通过类加载器才能够加载到JVM中的。   类加载器有三方面的作用: 1. 它防止了恶意代码去干涉善意代码 2....用一个图形表示就是:  引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自java.lang.ClassLoader。... 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。... 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。...关于java类加载机制推荐大家看这篇文章《深入探讨 Java 类加载器》,IBM文档,写的很详细。

    1K10

    java类加载常见的几种问题理解类加载机制

    类加载过程中的相关概念详见- http://m.myexception.cn/program/1602930.html http://www.codeceo.com/article/java-class-loader-learn.html...Java编译器会在编译时直接把这个类变量出现的地方替换成它的值,因此即使程序使用该静态类变量,也不会导致该类的初始化。...这要从java的类加载时机说起。 2 类的加载时机 类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。...3 何时开始类的初始化 什么情况下需要开始类加载过程的第一个阶段:”加载”。...2、 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3、 在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。

    45230

    Java类加载机制

    Java类加载机制是指 JVM 把类的字节码文件加载到内存,并进行链接和初始化的过程。...类加载器把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块称为“类加载器”。...对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。类加载器可分为启动类加载器、扩展类加载器和应用类加载器。...启动类加载器(Bootstrap ClassLoader)负责将存放在 JAVA_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中...,或者被 java.ext.dirs 系统变量所指定的路径中的所有类库,开发者可以直接使用扩展类加载器。

    9210

    Java类加载机制

    双亲委派 所谓的双亲委派,则是先让父类加载器试图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载该类。...这就是为很么修改了Class后,必须重新启动JVM,程序所做的修改才会生效的原因。...双亲委派 双亲委派机制的优势:采用双亲委派模式的是好处是Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader...假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的...java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。

    10610

    Java类加载机制

    1、描述类的加载过程及各个步骤的主要工作? 答: 类的加载过程可以大体分为三个大的阶段:加载、连接、初始化。其中,连接阶段又可以细分为:验证、准备、解析这三个阶段。...各个步骤的主要工作如下: 加载:一个规则,就是需要把.java文件如何变成.class文件。...这个规则就是在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区访问这些数据的访问入口。 验证:验证字节流是否符合Class文件格式的规范。...答:当某个类加载器在接到加载类的请求时,会将加载任务委托给父类加载器,依次递归,父类加载器可以完成类加载任务,就成功返回;不能加载则子类加载器自己完成加载。...意义:双亲委派避免类的重复加载问题,以及避免Java核心的API被篡改,保证了代码安全。

    67131
    领券