java中三个类别加载器的关系以及各自加载的类的范围

Java在需要使用类别的时候,才会将类别加载,Java的类别载入是由类别载入器(Class loader)来达到的,预设上,在程序启动之后,主要会有三个类别加载器:Bootstrap Loader、ExtClassLoader与AppClassLoader。

Bootstrap Loader是由C++撰写而成,预设上它负责搜寻JRE所在目录的classes或lib目录下的.jar档案中(例如rt.jar)是否有指定的类别并加载(实际上是由系统参数sun.boot.class.path指定);预设上ExtClassLoader负责搜寻JRE所在目录的lib/ext 目录下的classes或.jar中是否有指定的类别并加载(实际上是由系统参数java.ext.dirs指定);AppClassLoader则搜寻 Classpath中是否有指定的classes并加载(由系统参数java.class.path指定)。

Bootstrap Loader会在JVM启动之后载入,之后它会载入ExtClassLoader并将ExtClassLoader的parent设为Bootstrap Loader,然后BootstrapLoader再加载AppClassLoader,并将AppClassLoader的parent设定为 ExtClassLoader。

在加载类别时,每个类别加载器会先将加载类别的任务交由其parent,如果parent找不到,才由自己负责加载,如果自己也找不到,就会丢出 NoClassDefFoundError。

每一个类别被载入后,都会有一个Class的实例来代表它,每个Class的实例都会记得是哪个ClassLoader加载它的,可以由Class的getClassLoader()取得加载该类别的ClassLoader。

时间: 2024-09-29 20:00:48

java中三个类别加载器的关系以及各自加载的类的范围的相关文章

Java中三种变量

Java三大变量分别是类变量(静态变量).实例变量和局部变量(本地变量). 局部变量就是本地变量,在方法.构造器或者块中使用,在方法.构造器或者块进入时被创建,一旦退出该变量就会被销毁 局部变量没有默认值,因此本地变量必须被声明并且在第一次使用前要给它赋值 实例变量:在类中声明,但是它在方法.构造器或者块外,当堆中的对象被分配了一个空间时,每个实例变量的位置就被创建了. 当对象采用关键字"new"创建时实例变量就被创建了,当对象被销毁时它也就被销毁了. 实例变量的值必须被一个以上的方法

java中过滤器、监听器、拦截器的区别

1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话).filter 流程是线性的, url传来之后,检查之后,可保持原来的流程

JAVA中三种URL连接方法

Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们通过使用Java的URL类就可以经由URL完成读取和修改数据的操作.现在,我们来看一看,如何才能发挥出URL类的效力. 通过URL进行工作 通过一个URL连接,我们就可以确定资源的位置,比如网络文件.网络页面以及网络应用程序等.其中包含了许多的语法元素.举个例子来说,请看下面这个URL连接: http

java中三种方式获得类的字节码文件对象

package get_class_method; public class ReflectDemo { /** * @param args */ public static void main(String[] args) { getClassObject1(); getClassObject2(); getClassObject3(); } public static void getClassObject1(){ Person p = new Person(); System.out.pr

【计算机网络】关于三种网络通信模式以及java中三种通信方式的实现介绍

当前的网络中有三种通讯模式:单播.广播.组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景. 一.单播: 主机之间"一对一"的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制.如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作.但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议.网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地. 单播的优点: 1.  服务器及时

Java中三种代理模式

代理模式 代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能. 这就符合了设计模式的开闭原则,即在对既有代码不改动的情况下进行功能的扩展. 举个例子来说明代理的作用:明星与经纪人之间就是被代理和代理的关系,明星出演活动的时候,明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人) 来解决.这就是代理思想在现实中的一个例子. 静态代理

Java中HBase的集中過濾器

比較過濾器:    rowKey过滤器 RowFilter    列族过滤器 FamilyFilter    列过滤器               QualifierFilter    列值过滤器            ValueFilter    專用過濾器:    单列值过滤器            SingleColumnValueFilter    列值排除过滤器        SingleColumnValueExcludeFilter    rowkey前缀过滤器    Prefix

Java中基于HotSpot虚拟机的垃圾收集器

名称 过程 优缺点                              

java中三种循环的区别

while(条件){循环体}先判断条件,满足就执行循环体,不满足则退出:do{循环体}while(条件)先执行一次循环体,再判断条件,如果条件满足,继续执行,不满足,退出循环,最少执行一次:for(<初始化>; <条件>; <增量>){循环体}首先会初始化变量,然后判断条件,满足条件执行循环体,然后执行增量,一般是i++.i--等,再次判断条件,满足继续执行循环体,再判断条件.初始化只有进入循环的第一次执行 .