我有兴趣知道,是否真的可以在不调用任何构造函数的情况下为java类创建对象引用?如果是,怎么样?
答案 0 :(得分:3)
绝对不错,但您可以使用sun.misc.Unsafe
类来分配实例:
public static class TestClass {
int field = 1;
}
public static void main(String[] args) throws Exception {
Constructor<Unsafe> constructor = Unsafe.class.getDeclaredConstructor();
constructor.setAccessible(true);
Unsafe unsafe = constructor.newInstance();
TestClass test = (TestClass) unsafe.allocateInstance(TestClass.class);
System.out.println(test.field);
System.out.println(new TestClass().field);
}
输出:
0
1
答案 1 :(得分:2)
可以使用JNI。
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html
对象操作
AllocObject
jobject AllocObject(JNIEnv *env, jclass clazz);
分配新的Java对象,而不调用该对象的任何构造函数。返回对象的引用。
clazz参数不能引用数组类。
很难找到它的任何相关用法。我不会用它,但它仍然是这个问题的答案。
答案 2 :(得分:1)
我能想到的唯一方法是使用clone()
方法
Object objectA = objectB.clone();
现在objectA.clone() != objectA
和objectA
以及objectB
指向内存中的两个不同位置,因此从技术上讲,您无需调用其构造函数即可创建对象。
答案 3 :(得分:0)
不可能。每个类都有一个默认的构造函数,它调用它的父构造函数super(),它归结为Java的Object类。