java中Unsafe类的“特殊”用法
程序员文章站
2022-06-19 19:28:42
...
最近在学习java.util.concurrent包的内容时,发现了一个java中很强大的工具类Unsafe,不仅提供了很强大的功能,
如:
- 操纵对象属性
- 操纵数组元素
- 线程挂起与恢复、CAS
还发现了一些很“特殊”的用法。
public native Object allocateInstance(Class<?> var1) throws InstantiationException;
该方法可以通过Class对象构造一个对象实例。我们平时都是隐式(java反射)和显式地通过类的构造函数创建一个对象,而方法allocateInstance创建的对象实例并不会调用类的构造方法。示例结果如下:
示例代码如下:
public class UnsafeTest {
static class Test {
Test() {
System.out.println("born in construction");
}
void surprise() {
System.out.println("surprise: without construction, i was born");
}
}
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, InstantiationException {
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);
Test test = (Test) unsafe.allocateInstance(Test.class);
test.surprise();
}
}
上一篇: 扩展键盘实验及微机课设
下一篇: iOS-字符串翻转
推荐阅读
-
Java中Date()类 日期转字符串、字符串转日期的问题
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
Java中数组操作 java.util.Arrays 类常用方法的使用
-
C#中String StringBuilder StringBuffer类的用法
-
Android中TelephonyManager类的用法案例详解
-
Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
-
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
-
Shell中特殊字符的用法总结大全
-
Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别
-
android中Handle类的用法实例分析