rem*_*rab 6 java class classloader new-operator
我对一个主题感到困惑,无法在网上找到它.据我了解,当程序启动时,类加载器加载.class文件并将它们作为具有该类型的对象存储在内存中Class.
我的问题是我们何时使用:
Test test = new Test();
Run Code Online (Sandbox Code Playgroud)
是使用.class文件创建新对象,还是使用Class内存中已有的对象?
将类加载到JVM后,不会再为同一个类加载器加载相同的类.将从内存中的类对象创建新实例(对于相同的类加载器).
高级步骤(从https://www.ibm.com/developerworks/java/tutorials/j-classloader/j-classloader.html复制)
如果仍然没有类,则抛出ClassNotFoundException.
protected synchronized Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
// First, check if the class has already been loaded
Class c = findLoadedClass(name);
if (c == null) {
try {
if (parent != null) {
c = parent.loadClass(name, false);
} else {
c = findBootstrapClass0(name);
}
} catch (ClassNotFoundException e) {
// If still not found, then invoke findClass in order
// to find the class.
c = findClass(name);
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
Run Code Online (Sandbox Code Playgroud)以下示例将打印相同的hashCode并引用相同的Test.class
Test test1 = new Test();
Test test2 = new Test();
System.out.println(test2.getClass().hashCode());
System.out.println(test1.getClass().hashCode());
System.out.println(Test.class.hashCode());
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请 访问http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html?page=1
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |