java反射判断map_关于Java反射

反射是什么?

反射,是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。对于Java来说,反射就是操作类的Class对象来让我们可以在程序运行时发现和使用类的所有信息。当然如果没有了解Java的类的加载,可能看到这里会有个疑惑,直接New这个对象不就完了,为什么还需要反射?

那么首先我们都知道Java具有平台无关性,而之所以具有平台无关性,是因为Java会使用Javac编译,生成对应类的字节码,也就是.class文件,然后使用对应不同平台的JVM进行解析,转换成特定平台的执行指令。也就是说,我们每使用一个类,Java就会产生一个对应的Class对象。而生成这个class对象,会使用不同的类加载器进行加载。

关于类加载器,建议另外再详细学习一下。这里就不赘述了。我们这里只需要知道,从.java到.class这个过程。而如果我们现在有一个需求,现在我有A类以及B类,我想根据运行进行加载不同的类,那么这个时候,是不是就需要用到反射了。

反射的具体使用

创建测试类Student

public class Student{

private String name;

private String sex;

private int age;

}

创建Class对象

使用对象.getClass()获取

Student student=new Student();

Class class=student.getClass();

根据类名.class来获取

Class class=Student.class;

使用Class.forName()方法获取,其中参数必须为带包名的类路劲

Class class=Class.forName("com.scominfo.demo01.entity.Student");

第一种方法已经实例化对象了,再用反射没必要。第三种方法需要导入包路劲,不太方便,所以一般我们使用第二种方法。

使用反射

当我们获取到Class对象之后,就可以开始对其进行操作了。

获取公有构造方法

使用Class类中的getConstructors()方法获取到所有Public的构造方法列表、

Class studentClass = Class.forName("com.scominfo.demo01.entity.Student");

Constructor[] constructors = studentClass.getConstructors();

for (Constructor constructor : constructors) {

System.out.println(constructor);

}

查看打印结果如下:

public com.scominfo.demo01.entity.Student(java.lang.String,java.lang.String,int)

public com.scominfo.demo01.entity.Student()

获取全部构造方法

通过以上方法获取,我们发现没有找到private的构造函数。如果想要获取"public,protected,default,privite"的构造函数,则应该使用getDeclaredConstructors()方法。

Class studentClass = Class.forName("com.scominfo.demo01.entity.Student");

Constructor[] constructors = studentClass.getDeclaredConstructors();

for (Constructor constructor : constructors) {

System.out.println(constructor);

}

查看打印结果如下:

private com.scominfo.demo01.entity.Student(java.lang.String)

public com.scominfo.demo01.entity.Student(java.lang.String,java.lang.String,int)

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值