山西省建设厅入晋备案网站,wordpress站点更换域名,长春网站建设平台,wordpress机械主题一、反射 1. 相关概念 (1) 类的对象#xff1a;基于定义好的一个类#xff0c;创建该类的实例#xff0c;即利用 new 创建的实例就为类的对象。 (2) 类对象#xff1a;类加载的产物#xff0c;封装了一个类的所有信息 ( 包名、类名、父类、接口、属性、方法、构造方… 一、反射 1. 相关概念 (1) 类的对象基于定义好的一个类创建该类的实例即利用 new 创建的实例就为类的对象。 (2) 类对象类加载的产物封装了一个类的所有信息 ( 包名、类名、父类、接口、属性、方法、构造方法 ) 。 (3) 反射通过反射可以获取一个类的 类对象从而获取该类的信息直接通过类对象进行一系列操作。 2. 通过反射技术获取类对象 (1) 借助 Object 类中 getClass() 方法通过 类的对象 获取 类对象 Student s new Student (); // 类的对象 Class c1 s.getClass(); // 类对象 (2) 通过 类名 .class 直接获取类对象 Class c2 类名 .class; 例如 Class c2 Student.class; (3) 通过 Class 类中静态方法 forName( 包名 . 类名 ) Class c3 Class.forName(test_flect.Student); 注意参数需要 包名 . 类名 被称为权限类名、全类名。 如果只给定了类名则运行报错错误信息为 java.lang.ClassNotFoundException( 类找不到异常 ) 补充类加载的时机。 (1) 第一次创建该类对象 (2) 第一次使用该类的静态成员 ( 静态属性和静态方法 ) (3) 子类类加载会导致其父类先进行类加载。 (4) 通过反射获取类对象会导致类进行类加载 3. 常用的方法 (1) getName(): 获取类名 (2) Method[] getMethods() 获取本类 父类中所有公开方法 (3) Method[] getDeclaredMethods() 获取自身所有方法包含非公开的方法。 (4) 通过 类对象 创建 类的对象 Class c Class . forName ( test_flect.Student ); // 类对象 Object obj c . newInstance (); // 类对象 获取 类的对象 注意 Class 类中 newInstance() 方法获取类的对象默认调用无参数的构造方法。 所以开发时对于封装的实体类建议提供无参数的构造方法。 没有提供对应构造方法创建对象时报错信息为 java.lang.InstantiationException (5) 通过有参数的构造方法获取类的对象 // 获取 类对象 Class c Class . forName ( test_flect.Student ); // 获取有参数的构造方法 Constructor constructor c . getConstructor ( String . class , Integer . class ); // 通过有参数的构造方法获取 类的对象 Object o constructor . newInstance ( 万青 , 48 ); System . out . println ( o ); (6) 调用某个方法 Method m c . getDeclaredMethod ( test ); m . setAccessible ( true ); m . invoke ( o ); 4. 反射的优缺点 (1) 缺点可读性差代码繁琐打破封装。 (2) 优点可以使代码更加通用和灵活。通常用于底层架构例如框架等。 二、设计模式 (23 种 ) 1. 设计模式一套被反复使用多人知晓并分门别类的编目的一套代码经验总结。 2. 适配器模式详见接口课后题目。 3. 单例设计模式常见的一种开发设计模式在 Java 应用程序中 , 必须保证 JVM 内部仅存在该类的一个实例对象。 (1) 第一种实现方式饿汉式 // 第一种实现模式饿汉式 class ClassA { private static final ClassA ca new ClassA (); private ClassA (){} // 提供 public static ClassA getInstance (){ return ca ; } } 优点线程并发效率高 缺点空间利用率较低 (2) 第二种实现方式懒汉式 // 第二种实现方式懒汉式 class ClassB { private static ClassB cb ; private ClassB (){} public synchronized static ClassB getInstance (){ if ( cb null ){ cb new ClassB (); } return cb ; } } 优点空间利用率较高 缺点线程并发效率低 (3) 基于前两种的优缺点提供第三种方式 // 第三实现方式 class ClassC { private ClassC (){} private static class Inner { final static ClassC c new ClassC (); } public static ClassC getIntsance (){ return Inner . c ; } } 4. 工厂设计模式 (1) 工厂设计模式用于解决程序中对象创建的问题一个工厂的作用在于完成对象的创建。 (2) 开发时通常借助反射的技术使工厂通用、灵活。 (3) 扩充 Properties: 是 Hashtable 的子类即 Map 的实现类 a. Properties: 键和值默认为 String 类型创建该类对象时不要添加泛型。 b. load(InputStream in) / load(Reader in) 自动将流指向文件内容进行加载一行代表一个集合元素 自动以 、 : 进行拆分符号 左侧作为键的内容右侧作为值的内容 c. String getProperty(String key) 通过键获取对应的值