sun.misc.unsafe
首先需要申明的一点的是,在android中这个类已经被移除了。
所以下面的讨论都是纯的java。
实例化
目前只能通过反射进行实例化。
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);
还有就是通过反射实例化方法:
Constructor<Unsafe> unsafeConstructor = Unsafe.class.getDeclaredConstructor();
unsafeConstructor.setAccessible(true);
Unsafe unsafe = unsafeConstructor.newInstance();
几个实际场景的使用
绕开实例化构造方法
A o1 = new A(); // constructor
o1.a(); // prints 1
A o2 = A.class.newInstance(); // reflection
o2.a(); // prints 1
A o3 = (A) unsafe.allocateInstance(A.class); // unsafe
o3.a(); // prints 0
static class A {
private long a; // not initialized value
public A() {
this.a = 1; // initialization
}
public void a() {
System.out.println(this.a);
}
}