Java反射和设计模式

一、反射

  1. 相关概念:

(1) 类的对象:基于定义好的一个类,创建该类的实例,即利用 new 创建的实例就为类的对象。

(2) 类对象:类加载的产物,封装了一个类的所有信息(包名、类名、父类、接口、属性、方法、构造方法)。

(3) 反射:通过反射可以获取一个类的 类对象,从而获取该类的信息,直接通过类对象进行一系列操作。

  1. 通过反射技术获取类对象:

(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) 通过反射获取类对象,会导致类进行类加载

  1. 常用的方法:

(1) getName():获取类名

(2) Method\[\] getMethods():获取本类+父类中所有公开方法

(3) Method\[\] getDeclaredMethods():获取自身所有方法,包含非公开的方法。

(4) 通过 类对象 创建 类的对象:

**注意:**Class类中 newInstance()方法,获取类的对象,默认调用无参数的构造方法。 所以开发时,对于封装的实体类,建议提供无参数的构造方法。 没有提供对应构造方法,创建对象时,报错信息为:java.lang.InstantiationException

(5) 通过有参数的构造方法获取类的对象:

(6) 调用某个方法:

  1. 反射的优缺点:

(1) 缺点:可读性差,代码繁琐,打破封装。

(2) 优点:可以使代码更加通用和灵活。通常用于底层架构,例如:框架等。

二、设计模式(23种)

  1. 设计模式:一套被反复使用,多人知晓,并分门别类的编目的一套代码经验总结。

  2. 适配器模式详见接口课后题目。

  3. 单例设计模式:常见的一种开发设计模式,在Java应用程序中,必须保证JVM内部仅存在该类的一个实例对象。

(1) 第一种实现方式:饿汉式

优点:线程并发效率高

缺点:空间利用率较低

(2) 第二种实现方式:懒汉式

优点:空间利用率较高

缺点:线程并发效率低

(3) 基于前两种的优缺点,提供第三种方式:

  1. 工厂设计模式:

(1) 工厂设计模式:用于解决程序中对象创建的问题,一个工厂的作用在于完成对象的创建。

(2) 开发时,通常借助反射的技术使工厂通用、灵活。

(3) 扩充Properties:是 Hashtable的子类,即Map的实现类

a. Properties: 键和值,默认为String类型,创建该类对象时,不要添加泛型。

b. load(InputStream in) / load(Reader in):自动将流指向文件内容进行加载,一行代表一个集合元素, 自动以"=" 、":"进行拆分,符号 左侧作为键的内容,右侧作为值的内容

c. String getProperty(String key):通过键获取对应的值

相关推荐
大模型码小白5 小时前
【AI大模型】DeepSeek Harness 深度解析:大模型评测框架的架构与实践
java·运维·人工智能·spring·架构·自动化
Mr.Java.5 小时前
本地测试全绿,上线 SQL 报错?Spring Boot 容器级 DT 测试实战指南(附Skills)
java·测试用例·springboot·testcontainers·dt·java测试skills·dt测试
李迟5 小时前
Golang实践录:工程框架实践:搭建工程模板
开发语言·后端·golang
纪伊路上盛名在5 小时前
Kabsch算法的Julia实现
开发语言·算法·julia·序列分析·蛋白质·rmsd
玖玥拾5 小时前
Lua 基础语法(三) 元表 metatable、元方法、模拟面向对象
开发语言·unity·lua
维天说5 小时前
Agent会听人话,反而更难管
java·开发语言·人工智能
SamDeepThinking5 小时前
if嵌套最好控制在3层以内
java·后端·程序员
边境悍匪5 小时前
蜗牛学苑 Java 智能体学习 Day36|阿里云 OSS 文件上传、Spring 事务、全局异常思维导图复盘
java·学习·阿里云
苏渡苇5 小时前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
java·后端·spring·spring cloud·springboot·性能监控
裕晟资质规划5 小时前
军工保密资质二级申报的四个可量化硬条件:条文位置、数值口径与西安配套企业实务要点
java·服务器·网络·数据库·算法