温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是Unsafe工具类

发布时间:2021-10-14 10:46:25 来源:亿速云 阅读:118 作者:iii 栏目:编程语言

这篇文章主要讲解了“什么是Unsafe工具类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是Unsafe工具类”吧!

Unsafe工具类

反射是Java的第一大特点,一旦打开反射的大门就可以有更加丰富的类设计形式。除了JVM本身支持的反射处理之外,在Java中也提供了一个Unsafe类(不安全的操作),这个类的主要特点是可以利用反射来获取对象,并且直接使用底层的C++来代替JVM执行,即:可以绕过JVM的相关的对象管理机制,一旦使用Unsafe,那么项目之中将无法继续使用JVM的内存管理机制以及垃圾回收处理。
但是如果要想使用Unsafe类首先就需要确认一下这个类中定义的构造方法与常量问题:

  • 构造方法:private Unsafe() {}

  • 私有常量:private static final Unsafe theUnsafe = new Unsafe()

但是需要注意的是,在这个Unsafe类中并没有提供static的方法,即:不能通过类似于传统的单例设计模式中提供的样式来进行操作,如果想要获得这个类的对象,就必须利用反射机制来完成。

import sun.misc.Unsafe;import java.lang.reflect.Field;public class JavaAPIDemo {public static void main(String[] args) throws Exception {
        Field field = Unsafe.class.getDeclaredField("theUnsafe");
        field.setAccessible(true);  // 解除封装处理Unsafe unsafeObject = (Unsafe) field.get(null);  // static属性不需要传递实例化对象}
}

在传统的开发中,一个程序类必须要通过实例化对象后才可以调用类中的普通方法,尤其是以单例设计模式为例。

范例:使用Unsafe类绕过实例化对象的管理

import sun.misc.Unsafe;import java.lang.reflect.Field;public class JavaAPIDemo {public static void main(String[] args) throws Exception {
        Field field = Unsafe.class.getDeclaredField("theUnsafe");
        field.setAccessible(true);
        Unsafe unsafeObject = (Unsafe) field.get(null);// 利用Unsafe类绕过了JVM管理机制,可以在没有实例化对象的情况下获取一个Singleton类实例化对象Singleton instance = (Singleton) unsafeObject.allocateInstance(Singleton.class);
        instance.print();   // www.mldn.cn}
}class Singleton{private Singleton() {
        System.out.println("*****Singleton类构造******")
    }public void  print(){
        System.out.println("www.mldn.cn");
    }
}

感谢各位的阅读,以上就是“什么是Unsafe工具类”的内容了,经过本文的学习后,相信大家对什么是Unsafe工具类这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI