关于getClass().getClassLoader()转载
原创InputStream is = getClass().getClassLoader().getResourceAsStream("helloworld.properties");
getClass() :获取当前对象所属的对象。Class对象
getClassLoader() :取得该Class对象的类加载器。
类加载器负责从Java字符文件将字符流读入内存并构建它。Class类对象,因此它可以获取文件输入流。
装入类的过程非常简单:找到类的位置并找到Java将类的字节代码加载到内存中以生成相应的Class对象。
Java类加载器被专门设计来实现这样的过程, JVM有多个类加载器 事实上,如果你愿意,你可以让JVM除了测试之外,还有无数的类加载器。JVM另外,我想不出还有什么其他的用处。
Class.getClassLoader()一个小陷阱:
Integer.class.getClassLoader().getResource("*********");
引发空指针异常,并定位到getClassLoader()返回null
-
类加载器本身是也需要加载到存储器中的类,* 那么,谁将加载这些类加载器呢?
它是Bootstrap ClassLoader. 你为什么这么说,因为你不能Java在代码中捕捉它的一小部分尾巴,尽管您可以一直感觉到它,因为 java它加载操作环境所需的所有类库, 而它本身就是C++编写一个可以独立运行的程序。, 可以说是JVM行动的起点 。
在Bootstrap在完成任务后,一个AppClassLoader(事实上,该系统以前使用了扩展的类加载器。ExtClassLoader,用于加载Java运行环境扩展包中的类),这个类加载器是我们经常使用和可以调用的。ClassLoader.getSystemClassLoader() 为了获得,我们假设程序没有使用类加载器相关的操作设置或自定义新的类加载器,然后我们编写所有。java它会加载所有的类,这是值得尊重的。AppClassLoader发现这个班级的地方是很熟悉的。Classpath,也是初学者必须跨过的门槛,没有丝毫的感觉,我们根据它的类搜索范围把它命名为类路径类加载器。或者之前假设的情况,当。Java出现了新的类,AppClassLoader首先将类传递给它的父类加载器。Extion ClassLoader,询问它是否可以加载类,如果可以,则。AppClassLoader别做这份工作,一样的Extion ClassLoader加载时,您还将首先询问其父类加载器。我们可以看到,类加载器实际上是一个树结构图。每个类加载器都有自己的父亲。当加载一个类时,类加载器总是让它自己的父类加载器首先加载。(长辈们多么恭敬啊),如果父类加载器不能加载类,它将自己加载它。如果它不能加载,那么我很抱歉,它会喊:Exception,class not found。值得一提的是,当一个类无法使用类路径加载器直接加载一个类时,就会抛出异常。NoClassDefFoundException例外。如果您使用自定义类加载器loadClass方法或者ClassLoader的findSystemClass方法装入类,如果你不刻意改变,那么抛出就是。ClassNotFoundException。
这里jdk告诉我们:如果一门课通过了。bootstrap 然后我们通过这个类来获取。classloader一些词,一些jdkIS的实现返回一个null例如,我使用 new Object().getClass().getClassLoader()将返回一个null这样,上面的代码就会出现NullPointer例外。因此,出于保险原因,最好使用它。\ 编写您自己的类来获取。classloader(”this.getClass().getClassLoader()),这样就不会有问题了。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123


