1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Update unsafe.md

private修饰的构造函数也可以通过反射创建对象,避免歧义
This commit is contained in:
zouzanyan 2023-08-23 13:50:03 +08:00 committed by GitHub
parent b4a1c6d554
commit 6461c75c19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -417,7 +417,7 @@ public void objTest() throws Exception{
}
```
打印结果分别为 1、1、0说明通过`allocateInstance`方法创建对象过程中,不会调用类的构造方法。使用这种方式创建对象时,只用到了`Class`对象,所以说如果想要跳过对象的初始化阶段或者跳过构造器的安全检查,就可以使用这种方法。在上面的例子中,如果将 A 类的构造函数改为`private`类型,将无法通过构造函数和反射创建对象,但`allocateInstance`方法仍然有效。
打印结果分别为 1、1、0说明通过`allocateInstance`方法创建对象过程中,不会调用类的构造方法。使用这种方式创建对象时,只用到了`Class`对象,所以说如果想要跳过对象的初始化阶段或者跳过构造器的安全检查,就可以使用这种方法。在上面的例子中,如果将 A 类的构造函数改为`private`类型,将无法通过构造函数和反射创建对象可以通过构造函数对象setAccessible后创建对象,但`allocateInstance`方法仍然有效。
#### 典型应用