Pac*_*ier 16 java constructor class classloader jls
关于类加载的文章指出getClass()不应该在构造函数中调用该方法,因为:
对象初始化仅在构造函数代码的出口处完成.
他们给出的例子是:
public class MyClassLoader extends ClassLoader{
public MyClassLoader(){
super(getClass().getClassLoader()); // should not call getClass() because object
// initialization will be complete only at
// the exit of the constructor code.
}
}
Run Code Online (Sandbox Code Playgroud)
但是据我所知,本机final方法getClass()将始终返回该java.lang.Class对象实例的对象,无论它在何处被调用(在构造函数内或不在构造函数内).
将调用getClass()构造函数中曾经给我们带来的问题?
如果是这样,getClass()在构造函数中调用会给我们带来错误的一些例子是什么?
vax*_*uis 10
在构造函数中调用getClass()会给我们带来问题吗?如果是这样,在构造函数中调用getClass()会给我们带来错误的一些例子是什么?
getClass()以这种方式在构造函数中使用将始终导致编译错误,因为在调用this之前无法引用super().
Main.java:17: error: cannot reference this before supertype constructor has been called
super(getClass().getClassLoader()); // should not call getClass() because object
^
1 error
Run Code Online (Sandbox Code Playgroud)
您可以在http://ideone.com/B0nYZ1上自行测试.
在Class准备好了,但例如不能用于引用Class呢.
仍然,您可以Class在构造函数中使用引用,但您必须以稍微不同的方式执行此操作:super(MyClassLoader.class.getClassLoader())
此外,在调用超类型构造getClass()函数后,您可以在构造函数中自由使用- 正如您已经指出的那样,该对象基本上已准备就绪,并且Class可以从实例推断出引用.