当前位置: 首页 > 面试题库 >

库存JDK类和“空” ClassLoader?

越雨泽
2023-03-14
问题内容

大家好:我试图通过查看ClassLoaders中一些动态创建的组件来调试一个非常奇怪的类错误。 ClassLoaders是我从来没有玩过的东西-
我很惊讶标准JDK类具有 空的 Class loader实例

有人可以根据我尝试打印其装入程序的类来解释这种简单的main方法的输出,并且更笼统地说-

  1. ClassLoader在JVM上的工作方式和
  2. 我们如何使用ClassLoaders 调试缺少的类。

    public class MyClass {

    /**
     * @param args
     */
    public static void main(String[] args) {
    
        System.out.println(relfect.MyClass.class.getClassLoader());
        System.out.println(String.class.getClassLoader());
        System.out.println(ArrayList.class.getClassLoader());
        System.out.println(JButton.class.getClassLoader());
        System.out.println(System.class.getClassLoader());
    
        Boolean b = new Boolean(true);
        System.out.println(b.getClass().getClassLoader());
    
    }
    

    }

输出量

sun.misc.Launcher$AppClassLoader@1f7182c1
null
null
null
null
null

问题答案:

的javadoc getClassLoader()

返回该类的类加载器。一些实现可能使用null来表示引导类加载器。如果此类是由bootstrap类加载器加载的,则此方法在此类实现中将返回null。

因此,这至少可以解释您为何获得该结果。但这并不能解释为什么实施者决定采用这种方式。

编辑:在将我自己的类添加到bootclasspath中进行测试之后,它们也将显示为空类加载器。



 类似资料:
  • 我在Eclipse中设置了三个项目, 1)aspects_project-该项目包含一个方面测试方面,我想编织到某些JDK类和类application_project 2) application\u project-此项目在其Aspect路径上有aspects\u项目。 3)jdk_project-该项目在其Aspect Path上aspects_project,在其InPath上classes

  • 我读过一些关于在存储库请求中使用空值的帖子,但它们都已经存在多年了。所以我问这个问题是为了了解问题的现状。 我想说的是: 我想要一个带有可选空值的JPA请求。我的存储库中的函数如下所示: 这样我就可以像这样省略过滤器中的参数:(@Query的一部分) 这只在我的参数不为NULL时有效。 请注意,我在这里使用的是原生查询。(JPA实现是Hibernate,DB是postgres) 提前感谢您的每一次

  • 但是我想知道,如果我使用这些代码从XSD生成类,但是在运行时只使用JDK8(包含版本2.2.8)会发生什么情况:会不会有出现运行时错误的风险? 那么,是否有必要或建议始终使用与我从XSD生成类所使用的jaxb-xjc版本相对应的jaxb-runtime? 当然,我可以简单地覆盖对jaxb-xjc等的依赖,并显式地使用版本2.2.8。但即使这样,我也想知道我是否会得到与直接使用JDK8 xjc工具相

  • 数据库缓存类允许你把数据库查询结果保存在文本文件中以减少数据库访问。 重要 当缓存启用时,本类会被数据库驱动自动加载,切勿手动加载。 重要 并非所有查询结果都能被缓存,请仔细阅读本页内容。 启用缓存 启用缓存需要三步: 在服务器上创建一个可写的目录以便保存缓存文件; 通过文件 application/config/database.php 中的 cachedir 参数设置其目录路径; 通过将文件

  • 问题内容: 据我所知,从JDK 8开始,PermGen将成为Java历史的过去。一切都很好,很快乐……但是新的内存布局会是什么样?这会影响新平台上的GC吗? 问题答案: 在Oracle / Sun JDK8中,PermGen被Metaspace取代,这非常相似。主要区别在于Metaspace可以在运行时扩展。