范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

别写错了,你知道如何防止反射和序列化破坏单例模式吗?

  反射破坏单例
  单例模式一般构造方法都是private,目的就是为了防止外界调用私有构造器创建多个实例,通过一个public的共有方法作为外界获取实例的唯一入口,从而实现单例。
  但是反射能够访问私有的构造方法,只要反射获取的构造器调用 setAccessible(true) 方法即可。这样调用一次就会产生一个实例,调用多次就时多个实例,从而破坏单例。如何防止:
  只要在单例的私有构造器中添加判断单例是否已经构造的代码,如果单例之前已经构造,则抛出异常,如果没有构造,则无所谓。如下 //单例被破坏则抛异常 private SingleTon1() {  if(singleTon1 != null) {   throw new RuntimeException();  } }
  单例完整代码: public class SingleTon1 {  private static SingleTon1 singleTon1 = new SingleTon1();    private SingleTon1() {   if(singleTon1 != null) {    throw new RuntimeException();   }  }    public static SingleTon1 getSingleTon1() {   return singleTon1;  } } 测试:
  反射测试代码: public static void main(String[] args) throws Exception {                 Constructor constructor=SingleTon1.class.getDeclaredConstructor();   constructor.setAccessible(true);   SingleTon1 s1=constructor.newInstance();   SingleTon1 s2=constructor.newInstance();   System.out.println(s1);   System.out.println(s2); }
  结果:抛出异常,阻止了调用私有构造器 Exception in thread "main" java.lang.reflect.InvocationTargetException  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)  at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)  at java.lang.reflect.Constructor.newInstance(Unknown Source)  at singleTonDestory.test.main(test.java:21) Caused by: java.lang.RuntimeException  at singleTonDestory.SingleTon1.(SingleTon1.java:13)  ... 5 more 序列化破坏单例
  添加readResolve方法就可以防止破坏单例 public class SingleTon1 implements Serializable{  private static SingleTon1 singleTon1 = new SingleTon1();    private SingleTon1() {   if(singleTon1 != null) {    throw new RuntimeException();   }  }  public static SingleTon1 getSingleTon1() {   return singleTon1;  }    //防止反序列化破坏单例,反序列化时,如果定义了readResolve方法,则直接返回吃方法指定的对象,而不需要单独再创建对象  private Object readResolve() throws ObjectStreamException{   return singleTon1;  } }
  添加readResolve方法,反序列化时,会直接返回该方法指定的对象,不需要创建对象。 测试:
  序列化测试代码: public static void main(String[] args) throws Exception {  //通过方法获取两个一样的单例   SingleTon1 s1 = SingleTon1.getSingleTon1();   SingleTon1 s2 = SingleTon1.getSingleTon1();      //序列化到磁盘(保存对象)   FileOutputStream fos = new FileOutputStream("d:/a.txt");   ObjectOutputStream oos = new ObjectOutputStream(fos);   oos.writeObject(s1);   oos.close();   fos.close();     //从磁盘发序列化(获取对象)   FileInputStream fis = new FileInputStream("D:/a.txt");   ObjectInputStream ois = new ObjectInputStream(fis);   SingleTon1 s= (SingleTon1) ois.readObject();     System.out.println(s);   System.out.println(s1);   System.out.println(s2); }
  结果: singleTonDestory.SingleTon1@5c647e05 singleTonDestory.SingleTon1@5c647e05 singleTonDestory.SingleTon1@5c647e05
  从结果可以看出,防止了序列化破坏单例。
  来源:blog.csdn.net/weixin_42130471/article/details/89602999

长度堪比论文,APP用户协议怪象怎么破来源中工网工人日报原标题长度堪比论文,APP用户协议怪象怎么破张子谕移动互联网时代,APP成了很多人的必备工具。首次下载使用时,点击我已阅读并同意用户协议和隐私政策是常规操作。这些320公里长续航,便宜小巧快充代步车,5门大4座设计,实拍凌宝BOX凌宝BOX越来越多的消费者,对于汽车的认知越来越清晰,一款车子最本质的工作,就是一个地方到另一个地方,因此一款微型电动汽车,就能满足其需求,就不比要去花大钱去买大车。今天给大家带来三度折戟,快手死磕海外图片来源视觉中国文价值研究所日前,据多家媒体报道,快手海外事业部在上周召开全员会,宣布进行一轮大规模组织架构调整。其中最主要的变化有两点一是快手原国际化事业部负责人仇广宇已在近期离APP隐私条款应简明实用来源经济日报截至2021年12月,我国手机网民规模达10。29亿。随着手机功能的不断扩充,与之相关的APP数量激增。然而,安装APP时需要阅读的用户协议和隐私政策却越来越冗长晦涩,起售价3399元,5000mAh1TB,一开卖就缺货?声明原创不易,禁止搬运,违者必究!手机卖到缺货?这也意味着这款手机产品在市场上的热度是非常高的,对于手机厂商来说,无疑打造了一款成功的产品。当然也不排除,有些手机厂商为了提高市场热2022年3月21日公司新闻一览1道通科技拟发行可转债加码新能源汽车后市场产业链2ST中昌收问询函要求说明目前公司治理是否合规内部控制是否有效3宁德时代董事长曾毓群沟通会回应美国建厂等问题美国市场,宁德时代是一定5000mAh鸿蒙新机亮相,7英寸100W,首发HarmonyOS3遭受无论禁令打压后,华为如今的手机业务发展也陷入停滞状态,甚至还局限于5G射频芯片供应问题,导致华为一度无法继续推出5G旗舰新机,所以大家会看到,在去年的手机市场上华为几乎处于一片这才是手机卷王,1亿像素主摄12512GB,只要2499元从最近的新机发布来看,RedmiK50系列又要成为2022年的卷王。三星2K直屏,还有天玑8100,67W快充等配置,直接卖到了2399元起,这个性价比短时间内很难有人能超越。甚至网约车清退潮多少无证司机一夜消失,转身进厂打工一心赚钱?出行市场风风光光的时间黄金期就此落幕,远去的资本和败北的平台,真是令人唏嘘不已!可是故事还在继续,哈啰一喂顺风车等后来者暗自较劲,都想趁下半场抢占市场,尽可能占得一席之地。不过,接python数据类型python中列表是最常用的数据类型之一,由多个元素组成的集合,每个元素都有一个位置或者叫索引,索引的值从0开始,往后顺序递推,最大值为列表长度1例如aa1,2,3,4,5prin引人入胜!四款Windows上必备的实用软件,使用起来惊喜满满嗨格式录屏大师嗨格式录屏大师,是一款好用的高清屏幕录制软件。嗨格式录屏大师先不说别的,在它这里,你是可以轻轻松松完美实现音画同步录制的,仅凭这一个功能,它就已经甩其他同类录制软件,
EUV光刻机结局已定,梁孟松再次发声,事关中芯7nm美国为了打压华为等中企,可谓是无所不用其极,不仅实施芯片禁令,切断华为的芯片代工渠道,而且还出台管制规则,禁止ASML等海外设备巨头向我国市场出口造芯必须用到的核心设备。作为全球唯阿里回应女员工被侵害但还有几点质疑想说智观察报道阿里又上热搜了,虽然热搜标签在变,但不变的是网民对于阿里处事风格的批判和质疑。日前,网上有消息称,阿里巴巴一名女员工被领导要求出差并陪客户喝酒,席间,自己已经被灌醉,过程米家智能保管箱再次开售6种解锁方式,599元IT之家8月7日消息小米于2020年9月首次发布了米家智能保管箱。该产品采用黑色外观双层设计,锁芯等级为C级。近日,这款保管箱将再次开售,售价599元。这款产品采用高强度材质,内置iPhone13Pro新消息,4500mAh大电池4800万主摄,改变很大经过漫长的等待,上周,华为终于召开了今年的首场旗舰发布会,推出了大家期待已久的华为P50系列。但华为P50系列发布以后,大家都不约而同地将目光转移到了iPhone13系列上。据爆料不懂手机买苹果,半懂手机买一加?其实这四款才是内行人最爱手机行业不同的手机品牌往往针对不同的用户群体,因此有一种广为流传的说法是,不懂手机买苹果,半懂手机买一加。这种说法虽然流传很广,但其实并没什么道理,毕竟大家选择手机是自由的,想买什东京奥运会即将闭幕,综合体验下来,我发现这款手机最适合看比赛8月8日19点,2020东京奥运会将正式举办闭幕式,虽然开幕式不尽如人意,但是闭幕式还是值得关注,这一届的奥运会给我们带来了各种惊喜。首先,最令人瞩目的无疑是耀眼的成绩,在今年的奥小米MIX4发布会定档,新品齐聚独缺MIUI13近日,小米CEO雷军通过微博宣布小米MIX4将在8月10日晚上发布。雷军表示MIX,是工程师对科技的理想,是设计师对美学的执着,更承载着万千米粉对未来的想象。时隔3年,小米MIX4华为Mate50传来新消息,5G问题有望解决,华为P50系列还能买吗?没想到5G手机做得最好的手机品牌,如今竟然发布不了5G手机,这是华为P50系列旗舰发布之后一个点赞率极高的评论,7月底的时候延期已久的华为P50系列新旗舰正式发布了,质感十足的设计媳妇把华为mate40pro换成iphone12一个月后的感受我和媳妇之前一直用的是华为手机,从荣耀6(EMUI3。0)开始,一直到现在的鸿蒙2。0,基本都用过每一代的EMUI版本,期间用过一次魅族,使用过程中发现系统有一些让人暴躁的BUG,华为已经没落,小米初次尝试,苹果仍在观望,谁能挑战三星宝座?了解手机发展史的朋友应该知道,在智能手机发展初期,包括音乐手机人像手机等细分领域的手机凭借传统电视广告与疯狂铺店,一度走红线下市场,随着整个手机市场的升级与完善,细分手机开撕陆续退华为再招天才毕业就拿201万年薪!任正非发话养得起文小郭就在前段时间,华为又开始了热搜。这一次,华为没有发布新机,但他们发布了一份华为天才少年名单。这些人是华为未来的中流砥柱,是华为的后备人才。那么,为什么这样的信息会出现在热搜中