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;
}
}