我在Internet上看到的Java和Java类加载的区别是:
在Java中,类加载器将类加载委托给其父类加载器,然后尝试加载类本身。 但是,在Java中,类加载器首先尝试加载类本身,然后将该类的类加载委托给其父类加载器。
善意地验证了我的理解.
另外,为什么它在Java中是这样设计的(保持这样做有什么好处)。
这就是我听到这个http://www.youtube.com/watch?v=t8sQw3pGJzM的链接
发布于 2013-08-13 13:39:29
好吧那好,
一个通用应用程序有3个标准的类加载器:
到现在为止还好。现在,这适用于单独运行和免费运行的单个应用程序。
但是当你说J2EE时会发生什么呢?您有多个应用程序运行在同一个地方,所以您必须想出一种方法来防止它们之间的绊脚石。这就是这些额外的课堂装载机发挥作用的地方。
考虑一下服务器实例。有一个带有两个部署耳朵的JBoss。如果应用程序之间存在冲突的类,会发生什么情况?他们在自己的特定环境下很好,但总的来说,他们是不一致的。
这些额外的类加载器是以一种应用程序的方式引入的,以确保它们之间的隔离。系统下面的Classloaders --Classpath Classloader只有在一个子类的清单文件中指定了类时才能识别它。
在J2SE中,三个基本的类加载器基于以下三个原则在父子关系中工作:
Integer、ArrayList等)。这就是您在问题中所引用的内容:类加载器将加载委托到层次结构的顶部,然后每个类加载器尝试加载它的父类,直到有人加载它。否则: ClassNotFound.在Java中,类加载器将类加载委托给其父类加载器,然后尝试加载类本身。
是的,由于上面所解释的原则。
在J2EE中没有确定的类加载器结构(供应商拥有实现它的“诗意许可”),但它们有点遵循层次结构。在本例中,System类加载器加载主要应用程序:服务器。因此,由于可见性原则,每个应用程序都可以使用服务器库(更具体地说,是它的类)。
在那里,应用程序有特定的类加载器结构,但是作为一个整体,它们是系统的不同的子类--类路径类加载器。每个应用程序加载其相关的和特定的类(应用程序和库)。
此处的加载不会传播到应用程序上下文之外的父级。为什么?因为如果系统类路径类加载器像往常一样加载应用程序,由于可见性原则,每个应用程序的类对其他人都是可见的,完全打破了它们之间的隔离。所以:
但是,在Java中,类加载器首先尝试加载类本身,然后将该类的类加载委托给其父类加载器。
这在一定程度上是正确的,但我宁愿将这种断言限制在应用程序的上下文中,而不包括由顶级类加载器加载的Java相关类。
长话短说:这不是一个简单的过程,但我不会说J2EE以与J2SE相反的方式处理类加载。
发布于 2013-08-13 13:30:36
我想Java EE class loading standard会在你路上帮你的。据我所知,标准Java没有强制的类加载方式。然而,对于WebApps (WAR),则指定类加载是父-最后加载。
https://stackoverflow.com/questions/18210389
复制相似问题