Thread.currentThread().getContextClassLoader() and Class.getClassLoader()

 

一、同一工程中:

  1. String path = Thread.currentThread().getContextClassLoader().getResource(".").getPath();
  2. System.out.println(path);
  3. String string = Sample1.class.getClassLoader().getResource(".").getPath();
  4. System.out.println(string);
  5. String string2 = Sample1.class.getResource(".").getPath();
  6. System.out.println(string2);

测试结果:

  1. /D:/workspaces/workspace7/demo1/target/classes/
  2. /D:/workspaces/workspace7/demo1/target/classes/
  3. /D:/workspaces/workspace7/demo1/target/classes/com/alibaba/

说明:

Classloader读取文件(即方式1和方法2)都是从classpath开始查找文件; 方式3从当前类所在的目录下开始查找文件

二、不同的工程中,实验如下:

  1. public class Sample2 {
  2. public static void main(String[] args) {
  3. Sample1 sample1 = new Sample1();
  4. sample1.print();
  5. }
  6. }

执行结果:

  1. /D:/workspaces/workspace7/demo2/target/classes/ 
  2. /D:/workspaces/workspace7/demo2/target/classes/ 
  3. /D:/workspaces/workspace7/demo1/target/classes/com/alibaba/ 

说明:Classloader获取的内容始终从调用方出发; 而一般类的资源获取是从类自身的位置触发

Thread.currentThread().getContextClassLoader() and Class.getClassLoader()的更多相关文章

  1. java 笔记 Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别

    查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行.首先是执行Tomcat org.apache.catalina.startup ...

  2. Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别

    查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行.首先是执行Tomcat org.apache.catalina.startup ...

  3. Class.forName() 初始化、Thread.currentThread().getContextClassLoader().getResourceAsStream

    Class.forName() 和 ClassLoader.loadClass()的区别? Class.forName() 和 Class.forName().NewInstance()的区别? Cl ...

  4. Thread.currentThread().getContextClassLoader().getResourceAsStream

    Thread.currentThread().getContextClassLoader().getResourceAsStream 2014年04月02日 06:49:47 OkidoGreen 阅 ...

  5. String.valueOf(Thread.currentThread().getContextClassLoader().getResource("")) 获取项目的绝对路径(shiro项目中来的八)

    一,上代码 String.valueOf(Thread.currentThread().getContextClassLoader().getResource("")) file: ...

  6. Thread.currentThread().getContextClassLoader().loadClass(className)和Class.forName(className)的区别

    一.正文: 有去看开源框架的童鞋,应该会经常看到如下代码:Thread.currentThread().getContextClassLoader().loadClass(className),那这个 ...

  7. ClassLoader,Thread.currentThread().setContextClassLoader,tomcat的ClassLoader

    实际上,在Java应用中所有程序都运行在线程里,如果在程序中没有手工设置过ClassLoader,对于一般的java类如下两种方法获得的ClassLoader通常都是同一个 this.getClass ...

  8. Thread.currentThread().setContextClassLoader为什么不生效与java.lang.NoClassDefFoundError之Java类加载的Parent first Classloader

    众所周知,Java的类加载机制采用了双亲委派模型,导致在进行类加载的时候会有多个加载器,这种复杂的机制,有时候会导致‘Exception in thread main java.lang.NoClas ...

  9. Java多线程之this与Thread.currentThread()的区别——java多线程编程核心技术

      package mythread; public class CountOperate extends Thread{ public CountOperate(){ System.out.prin ...

随机推荐

  1. linux之ftp命令详解

    我们在使用ftp客户端访问到ftp服务器之后,往往需要进行相关操作,比如从远程机器上下载文件,或者将文件传输到远程机器上.需要使用ftp的相关命令,本文讲述了ftp常用的一些操作. 方法/步骤     ...

  2. iWatch开发:UI 组件说明

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hlbmppZTEyMzQ1Njc4/font/5a6L5L2T/fontsize/400/fill/I0 ...

  3. GetTickCount()函数的陷阱!

    开发中经经常使用GetTickCount()函数来进行间隔时间的推断.如推断某一段代码运行花了多少时间等,使用比較方便. 可是仅仅针对寻常的一些測试.近期开发一个服务程序时,也在代码中用GetTick ...

  4. memcache原理和实际应用

    Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的.眼下全世界不少人使用这个缓存项目来构建自己大负载的站点,来分担数据库的压力. 它能够应 ...

  5. Python之布尔运算符

    python中的布尔运算符有三种,or,and,not. 布尔运算,根据升序优先进行排序.运算 | 结果 | 提示=============================x or y | x假时,执 ...

  6. lua学习笔记(十)

      模块与包  使用require加载模块     一个规范的模块应该返回一个table作为这个模块所有导出功能的集合     lua里没通过任何强制性语法规则要求创建模块时反回一个table     ...

  7. linux中的热插拔和mdev机制

    mdev手册(自己翻译的留着看) mdev实现U盘或SD卡的自动挂载 mdev的使用以及mdev.conf的规则配置--busybox linux中的热插拔和mdev机制 关于实现udev/mdev自 ...

  8. Visual Studio的 Apache Cordova 插件CTP3.0发布!

    北京时间12号晚23点开始的Connect()活动上,微软发布了一系列激动人心的消息! .NET开源了!以后.NET将可在Linux和Mac OS平台上运行! VS免费了!!如果你是学生,个人开发者, ...

  9. 域名解析-CNAME

    不要把域名解析简单看成把一个域名指向一个IP那么简单的事. 事实上域名解析能做的事非常多. 简单样例,假如你买了一台server仅仅有一个IP,你想弄两站点,而且仅仅想直接通过IP就能訪问,就是不加什 ...

  10. 【Mac系统】之Mysql数据库遇到修改数字密码的问题(SQL语法错误:ERROR 1064 (42000),密码策略等问题:ERROR 1819 (HY000))

    安装完Mysql也进行了第一次初始化密码以及修改密码规则(请参考文章),但是我想后续再改密码,出现了下面几个问题: #SQL语句错误问题 ERROR 1064 (42000): You have an ...