ClassLoader类加载解惑
1、通过类加载器获取路径:
String path = Thread.currentThread().getContextClassLoader().getResource(".").getPath();
System.out.println(path);
String string = Sample1.class.getClassLoader().getResource(".").getPath();
System.out.println(string);
String string2 = Sample1.class.getResource(".").getPath();
System.out.println(string2);
测试结果:
/D:/workspaces/workspace7/demo1/target/classes/
/D:/workspaces/workspace7/demo1/target/classes/
/D:/workspaces/workspace7/demo1/target/classes/com/alibaba/
说明:
Classloader读取文件(即方式1和方法2)都是从classpath开始查找文件; 方式3从当前类所在的目录下开始查找文件
不同的工程中,实验如下:
public class Sample2 {
public static void main(String[] args) {
Sample1 sample1 = new Sample1();
sample1.print();
}
}
执行结果:
/D:/workspaces/workspace7/demo2/target/classes/
/D:/workspaces/workspace7/demo2/target/classes/
/D:/workspaces/workspace7/demo1/target/classes/com/alibaba/
说明:Classloader获取的内容始终从调用方出发,即当前调用的加载器; 而一般类的资源获取是从类自身的位置触发
当获取当前类路径下的文件使用:
InputStream f=TestDemo.class.getResourceAsStream("book.xml");//book.xml与TestDemo.class同意路径下
而加载classpath下的文件book.xml使用以下方式
InputStream f=TestDemo.class.getClassLoader().getResourceAsStream("book.xml");//book.xml与TestDemo.class同意路径下
注意:通过以下获取资源获取的都是相对路径下文件
InputStream in = new FileInputStream("abc.properties"); // 相对路径,项目下的路径 与ClassLoader加载有什么区别吗
OutputStream out = new FileOutputStream("abc.properties");
通过加载器进行加载类路径创建对象
String loaderClassName="com.mysoft.test.classloader.ClassLoaderTest";
Class<?> loaderClass = null;
loaderClass = ClassLoaderTest.class.getClassLoader().loadClass(loaderClassName);
ClassLoaderTest s=(ClassLoaderTest)loaderClass.newInstance();
System.out.println(s.getName());
Class<?> loaderClass2 = null;
ClassLoader cl=Thread.currentThread().getContextClassLoader();//获取当前线程的加载器,安全起见采用该方式
loaderClass2=cl.loadClass(loaderClassName);
ClassLoaderTest s2=(ClassLoaderTest)loaderClass2.newInstance();
System.out.println(s2.getName());
ClassLoader类加载解惑的更多相关文章
- ClassLoader类加载机制&&JVM内存管理
一.ClassLoader类加载机制 在java中类加载是遵循委派双亲加载的:通过调用loadClass方法逐级往上传递委派加载请求,当找不到父ClassLoader时调用其findClass方法尝试 ...
- Java运行时环境---ClassLoader类加载机制
背景:听说ClassLoader类加载机制是进入BAT的必经之路. ClassLoader总述: 普通的Java开发其实用到ClassLoader的地方并不多,但是理解透彻ClassLoader类的加 ...
- ClassLoader类加载器 & Java类加载机制 & 破坏双亲委托机制
ClassLoader类加载器 Java 中的类加载器大致可以分成两类: 一类是系统提供的: 引导类加载器(Bootstrap classloader):它用来加载 Java 的核心库(如rt.jar ...
- 进阶Java编程(11)ClassLoader类加载器【待完成】
1,ClassLoader类加载器简介 在Java里面提供一个系统的环境变量:ClassPath,这个属性的作用主要是在JVM进程启动的时候进行类加载路径的定义,在JVM里面可以根据类加载器而后进行指 ...
- 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..
1.类加载过程 类加载时机 「加载」 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据 ...
- Java安全之 ClassLoader类加载器
Java安全之 ClassLoader类加载器 0x00 前言 前面这里抛出一个问题,Java到底是什么类型的编程语言?是编译型?还是解释型?在这个问题是其实一直都都有疑惑,如果说是解释型语言的话,那 ...
- ClassLoader类加载机制
一.类加载器 类加载器(ClassLoader),顾名思义,即加载类的东西.在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘.网络或其他来源加载到内存中,并对字节码进行解 ...
- ClassLoader类加载器
总的来说,当动态加载一个资源时,至少有三种类加载器可供选择: 系统类加载器(也被称为应用类加载器)(system classloader) 当前类加载器(current classloader) 当前 ...
- Java URLClassLoader 和 ClassLoader类加载器
开始:看名字都带有ClassLoader,叫做类加载器,事实上是可以理解为动态的加载类,不过,也不是只能加载类,也可以加载其他形式的文件,比如说.properties属性文件. 区别:其实在两个类加载 ...
随机推荐
- Spring Security(15)——权限鉴定结构
目录 1.1 权限 1.2 调用前的处理 1.2.1 AccessDecisionManager 1.2.2 基于投票的AccessDecisionManager实 ...
- SAP HANA创建层次结构的属性视图(Hierarchy Attribute View)
在产品表中,数据是具有一定层次结构的 1. 在Content相应的package下面右键点击Attribute View,新建Attribute View 填写相关信息,注意:我们所建的依然是标准视图 ...
- C#与C++中struct和class的小结
在C#中,struct其实也是可以像class一样封装方法和数据的.请参考如下代码. using System; namespace testDiffInStructClass { public st ...
- MinGW32 +QT4.8.6+QT Creator+CMAKE的安装
参考网址: http://www.360doc.com/content/15/0813/09/7256015_491331699.shtml http://m.fx114.net/qa-196-213 ...
- 好用的meta标签
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 保证中文在网 ...
- Date对象 识记
1.Date 对象创建 var myDate=new Date() 2.Date 对象属性 constructor pototype 3.Date 对象方法 Date() ...
- Android 6.0动态添加权限
Android 6.0加入了动态权限,权限有普通权限和危险权限两种,其中危险权限在6.0以上的手机是需要动态添加权限的,举例:拨打10086//-----------------布局文件------- ...
- openstack私有云布署实践【12.1 网络Neutron-controller节点配置(科兴环境)】
网络这一块推荐使用的是 Neutron--LinuxBirdge的Ha高可用,此高可用方案对Public作用不是很大,Public只用到DHCP,而Private则会用到L3 Agent,则此方案是有 ...
- 设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))
什么是链?前后相连,一个连接下一个,其中包括多个节点,其实责任链模式也类似,他是多个对象之间相互关联,下一个对象的操作由上一个对象关联下来,上一个对象有个方法用于指向其他对象.职责链之间的前后关系是可 ...
- Generating Faces with Deconvolution Networks
用深度学习做人脸合成,website:https://zo7.github.io/blog/2016/09/25/generating-faces.html 受启发于 Learning to Gene ...