我们知道当一个类的构造方法被设为私有时,这就意味着我们不能通过new关键字来直接创建这个对象,这时我们可以通过sun.misc.Unsafe来实现我们创建对象的目的,这个类是Java基于底层操作的API,可以直接进行底层操作,例如获得某个属性的偏移地址,甚至可以直接将class文件字节码载入到内存,直接突破Java虚拟机沙箱限制。
1.创建User.java,内容如下:
public class User{ private User(){ System.out.println("constructor User.."); } }
2.创建UnsafeTest
import java.lang.reflect.Field; import sun.misc.Unsafe; public class UnsafeTest { public static void main(String[] args) { try{ //使用UnSafe构造实例 Field field = Unsafe.class.getDeclaredField("theUnsafe"); field.setAccessible(true); Unsafe unsafe = (Unsafe) field.get(null); User user=(User)unsafe.allocateInstance(User.class); System.out.println(user); }catch(Exception e){ e.printStackTrace(); } } }
输出:
[email protected]
时间: 2024-11-14 09:44:00