Java反射的使用

270 阅读1分钟

Java 反射

类的对象:

基于某个类new出来的对象,也成为实例对象。

类对象:

类加载的产物,封装了一个类的所有信息(类名、父类、借口、属性、方法、构造方法)

在这里插入图片描述
获取类对象:

通过类的对象,获取类对象:

	Student s = new Student();
	Class c = s.getClass();

通过类名获取类对象:

  Class c  =类名.class;
 *通过静态方法获取类对象:*
 Class  c = Class.forName("包名.类名");
 **常用方法:**
 public  String  getName()
 public  Package  getPackage()
 public Class<? superT>getSuperclass()
 public  Class<?>[]  getInterfaces()
 public  Field[]  getFields()
 public  Method[]  getMethods()
 public  Construcotor<?>[]  getConstructors()
 public  T  newInstance()
 **工厂设计模式:**
 I、开发中有一个非常重要的原则“开闭原则”,对扩展开放、对修改关闭。
 II、工厂模式主要负责对创建的问题。
 III、可通过反射进行工厂模式的设计,完成动态对象的创建。
//工厂----》创建对象的工厂
		public static Object createObject(String className) {
			try {
				Class c = Class.forName(className);
				return c.newInstance();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return null;
		}
	}

单例模式: 单例(Singleton): 只允许创建一个该类的对象。 方式1:恶汉式(类加载时创建,天生线程安全)

//饿汉式:天生线程安全(无锁)、类加载时创建(不用的时候,也被创建了,占用资源)
class  Singleton{
	private  static final Singleton instance   = new   Singleton();
	private  Singleton() {}

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

方式2:懒汉式(使用时创建,线程不安全,加同步)

//懒汉式:使用时创建,天生线程不安全(加同步锁);效率低
class  Singleton{
	private   static Singleton  instance  = null;
	private   Singleton() {}
	
	public   static  Singleton  getInstance() {
		if(instance == null) {
			instance  = new  Singleton();
		}
		return  instance;
	}
}

方式3:懒汉式(使用时创建,线程安全)

//懒汉式,使用时创建,天生线程安全
class  Singleton{
	private  Singleton() {}
	private static  class Holder{
		static  final Singleton  instance = new Singleton();
	}
	
	
	public  static  Singleton getInstance() {
		return  Holder.instance;
	}
}