黑马程序员技术交流社区

标题: 类加载器 [打印本页]

作者: 一直很安静    时间: 2013-11-14 14:10
标题: 类加载器
本帖最后由 一直很安静 于 2013-11-15 11:24 编辑

张老师说类能够被appclassloader 加载是因为配置了claapath 路径,可是使用eclipse 时并没有配置路径为什么也能被appclassloader 加载
作者: Weix1992    时间: 2013-11-14 14:16
只要有JRE就能启动Eclipse。
可能系统中有另一套JRE,搜索下path中的目录有没有javaw.exe或者java.exe。
另外,如果没有安装JDK的话,ecplise会使用一套自带的java编译器
其实JDK对于ecplise真正有用处的就是它的JRE和编译器。
作者: linjl_ll    时间: 2013-11-14 14:17
eclipse中可以配置已经安装的jdk,也可以配置成eclipse自带jdk,如果是已经安装的jdk那么就是用配置的classpath,如果使用自带的jdk那么eclipse当然是知道classpath的路径的。
作者: 文涛    时间: 2013-11-14 14:21
你安装了eclijpse,他在安装的时候已经为你配置好了classpatch了,一般都在eclipse的目录下,eclipse的目录下还有一套jre,你可以看看在安装目录下的Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013这里有另外的一套jdk,这是eclipse在安装时自动帮你装的。,他也自动帮你配置了classpatch,一般配置在你设置的工作目录中,你可以根据你配置的包名,一步步的进入文件夹,找到class文件
作者: 不抛弃不放弃    时间: 2013-11-14 14:25
Eclipse 类装入器原理

在典型的 Java 应用程序中,我们要加载一个类或资源时,通常可以使用三种类装入器:
当前类的类装入器;
当前线程的 Context 类装入器;
系统类装入器;

在实际的应用开发中比较常用到前两个类装入器是,下边重点介绍在 Eclipse 插件运行环境中前两种类装入器的结构和原理以及和典型的 Java 应用的不同之处。

当前插件类的类装入器

下图是 Eclipse 插件在运行时当前插件类的类装入器的体系结构图。

图 2 Eclipse 插件类装入器的结构


其中 EclipseClassloader 类装入器实现了 OSGi 规范的 BundleClassLoader,它用来装载 Bundle (也就是插件)中的类 OSGi ParentClassloader 类装入器是 Eclipse 插件类装入器的父类装入器,可以通过在启动 Eclipse 时设置系统属性 osgi.parentClassloader 来改变它,这个改变类会影响所有的 Eclipse 插件。如果在启动时没有设置系统属性 osgi.parentClassloader, Eclipse 使用一个默认的空的类装入器。

BundleLoader 是 EclipseClassloader 类装入器的代理,它是用来加载插件相关的资源的。

Eclipse 插件类装入器加载类或资源的过程如下:
1.首先试图从父类装入器加载类,其过程是先从 OSGi ParentClassloader 类装入器加载类,OSGi ParentClassloader 类装入器使用传统的 Java 装入器的委托模式依次从父类装入器加载类。
2.如果无法从 OSGi ParentClassloader 类装入器加载类,则试图通过代理 BundleLoader 来加载类。
3.BundleLoader 首先试图从此插件的需求依赖插件("require"指定的插件)中去加载需要的类,如果找不到,则通过 EclipseClassloader 类装入器来从插件本地加载需要的类。
4.如果还是找不到要加载的类,就会抛出类找不到异常。

当前线程的 Context 类装入器

在 Eclipse 中并没有设置 Context 类装入器,所以默认情况下当前线程的 Context 类装入器为系统的类装入器,其体系结构如 图 3 所示。

图 3 Eclipse 插件当前线程 Context 类装入器的结构

在 Eclipse 中,每个插件都有自己的类装入器,每个线程有自己的类装入器。插件和线程之间没有统一的映射关系,所以 Eclipse 框架没有将线程的 Context 类装入器设置成有意义类装入器。
不知道这是不是你想要的

作者: 一直很安静    时间: 2013-11-15 11:23
文涛 发表于 2013-11-14 14:21
你安装了eclijpse,他在安装的时候已经为你配置好了classpatch了,一般都在eclipse的目录下,eclipse的目录 ...

明白啦 谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2