JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;反射其实是通过Class对象来调用类里面的方法。通过反射可以调用私有方法和私有属性。
反射技术的应用它大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式和单例模式。
单例模式(Singleton) 这个模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。这样做就是为了节省内存空间,保证我们所访问到的都是同一个对象。
单例模式的两种形势:
第一种方式
public class Singleton {
//先申明该类静态对象
private static Singleton instance = null;
//创建一个静态访问器,获得该类实例。加上同步,表示防止两个线程同时进行对象的创建
public static synchronized Singleton getInstance() {
//如果为空,则生成一个该类实例
if (instance == null){
instance = new Singleton();
}
return instance;
}
}
第二种方式
package reflect;
public class Singleton {
private Singleton() {
}
private static Singleton instance = new Singleton();
// 这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
class SingRun{
public static void main(String[] args){
//这样的调用不被允许,因为构造方法是私有的。
//Singleton x=new Singleton();
//得到一个Singleton类实例
Singleton x=Singleton.getInstance();
//得到另一个Singleton类实例
Singleton y=Singleton.getInstance();
//比较x和y的地址,结果为true。说明两次获得的是同一个对象
System.out.println(x==y);
}
}
工厂模式:
工厂模式在Java程序系统可以说是随处可见,是因为工厂模式利用Java反射机制和Java多态的特性可以让我们的程序更加具有灵活性。就是一个程序员和另一个程序员可以同时去书写代码,而不是一个程序员等到另一个程序员写完以后再去书写代码。其中的粘合剂就是接口和配置文件。之前说利用接口可以将调用和实现相分离。