文档下载 文档下载导航
设为首页 | 加入收藏
搜索 请输入内容:  
 导航当前位置: 文档下载 > 所有分类 > 资格考试/认证 > IT认证 > java反射机制
侵权投诉

java反射机制

忙里偷闲,做了一些反射机制中的测试。。。。
问题一: 即使在非并发的情况下,单例模式能保证单例么?
先来一个最简单的单例模式:
Java代码
public class Singleton {

private static Singleton instance = new Singleton();
private Singleton() {
}

public static Singleton getInstance(){
return instance;
}
}

public class Singleton {

private static Singleton instance = new Singleton();
private Singleton() {
}

public static Singleton getInstance(){
return instance;
}
}

测试类:
Java代码
import java.lang.reflect.Constructor;

public class TestSingleton {
public static void main(String[] args) {
try {
Constructor<?> con = Class.forName(Singleton.class.getName()).getDeclaredConstructor();
con.setAccessible(true);
Singleton single1 = (Singleton)con.newInstance();
Singleton single2 = (Singleton)con.newInstance();
System.out.println("single1.equals(single2):"+single1.equals(single2));
} catch (Exception e) {
e.printStackTrace();
}
}
}

import java.lang.reflect.Constructor;

public class TestSingleton {
public static void main(String[] args) {
try {
Constructor<?> con = Class.forName(Singleton.class.getName()).getDeclaredConstructor();
con.setAccessible(true);
Singleton single1 = (Singleton)con.newInstance();
Singleton single2 = (Singleton)con.newInstance();
System.out.println("single1.equals(single2):"+single1.equals(single2));
} catch (Exception e) {
e.printStackTrace();
}
}
}

结果:
Java代码
single1.equals(single2):false

single1.equals(single2):false


结论:在反射的情况下,单例模式失效,这是因为通过反射可以获取私有属性,通过调用相应的setAccessible()方法,可以使private属性失效。那么如何能保证的确只能有一个实例呢?在我认为,如果某一程序故意通过反射来绕过单例的限制,则它要么是恶意程序,要么是一个逻辑错误,可以直接抛runtimeException,来让程序终止,否则一旦生成多个实例,后果是不可控的。个人改进如下:
Java代码
public class Singleton {

private static Singleton instance = new Singleton();
private static boolean flag = true;
private Singleton() {
if(flag){
//other code here.....
flag = !flag;
return;
}else{
throw new RuntimeException("dulpicated instance of "+ Singleton.class.getName());
}
}

public static Singleton getInstance(){
return instance;
}
}

public class Singleton {

private static Singleton instance = new Singleton();
private static boole

第1页

你可能喜欢

  • JAVA反射机制
  • java实例
  • Java设计模式
  • HTML5入门
  • java多态
  • 软件开发规范
  • java面试
  • java应用

热门文档

相关文档

  • JAVA反射机制详解

    JAVA反射机制详解_IT/计算机_专业资料。对反射机制有非常详细的解释第10 章 Java 语言的反射机制 在 Java 运行时环境中,对于任意一个类,能否知道这个类有哪些...

  • java反射机制

    —检测一个在运行期间才知道名字的对象的方法 利用 Java 反射机制我们可以很灵活的对已经加载到 Java 虚拟机当中的类信 息进行检测。 当然这种检测在对运行的性能...

  • Java反射机制-较全面PPT

    Java反射机制 Java反射机制 本课程主要讲述Java反射机制 本课程要求大家对Java泛型知识有所了解,因为程序代码 中大量使用了泛型相关知识 2010-12-2 成都天府软件园...

  • Java反射机制

    Java 反射机制一、 Java 反射机制 1、什么是 java 语言的反射机制 JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方 法;对于任意一...

  • Java反射机制

    理解Java反射机制 ? 理解Java的动态代理 ? Spring IoC原理剖析 Java泛型在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object 的引用来实现参数的“任意化...

  • Java反射机制总结

    谈 java 反射机制 Java 反射机制 Java 集合浅析 Java 的类反射机制 Java 反射机制的学习 Java 反射 Reflection--运行时生成实例 Java 反射机制 Java 反射机制 2 ...

  • JAVA反射机制定义

    JAVA 反射机制定义: JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所 有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态 ...

  • java反射机制

    Java 开发员 STY Manoel Lemos Singularity 系统公司 CEO/CTO 1

  • java反射机制及例子

    java反射机制及例子_工学_高等教育_教育专区。反射原理讲解及例子演示1 Java 反射 reflection Java 提供了一套机制来动态执行方法和构造方法, 以及数组操作等, 这...

  • java反射机制的用法

    java反射机制的用法_计算机软件及应用_IT/计算机_专业资料。java反射机制的用法计算机交流平台:计算机故障_计算机论坛 www.it168bbs.com wy java 反射机制的用法...

站点地图 | 文档上传 | 侵权投诉 | 手机版
本站所有资源均来自互联网,本站只负责收集和整理,均不承担任何法律责任,如有侵权等其它行为请联系我们.
文档下载 Copyright 2013 doc.guandang.net All Rights Reserved.  -  email