第六章:
反射+设计模式 一、
反射 1. 反射(Reflection):允许在程序运行状态中,可以获取任意类中的属性和方法,并且可以操作任意对象内部的属 性和方法,这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。
2. 类对象 和 类的对象(实例
3. 获取类对象:通过反射机制
(1) 第一种方式:通过类的对象 获取 类对象 Student s = new Student(); // 实例 Class c1 = s.getClass(); // 类对象 System.out.println(c1);
(2) 第二种方式:类名.class Class c2 = Student.class; System.out.println(c2); System.out.println(c1 == c2);
(3) 第三种方式:通过 静态方法 forName("包名.类名"); Class c3 = Class.forName("testflect.Student"); System.out.println(c3)
5. 反射的优缺点;
(1) 优点:使用反射设计程序,让程序更加灵活和通过,通常应用在框架底层设计
(2) 缺点:利用反射设计程序,让程序更加复杂
二、设计模式 1. 设计模式:是一套被反复使用、多数人知晓、经过分类编目的代码经验总结。
2. 单例模式
(1) 单例模式(Singleton):保证在当前JVM中,该类只有一个实例(对象)存在,是一种常见的设计模式。 (2) 单例模式的实现方式: // 代码实现单例的第一种方式:饿汉式 class ClassA{ private static final ClassA ca = new ClassA(); private ClassA(){} public static ClassA getClassA(){ return ca; 2. 工厂设计模式 } } // 代码实现单例的第二种方式:懒汉式 class ClassB{ private static ClassB cb; private ClassB(){} public synchronized static ClassB getClassB(){ if(cb == null){ cb = new ClassB(); } return cb; } public static void test(){} } 饿汉式: 优点:线程并发效率较高 缺点:内存空间利用率低 懒汉式: 优点:内存空间利用率高 缺点:线程并发效率较低
(1) 工厂设计模式:主要解决的是对象创建的问题,工厂的职责在于创建一个对象 (2) 注意:工厂设计模式通常会利用反射技术,使工厂更加的灵活和通用。 public class TestFactory { public static void main(String[] args) { Object obj = MyObjectFactory.getObject("testflect.Student"); System.out.println(obj); } } // 工厂:解决对象创建问题 class MyObjectFactory{ public static Object getObject(String className){ try { // 获取类对象 Class c = Class.forName(className); // 类对象 获取 实例 Object obj = c.newInstance(); return obj; }catch (Exception e){ e.printStackTrace(); return null; } } }