反射使用的步骤

简介: 反射使用的步骤

Java反射API有几类?
反射 API 用来生成 JVM 中的类、接口或则对象的信息。

Class 类:反射的核心类,可以获取类的属性,方法等信息。

Field 类:Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。

Method 类:Java.lang.reflec 包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。

Constructor 类:Java.lang.reflec 包中的类,表示类的构造方法。

反射使用的步骤?
获取想要操作的类的Class对象,这是反射的核心,通过Class对象我们可以任意调用类的方法。

调用 Class 类中的方法,既就是反射的使用阶段。

使用反射 API 来操作这些信息。

具体可以看下面的例子:

public class Apple {

private int price;

public int getPrice() {
    return price;
}

public void setPrice(int price) {
    this.price = price;
}

public static void main(String[] args) throws Exception{
    //正常的调用
    Apple apple = new Apple();
    apple.setPrice(5);
    System.out.println("Apple Price:" + apple.getPrice());
    //使用反射调用
    Class clz = Class.forName("com.chenshuyi.api.Apple");
    Method setPriceMethod = clz.getMethod("setPrice", int.class);
    Constructor appleConstructor = clz.getConstructor();
    Object appleObj = appleConstructor.newInstance();
    setPriceMethod.invoke(appleObj, 14);
    Method getPriceMethod = clz.getMethod("getPrice");
    System.out.println("Apple Price:" + getPriceMethod.invoke(appleObj));
}

}
从代码中可以看到我们使用反射调用了 setPrice 方法,并传递了 14 的值。之后使用反射调用了 getPrice 方法,输出其价格。上面的代码整个的输出结果是:

Apple Price:5
Apple Price:14
1
从这个简单的例子可以看出,一般情况下我们使用反射获取一个对象的步骤:

获取类的 Class 对象实例
Class clz = Class.forName("com.zhenai.api.Apple");
根据 Class 对象实例获取 Constructor 对象
Constructor appleConstructor = clz.getConstructor();
使用 Constructor 对象的 newInstance 方法获取反射类对象
Object appleObj = appleConstructor.newInstance();
而如果要调用某一个方法,则需要经过下面的步骤:

获取方法的 Method 对象
Method setPriceMethod = clz.getMethod("setPrice", int.class);
利用 invoke 方法调用方法
setPriceMethod.invoke(appleObj, 14);
为什么引入反射概念?反射机制的应用有哪些?
我们来看一下 Oracle 官方文档中对反射的描述:

从 Oracle 官方文档中可以看出,反射主要应用在以下几方面:

反射让开发人员可以通过外部类的全路径名创建对象,并使用这些类,实现一些扩展的功能。
反射让开发人员可以枚举出类的全部成员,包括构造函数、属性、方法。以帮助开发者写出正确的代码。
测试时可以利用反射 API 访问类的私有成员,以保证测试代码覆盖率。
也就是说,Oracle 希望开发者将反射作为一个工具,用来帮助程序员实现本不可能实现的功能。

举两个最常见使用反射的例子,来说明反射机制的强大之处:

第一种:JDBC 的数据库的连接

在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成

通过Class.forName()加载数据库的驱动程序 (通过反射加载,前提是引入相关了Jar包);
通过 DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码;
通过Connection 接口接收连接。
public class ConnectionJDBC {

/** 
 * @param args 
 */  
//驱动程序就是之前在classpath中配置的JDBC的驱动程序的JAR 包中  
public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
//连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
//连接数据库的用户名  
public static final String DBUSER = "root";  
//连接数据库的密码  
public static final String DBPASS = "";  


public static void main(String[] args) throws Exception {  
    Connection con = null; //表示数据库的连接对象  
    Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序 ,反射机制的体现 
    con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
    System.out.println(con);  
    con.close(); // 3、关闭数据库  
}  


相关文章
|
Web App开发 监控 JavaScript
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
|
存储 NoSQL 关系型数据库
|
存储 数据采集 缓存
Bitmap 和 布隆过滤器傻傻分不清?你这不应该啊
大家好,我是小富。本文介绍了 Redis 的 Bitmap 和布隆过滤器的区别与关系,包括它们的底层原理、应用场景及优缺点。Bitmap 以 bit 为单位存储数据,适用于记录二值状态,如用户签到、在线状态等。布隆过滤器通过多个哈希函数优化哈希碰撞问题,适用于大规模数据的快速判断,如缓存穿透、邮箱黑名单过滤等。两者都能高效处理大数据量和高并发场景。
663 122
|
8月前
|
微服务
什么是微服务?微服务的优缺点是什么?
微服务就是一个独立的职责单一的服务应用程序,一个模块 1.优点:松耦合,聚焦单一业务功能,无关开发语言,团队规模降低 , 扩展性好, 天然支持分库2.缺点:随着服务数量增加,管理复杂,部署复杂,服务器需要增多,服务通信和调用压力增大
|
10月前
|
存储 缓存 Java
程序员必懂!上下文切换到底是怎么回事?
大家好,我是小米,一个喜欢分享技术的程序员。今天聊聊社招面试中的高频考点——上下文切换。它指CPU在多个任务间切换时保存和恢复状态的过程,常见于进程、线程切换及中断处理。上下文切换有CPU时间开销、缓存失效、内存开销等代价。优化方法包括减少线程数量、选择合适的并发模型、优化锁使用等。理解这些不仅能提升面试表现,还能写出更高效的代码。欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
406 6
|
10月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
281 1
|
监控 安全 Java
【面试题】面试必备我跟面试官聊了一个小时线程池!
【面试题】面试必备我跟面试官聊了一个小时线程池!
1200 1
|
Java API
Java 8,如何对 ArrayList 元素进行排序?
【8月更文挑战第16天】
1693 2
Java 8,如何对 ArrayList 元素进行排序?
|
缓存 监控 负载均衡
一文讲明Hystrix熔断器
这篇文章详细阐述了Hystrix熔断器的原理和应用,解释了分布式系统中服务雪崩的问题,并展示了如何在Spring Cloud框架中使用Hystrix进行熔断和降级处理。
一文讲明Hystrix熔断器
下一篇
oss云网关配置