精华内容
下载资源
问答
  • 系统提供的类加载器主要有下面三个:引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -...

    Java中的类加载器

    Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:

    引导类加载器(bootstrap class loader):

    它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -Xbootclasspath 选项指定的jar包装入工作(其中的jdk_home是指配置jdk环境变量是java_home的配置路径,一般是jdk/jre所在目录)。

    扩展类加载器(extensions class loader):

    它用来加载 Java 的扩展库。Java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里面查找并加载 Java 类,主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

    系统类加载器(system class loader):

    它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。主要负责CLASSPATH/-Djava.class.path所指的目录下的类与jar包装入工作.

    除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,从而进行动态加载class文件,以满足一些特殊的需求,这体现java动态实时类装入特性。

    除了引导类加载器之外,所有的类加载器都有一个父类加载器,通过getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。下图中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。

    bcf17018c96ef99b3aa514189d4a9ecf.png

    展开全文
  • 系统提供的类加载器主要有下面三个:引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -...

    Java中的类加载器

    Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:

    引导类加载器(bootstrap class loader):

    它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -Xbootclasspath 选项指定的jar包装入工作(其中的jdk_home是指配置jdk环境变量是java_home的配置路径,一般是jdk/jre所在目录)。

    扩展类加载器(extensions class loader):

    它用来加载 Java 的扩展库。Java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里面查找并加载 Java 类,主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

    系统类加载器(system class loader):

    它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。主要负责CLASSPATH/-Djava.class.path所指的目录下的类与jar包装入工作.

    除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,从而进行动态加载class文件,以满足一些特殊的需求,这体现java动态实时类装入特性。

    除了引导类加载器之外,所有的类加载器都有一个父类加载器,通过getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。下图中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。

    bcf17018c96ef99b3aa514189d4a9ecf.png

    展开全文
  • 1)Bootstrap ClassLoader负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类2)Extension ClassLoader负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-D...

    1)Bootstrap ClassLoader

    负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类

    2)Extension ClassLoader

    负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

    3)App ClassLoader

    负责记载classpath中指定的jar包及目录中class

    4)Custom ClassLoader

    属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader

    加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

    展开全文
  • 有哪些类加载器,分别加载哪些类 类加载器按照层次,从顶层到底层,分为以下三种:(1)启动类加载器:它用来加载Java的核心库,比如String、System这些类(2)扩展类加载器:它用来加载Java的扩展库。 (3) 应用程序...

    0

    有的书上介绍的JVM中3个默认ClassLoader是:BootStrap ClassLoader,Extension

    ClassLoader,System ClassLoader。当然有时我们也可以设置UseLibrary ClassLoader。这个题是不是有问题呢?

    发表于 2015-08-24 16:46:27

    回复(0)

    更多回答

    142

    推荐

    C

    JVM在判定两个c

    查看全部

    编辑于 2015-01-10 21:03:23

    回复(13)

    136

    一个jvm中默认的classloader有Bootstrap ClassLoader、Extension

    ClassLoader、App ClassLoader,分别各司其职:

    Bootstrap

    ClassLoader   负责加载java基础类,主要是

    %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等

    Extension ClassLoader

    负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class

    App ClassLoader       负责加载当前java应用的classpath中的所有类。

    classloader 加载类用的是全盘负责委托机制。

    所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。

    所以,当我们自定义的classlo

    ader加载成功了

    com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。

    发表于 2015-09-20 22:38:32

    回复(4)

    114

    比较两个类是否相等,只有这两个类是由同一个类加载器加载才有意义。否则,即使这两个类是来源于同一个Class文件,只要加载它们的类加载器不同,那么这两个类必定不相等。

    补充:

    1.

    什么是类加载器?

    把类加载的过程放到Java虚拟机外部去实现,让应用程序决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。

    2.

    有哪些类加载器,分别加载哪些类

    类加载器按照层次,从顶层到底层,分为以下三种:(1)启动类加载器:它用来加载Java的核心库,比如String、System这些类(2)扩展类加载器:它用来加载Java的扩展库。

    (3)

    应用程序类加载器 :负责加载用户类路径上所指定的类库,一般来说,Java应用的类都是由它来完成加载的。

    3.

    双亲委派模型

    我们应用程序都是由以上三种类加载器互相配合进行加载的,还可以加入自己定义的类加载器。称为

    类加载器的双亲委派模型

    ,这里类加载器之间的父子关系一般不会以继承的关系来实现,而是都使用

    组合关系

    来复用父加载器的。

    4.

    双亲委托模型的工作原理

    是当一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法加载这个加载请求的时候,子加载器才会尝试自己去加载。

    5.

    使用双亲委派模型好处?(原因)

    第一:可以避免重复加载,当父亲已经加载了该类的时候,子类不需要再次加载。

    第二:考虑到安全因素,如果不使用这种委托模式,那我们就可以随时使用自定义的String来动态替代java核心api中定义类型,这样会存在非常大的安全隐患,而双亲委托的方式,就可以避免这种情况,因为String已经在启动时被加载,所以用户自定义类是无法加载一个自定义的类装载器。

    编辑于 2016-11-07 22:07:51

    回复(10)

    21

    ClassLoader使用的是

    双亲委托模型

    来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap

    ClassLoader)本身没有父类加载器,但可以用作其它ClassLoader实例的的父类加载器。当一个ClassLoader实例需要加载某个类时,它会试图亲自搜索某个类之前,先把这个任务委托给它的父类加载器,这个过程是由上至下依次检查的,首先由最顶层的类加载器Bootstrap

    ClassLoader试图加载,如果没加载到,则把任务转交给Extension

    ClassLoader试图加载,如果也没加载到,则转交给App ClassLoader 进行加载,如果它也没有加载得到的话,则返回给委托的发起者,由它到指定的文件系统或网络等URL中加载该类。如果它们都没有加载到这个类时,则抛出ClassNotFoundException异常。否则将这个找到的类生成一个类的定义,并将它加载到内存当中,最后返回这个类在内存中的Class实例对象。

    发表于 2016-03-27 14:34:57

    回复(4)

    5

    在JVM中,一个类用其全限定类名和其类加载器作为唯一标识,

    如果在pg包下,有一个Person类,classloade k1 、

    classloade k2分别加载Person类

    Person类在JVM中对应的Class对象为

    (

    Person,pg,k1

    )与

    (

    Person,pg,k2

    )

    是不同的

    发表于 2016-03-08 11:24:09

    回复(0)

    3

    classloader的作用是用来加载 Class 的:它负责将 Class 的字节码形式转换成内存形式的 Class 对象。

    字节码可以来自于磁盘文件 *.class,也可以是 jar 包里的 *.class,也可以来自远程服务器提供的字节流,字节码的本质就是一个字节数组 []byte,它有特定的复杂的内部格式。

    JVM 运行实例中会存在多个 ClassLoader,不同的 ClassLoader 会从不同的地方加载字节码文件。

    它可以从不同的文件目录加载,也可以从不同的 jar 文件中加载,也可以从网络上不同的静态文件服务器来下载字节码再加载。

    jvm里ClassLoader的层次结构

    f1e77f747218b67444ba638a039b16ce.png

    发表于 2020-05-03 10:06:37

    回复(0)

    3

    选C

    e7debd604f7b232736afa3983968e1c3.png

    A、Java中存在三种系统加载器:

    1. Bootstrap ClassLoader(启动类加载器),这个类加载器负责把存放在\lib目录中,或者被-Xbootclasspath参数指定得路径中得,并且被JVM识别得类库加载进入JVM。注意一下,这个加载器不能被Java程序直接引用。这个加载器是由C++写得。

    2. Extension ClassLoder(扩展类加载器),这个加载器负责加载\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库。这个类加载器可以直接使用。

    3. Application ClassLoader(应用程序加载器),用来加载classpath中所指定的类库。这个是默认的类记载器。

    B、类加载器中除了顶层的启动类加载器,其余的类加载器都是必须有自己的父类加载器。但是这种子父关系一般不会以继承的关系实现,而是使用了组合的关系来复用父加载器的代码。

    类加载器都正常情况下都是以双亲委派模型工作的,工作原理如下,如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送给顶层的启动类加载器,只有当父加载器反馈自己无法完成时,子加载器才会尝试自己去加载。

    C、一个类在JVM中的唯一性是由类本身和类加载器一起决定的。每一个类加载器都有一个独立的类名称空间。

    D、类加载器就是动态的把.class文件加载进JVM,没毛病。

    发表于 2018-07-04 11:47:35

    回复(0)

    1

    C,只有同一个类加载器加载的相同类名的才是一个class

    发表于 2015-09-15 16:30:33

    回复(0)

    0

    jvm判断两个class是否相同,类名相同,同一类加载器实例加载

    发表于 2021-02-20 16:18:42

    回复(0)

    0

    这个不熟

    发表于 2020-09-17 22:39:26

    回复(0)

    0

    不会

    发表于 2020-03-10 21:37:30

    回复(0)

    0

    JVM中默认的ClassLoader是Bootstrap ClassLoader,Extension ClassLoader,App ClassLoader

    >Bootstrap ClassLoader 负责加载java基础类 主要是%JRE_HOME/lib/目录下的rt.jar resources.jar,charsets.jar和class等

    >Exrension ClassLoader 负责加载java扩展类 %JRE_HOME/lib/text目录下的jar和class

    >App ClassLoader 负责加载java应用的classpath中的所有类

    1.什么是类加载器?

    把类加载过程放到 java虚拟机外部去实现,让应用程序决定如何获取需要的类,称为类加载器

    2.类加载器分为 启动类加载器 扩展类加载器 应用类加载器

    3.双亲委派机制:三种类加载器相互配合,还可以添加自定义类加载器,进行类加载称为双亲委派机制;

    4.工作原理,委派父类加载器加载,一直委派到根类,如果无法加载,子类就会自动调用类加载器加载

    5.双亲委派机制 避免了重复加载 考虑到了安全因素

    发表于 2018-09-20 11:01:32

    回复(0)

    0

    类名和类加载器都要比较

    发表于 2017-10-26 20:43:38

    回复(0)

    0

    一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职: Bootstrap ClassLoader     负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等 Extension ClassLoader      负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class App ClassLoader           负责加载当前java应用的classpath中的所有类。 jvm判断两个类是否 相等,不止类名相等,类的加载器也必须相等。 classloader 加载类用的是全盘负责委托机制。 所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。 所以,当我们自定义的classlo ader加载成功了 com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。 比较两个类是否相等,只有这两个类是由同一个类加载器加载才有意义。否则,即使这两个类是来源于同一个Class文件,只要加载它们的类加载器不同,那么这两个类必定不相等。 补充: 1. 什么是类加载器? 把类加载的过程放到Java虚拟机外部去实现,让应用程序决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。

    编辑于 2017-10-14 10:22:04

    回复(0)

    0

    JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。

    发表于 2017-08-07 09:55:06

    回复(0)

    0

    比较两个类是否相等,只有这两个类是由同一个类加载器加载才有意义。否则,即使这两个类是来源于同一个Class文件,只要加载它们的类加载器不同,那么这两个类必定不相等。

    补充: 1. 什么是类加载器?

    把类加载的过程放到Java虚拟机外部去实现,让应用程序决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。   2.

    有哪些类加载器,分别加载哪些类 类加载器按照层次,从顶层到底层,分为以下三种: (1)启动类加载器 : 它用来加载 Java

    的核心库,比如String、System这些类 (2)扩展类加载器 : 它用来加载 Java 的扩展库。 (3) 应用程序类加载器 :

    负责加载用户类路径上所指定的类库,一般来说,Java 应用的类都是由它来完成加载的。 3. 双亲委派模型

    我们应用程序都是由以上三种类加载器互相配合进行加载的,还可以加入自己定义的类加载器。称为 类加载器的双亲委派模型

    ,这里类加载器之间的父子关系一般不会以继承的关系来实现,而是都使用 组合关系 来复用父加载器的。 4. 双亲委托模型的工作原理

    是当一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法加载这个加载请求的时候,子加载器才会尝试自己去加载。

    5. 使用双亲委派模型好处?(原因) 第一:可以避免重复加载,当父亲已经加载了该类的时候,子类不需要再次加载。

    第二:考虑到安全因素,如果不使用这种委托模式,那我们就可以随时使用自定义的String来动态替代java核心api中定义类型,这样会存在非常大的安全隐患,而双亲委托的方式,就可以避免这种情况,因为String已经在启动时被加载,所以用户自定义类是无法加载一个自定义的类装载器。

    发表于 2016-12-12 09:37:21

    回复(0)

    0

    全盘委托,类加载器,类名相同,类加载器相同

    发表于 2016-10-22 08:09:54

    回复(0)

    0

    JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。

    发表于 2016-04-13 21:04:05

    回复(0)

    0

    答案:C

    由于类加载器的双亲委托机制,不同类加载器加载的类必定不是同一个类

    发表于 2015-01-10 11:46:28

    回复(0)

    0

    C.JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关

    发表于 2015-01-06 18:15:11

    回复(0)

    展开全文
  • 关于static说法不正确的是( )正确答案: D 你的答案: D (正确)可以直接用类名来访问类中静态方法(public权限)静态块仅在类加载时执行一次static方法中不能有用this调用的方法不可以用对象名来访问类中的静态方法...
  • 1. 为什么说Java是一门平台无关语言?平台无关实际的含义是“一次编写到处运行”。Java 能够做到是因为它的字节码(byte code)可以运行在任何操作系统上,与底层系统无关。2. 为什么 Java 不是100%面向对象?Java ...
  • 1关于 Java 线程,下面说法错误的是()。正确答案: C创建线程的方法有两种:实现Runnable接口和继承Thread类java利用线程使整个系统成为异步新线程一旦被创建,它将自动开始运行创建线程的方法有三种:(1)继承Thread...
  • 1、下面有关JSP内置对象的描述,说法错误的是? CA、session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止B、request对象:客户端...
  • 分析:方法重载的概念:在同一个中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。即就是同一个、相同方法名,参数列表不同:参数个数不同,参数类型不同。跟方法...
  • 链接:https://www.nowcoder.com/questionTerminal/0e1fa12fd45642bea3acde2c2e913b3f 来源:牛客网 参考文献:...1. 问题: 下面有关java类加载器,说法正确的是? A. 引导类加载器(bootstrap...
  • java类加载器

    2019-07-22 11:19:00
    jar 运行过程和类加载机制有关,而类加载机制又和我们自定义的类加载器有关,现在我们先来了解一下双亲委派模式。 java类加载器分为三个: BootstrapClassLoader 负责加载${JAVA_HOME}/jre/lib部分 jar 包 ...
  • 下面有关java classloader说法错误的是? 正确答案: C A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader B ClassLoader使用的是双亲委托模型来搜索的 ...
  • 类与类加载器

    2019-07-09 21:50:00
    在 https://blog.csdn.net/qq_37971464/article/details/94967166 此篇记录了有关类加载的内容,下面接着讲解类与类加载器 对于任意一个类,都需要由加载它的类加载器与这个类本身一同确定其在Java虚拟机中的唯一性...
  • 【单选题】下面有关Java代码安全性叙述错误的是()A. 字节码校验器加载查询执行所需要的所有类 B. 运行时,由解释器执行代码 C. 运行时,字节码被加载、验证,然后在解释器里运行 D. 类加载器更多相关问题【单选题】急性...
  • java面试题28 牛客 下面有关java classloader说法错误的是? A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader B ClassLoader使用的是双亲委托模型来搜索的 ...
  • 下面,将主要分析下与加载器有关java程序动态扩展。  这篇文章只挑了类加载器的一个问题来分析,如果要想了解类加载器的一些常见问题以及自定义类加载要注意的一些细节,可以参考我的上篇文章:   ...
  • 下面有关java类加载器,说法正确的是?(ABCD) A 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的 B 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库...
  • 2020-10-23JAVA错题

    2020-10-23 16:20:11
    1.下面有关java类加载器,说法正确的是? 正确答案: A B C D 你的答案: A B D (错误) A:引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的 B:扩展类加载器(extensions ...
  • Java错题集(十三)

    2021-02-08 12:22:01
    下面有关java基本类型的默认值和取值范围,说法错误的是? 下列关于异常处理的描述中,错误的是()。 Java的体系结构包含()。 下面有关 java 类加载器,说法正确的是?() 下列哪些操作会使线程释放锁资源? 下面...
  • 天梯180327

    2018-03-26 00:03:42
    天梯1803271. (不定项)下面有关java类加载器,说法正确的是()?A. 引导类加载器(bootstarp class loader):它用来加载 Java的核心库,是用原声代码来实现的。B. 扩展类加载器(extensions class loader):它...
  • 此文不考虑静态成员,因为这是与加载有关。 调用每个对象的构造函数之前,先按照声明顺序调用成员的初始化方法。(成员的初始化方法例如为下面的private int radius = 1;) 考虑到继承,那么是先调用基类构造...
  • Java基础知识

    2019-12-28 15:00:35
    下面有关JAVA代码安全性的叙述错误的是() A 字节码校验器加载查询执行所需的所有类 B 运行时由解释器执行代码 C 运行时,字节码被加载,验证,然后在解释器中执行 D 类加载器通过分离本机文件系统的类和从网络...
  • java代码安全性

    2015-10-27 22:58:13
    下面有关Java代码安全性的叙述,( )是对的。 Ⅰ:字节码校验器加载查询执行需要的所有类。 Ⅱ:运行时解释器执行代码。 Ⅲ:在运行时,字节码被加载,验证后在解释器里面运行。 Ⅳ:类加载器通过分离本机文件系统的...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

下面有关java类加载器

java 订阅