首页 > 试题广场 >

下面有关java classloader说法正确的是()?

[不定项选择题]
下面有关java classloader说法正确的是()?
  • ClassLoader就是用来动态加载class文件到内存当中用的
  • JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
  • ClassLoader使用的是双亲委托模型来搜索类的
  • Java默认提供的三个ClassLoader是Boostrap ClassLoader,Extension ClassLoader,App ClassLoader
  • 以上都不正确
JDK中提供了三个ClassLoader,根据层级从高到低为:
  1. Bootstrap ClassLoader,主要加载JVM自身工作需要的类。
  2. Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。
  3. Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。(这里的Classpath默认指的是环境变量中配置的Classpath,但是可以在执行Java命令的时候使用-cp 参数来修改当前程序使用的Classpath)

JVM加载类的实现方式,我们称为 双亲委托模型

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

双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。

假设有一个开发者自己编写了一个名为Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object类,并载入它

发表于 2017-08-24 09:42:02 回复(25)
JDK中提供了三个ClassLoader,根据层级从高到低为: Bootstrap ClassLoader,主要加载JVM自身工作需要的类。 Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。 Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。(这里的Classpath默认指的是环境变量中配置的Classpath,但是可以在执行Java命令的时候使用-cp 参数来修改当前程序使用的Classpath) JVM加载类的实现方式,我们称为 双亲委托模型: 如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。 双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。 假设有一个开发者自己编写了一个名为Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object类,并载入它
发表于 2017-11-18 21:03:58 回复(0)
不是搜索
发表于 2017-08-18 16:44:55 回复(0)

JVM根据两个方面判断两个类是否相同:一是类的全称;另一个是类加载器.

即使类的全称相同,而使用的加载器不同那Class对象也是不同的.
选项B:错误
编辑于 2017-08-25 11:33:18 回复(2)
系统提供的类加载器不是
1.bootstrap class loader 
2.extensions class loader
3.system class loader的吗
发表于 2017-09-26 20:09:12 回复(4)
三大类加载器,启动类加载器,扩展类加载器,应用程序类加载器,应用程序类加载器又叫系统类加载器。
发表于 2018-06-03 15:07:47 回复(0)
ClassLoader就是用来动态加载class文件到内存当中用的;
ClassLoader使用的是 双亲委托模型来搜索类的;
Java默认提供的三个ClassLoader是Boostrap ClassLoader,Extension ClassLoader,App ClassLoader。
发表于 2021-04-09 18:43:33 回复(1)
被动态两个字迷惑了
发表于 2021-11-05 20:37:29 回复(0)
JDK中提供了三个ClassLoader,根据层级从高到低为: Bootstrap ClassLoader,主要加载JVM自身工作需要的类。 Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。 Application ClassLoader,主要加载Classpath指定的库类,一般情况下这是程序中的默认类加载器,也是ClassLoader.getSystemClassLoader() 的返回值。(这里的Classpath默认指的是环境变量中配置的Classpath,但是可以在执行Java命令的时候使用-cp 参数来修改当前程序使用的Classpath) JVM加载类的实现方式,我们称为 双亲委托模型: 如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。 双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。 假设有一个开发者自己编写了一个名为Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object类,并载入它
发表于 2021-11-05 19:07:37 回复(0)
AppClassLoader和Application ClassLoader一样吗?
发表于 2020-02-03 14:29:12 回复(0)
C选项中应该是用来加载类的吧 👀
发表于 2018-04-10 14:57:20 回复(3)
为什么c选项是搜索类?不应该是类加载?

发表于 2018-01-15 13:38:12 回复(0)
如果
JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
这句话是对的,那么不同版本的同名类,就没办法实现了。这也是java运行用户自定义类加载的一个好处。不同厂商类也可以相同名称
发表于 2018-01-01 21:23:26 回复(0)
***题目改严谨的时候不严谨,classloader特么有两个方法loadClass和findClass,一个是双亲委派,一个是直接加载。
发表于 2021-03-07 10:29:32 回复(0)
APP和application是一回事吗?题目严谨一点好吧,我没选D,我觉得D不行
发表于 2020-04-09 10:25:38 回复(2)
那D为什么是对的??
发表于 2024-08-14 15:10:53 回复(0)
这个E选项可太有意思了
发表于 2024-06-12 09:15:59 回复(0)
标记此题,还没学到
发表于 2023-10-23 14:28:14 回复(0)
..
发表于 2023-06-29 03:42:12 回复(0)
Bootstrap ClassLoader,主要加载JVM自身工作需要的类。 Extension ClassLoader,主要加载%JAVA_HOME%\lib\ext目录下的库类。 Application ClassLoader,主要加载Classpath指定的库类
发表于 2023-05-09 23:04:28 回复(0)