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); 
    }
}

results matching ""

    No results matching ""