文档章节

Java中不同类装载器的区别

一介码夫_Hum
 一介码夫_Hum
发布于 2015/04/27 10:35
字数 281
阅读 18
收藏 0
/*
 * 一个WEB程序,发布到Tomcat里面运行。
 * 首先是执行Tomcat org.apache.catalina.startup.Bootstrap类,这时候的类加载器ClassLoader.getSystemClassLoader()。
 * 而
 * 我们后面的WEB程序,里面的jar、resources都是由Tomcat内部来加载的,所以你在代码中动态加载jar、资源文件的时候,首先应该是使
 * 用Thread.currentThread().getContextClassLoader()。如果你使用
 * Test.class.getClassLoader(),可能会导致和当前线程所运行的类加载器不一致(因为Java天生的多线程)。
 * Test.class.getClassLoader()一般用在getResource,因为你想要获取某个资源文件的时候,这个资源文件的位置是相对固定的。
 * 
 * 查看一下openfire或者tomcat内部的源码,对ClassLoader会有比较深的理解。
 * 在openfire里面,openfire使用的类加载器,以及每个插件使用的类加载器都不一样。
 */   

public static void main(String[] args) {
         
        // 此时三个ClassLoader是同一个对象
        System.out.println(Thread.currentThread().getContextClassLoader()); // 当前线程的类加载器
        System.out.println(Test.class.getClassLoader()); // 当前类的类加载器
        System.out.println(ClassLoader.getSystemClassLoader()); // 系统初始的类加载器
         
    }


/* 请参考:http://stackoverflow.com/questions/676250/different-ways-of-loading-a-file-as-an-inputstream*/


 




© 著作权归作者所有

一介码夫_Hum
粉丝 25
博文 122
码字总数 30761
作品 0
海淀
其他
私信 提问
从java的类装载器看安全

jave是安全的,这体现在多个方面,其中之一就是java类的加载,而且java类的加载安全机制体现出来的是一种原则,就是保持信息的单向流动而不是 杂糅的双向依赖总是一件好事,因为首先这样做会...

晨曦之光
2012/04/10
114
1
Java类装载体系中的隔离性

正 文 Java中类的查找与装载出现的问题总是会时不时出现在Java程序员面前,这并不是什么丢脸的事情,相信没有一个 Java程序员没遇到过ClassNotException,因此不要为被人瞅见自己也犯这样的错...

crazyinsomnia
2010/01/31
1K
0
Class.forName 介绍

Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。 至于什么时候用,你可以考虑一下这...

Idiot_s_Sky
2014/02/05
37
0
Java类加载器ClassLoader

JAVA类装载方式,有两种: 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。 2.显式装载, 通过class.forname()等方法,显式加载需要的...

兴国First
2018/10/14
0
0
Java的classloader

类加载器的基本概念 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被...

huzorro
2012/12/18
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

将key=value转成对象形式

var params = {};testParan.split(',').forEach(item =>{ var tmpArr = item.split('='); Vue.set(params, tmpArr[0].trim(), tmpArr[1].trim());});Vue.set(params, 'sql', sql);......

沉迷代码我爱学习
28分钟前
4
0
什么是分立器件

  分立器件被广泛应用到消费电子、计算机及外设、网络通信,汽车电子、led显示屏等领域。   半导体产业中有两大分支:集成电路和分立器件。   集成电路   集成电路(integrated circ...

仙溪
38分钟前
5
0
kibana rpm安装

https://www.elastic.co/guide/en/kibana/6.2/rpm.html 下载对应的版本wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-x86_64.rpm 安装 rpm -ivh kibana-6.2.4-x86_64......

看的最远的地方
41分钟前
3
0
高防CDN相比较于高防服务器,为何更加稳定?

对于DDoS攻击,那些已经做过网站、平台的人应该知道,DDoS攻击是非常可怕的,因为这种攻击本质上不能防御,或者DDoS攻击只能被减轻,不能完全消除。DDoS,意思是“分布式拒绝服务”。它是一种...

云漫网络Ruan
42分钟前
4
0
线程SuspendThread() ResumeThread()的使用

SuspendThread():挂起线程 If the function succeeds, the return value is the thread's previous suspend count; otherwise, it is (DWORD) -1. ResumeThread():启动线程 If the functio......

rainbowcode
42分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部