反射Class的基础笔记讲解

什么是反射:

反射机制就是在程序运行过程中,可以构造任意一个类对象,可以了解任 意一个对象所属的类,可以了解任意一个类的成员变量方法,可以调用任意一个对象的属性方法。 这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。

反射的核心就是:获得编译后的Class文件对象

反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方 法

初步了解反射

java.lang.reflect 包提供了反射中用到的类,主要类如下

Counstructor :提供类的构造方法信息。

Filed :提供类或接口中的成员变量信息。

Method :提供类或接口的成员方法信息。

Array :提供了动态创建和访问Java数组的方法。

Modifier :提供类和成员访问修饰符信息。

1. 获取类对象的三种方法

//1:或取Class对象
//1未被编译的源码阶段
Class a=Class.forName("Reflection.Student");
System.out.println(a);
//2内存阶段编译后的class文件
Class b=Student.class;
System.out.println(b);
//3对象阶段
Student c=new Student();
Class d=c.getClass();
System.out.println(d);

2. Counstructor获取构造器对象

1:获取全部的构造器对象(public权限)

Class a=Student.class;

Counstructor[] cons=a.getConstructors();

遍历Constructor对象数组

for(Constructor  con:cons)

{

System.out.println(c.getName());

}

2:获取全部的构造器对象(任何权限都可以)

Counstructor[] cons=a.getDeclaredConstructors();

3:获取指定的构造器对象

根据构造方法中的参数确定构造方法

Constructor c = a.getDeclaredConstructor(int.class,String.class);

4:获取构造器对象的意义

对对象进行初始化,采用newInstance()方法

Constructor c = a.getDeclaredConstructor(int.class,String.class);
Student student=(Student) c.newInstance(1,"张三");
System.out.println(student);

3. Field获取成员变量信息

1:获取全部的成员变量信息(public)

Class a=Student.class;

Field fields=a.getFileds();

2:获取全部的成员变量信息(任何权限)

Field[] fields=a.getDeclaredFields();

3:获取指定的成员变量信息

Field field=getField("变量名·")//(public)

Field field=getDeclaredField("变量名") //任何权限

4:获取成员变量的意义

//赋值
//成员变量不是public所以要暴力反射
field.setAccessible(true);
Student s=new Student();
//成员变量对象.set(对象,赋值)
field.set(s,"张三");
System.out.println(s);
//取值
//.get()返回的是一个Object对象
String name=(String)field.get(s);
System.out.println(name);

4. Method获取成员方法信息

1:获取全部的成员方法对象

Class a=Student.class;

Method[] methods=a.getDelcaredMethods();

2:获取指定的成员方法对象

Method m1=a.getDeclaredMethod("speak");speak
Method m2=a.getDeclaredMethod("speak",String.class);

3:获取成员方法信息的意义

//触发方法执行.invoke();
Student d=new Student();
Object result=m1.invoke(d);
System.out.println(result);
m2.setAccessible(true);
Object result2=m2.invoke(d,"英语");
System.out.println(result2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值