版权声明:学习之路,任重道远 https://blog.csdn.net/weixin_43359405/article/details/83349882
反射实战:新建Student类,利用反射原理输出Student的构造方法,属性,普通方法,参数列表等等信息。
反射资料:查询java_API之:java.lang.reflect包下。
Student类:
package com.briup.ch24;
public class Student
{
private String name;
private int age;
public Student(){
}
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public static void test(){
System.out.println("hello test");
}
}
ReflectTest类:
package com.briup.ch24;
import java.lang.reflect.*;
public class ReflectTest
{
public static void main(String... args) throws Exception{
//1.获取类镜像
Class clz=Class.forName("com.briup.ch24.Student");
//2.获取该类中所有的属性
Field[] f=clz.getDeclaredFields();
for(Field temp:f){
//获取属性的数据类型
Class c=temp.getType();
//获取属性的名字
String name=temp.getName();
//获取属性修饰符
int m=temp.getModifiers();
System.out.println("属性:"+c+" 名字:"+name+" 修饰符:"+m);
}
//3.获取该类中方法
Method[] method=clz.getDeclaredMethods();
for(Method temp:method){
//获取方法名
String name=temp.getName();
//获取返回值类型
Class r=temp.getReturnType();
//获取方法的修饰符
int m=temp.getModifiers();
//获取参数列表类型
Class[] c=temp.getParameterTypes();
String str="";
for(Class t:c){
str = str + " " + t;
}
System.out.println("方法名:"+name+" 返回类型:"+r+" 修饰符:"+m+" 参数列表:"+str);
}
//4.获取所有构造器
Constructor[] cst= clz.getDeclaredConstructors();
for(Constructor cstt:cst){
//获取构造器名字
String name=cstt.getName();
//获取构造器的修饰符
int m=cstt.getModifiers();
//获取构造器的参数列表
Class[] c=cstt.getParameterTypes();
String str="";
for(Class t:c){
str = str + " " + t;
}
System.out.println("构造器名字:"+name+" 构造器修饰符:"+ m +" 参数列表:"+str);
}
}
}
运行结果: