java反射

反射的基本作用
在运行时获得类的字节码文件对象,并且可以解析类的构造器、成员变量、方法

反射的核心思想和关键
得到编译以后的class文件

1、获取class对象

public class Test {
    public static void main(String[] args) throws Exception {
        //1 、Class 中的一个静态方法 forname("包名+类名")
        Class c = Class.forName("com.tyz.Student");
        System.out.println(c);

        //2、类名.class
        Class c1 = Student.class;
        System.out.println(c1);

        //3、对象.getclass()
        Class c2 = new Student().getClass();
        System.out.println(c2);
    }
}

2.1、获取构造器

//1、通过类对象.getConstructors()==》获取public修饰的构造器数组
	Constructor[] constructors = c.getConstructors();
	for (Constructor constructor : constructors) {
		System.out.println(constructor);
	}
//2、通过类对象.getConstructor==》获取public修饰的构造器
	Constructor constructor = c.getConstructor(String.class,int.class);
	System.out.println(constructor);

//3、通过类对象.getDeclaredConstructor==》获取构造器
	Constructor constructor = c.getDeclaredConstructor(String.class,int.class);
	System.out.println(constructor);
	
//4、通过类对象.getDeclaredConstructors==》获取构造器数组
	Constructor[] constructors = c.getDeclaredConstructors();
	for (Constructor constructor : constructors) {
		System.out.println(constructor);
	}
	

2.2、调用构造器

//构造器.newInstance();
Constructor constructor = c.getDeclaredConstructor(String.class,int.class);
Student s = (Student) constructor.newInstance("黎明",22);
constructor.setAccessible(true);//可访问权限转public(1次),破坏了封装性

3、获取成员变量

//1、类对象.getDeclaredFields获取成员变量数组
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
	System.out.println(field.getName());
	System.out.println(field.getType());
	}
	
//2、类对象.getDeclaredField获取指定的成员变量
Field age = c.getDeclaredField("age");
System.out.println(age);

//3、为成员变量赋值
age.setAccessible(true);
age.set(student,33);
System.out.println(student);

//4、取值
age.get(student);

4、获取方法对象

Method method = c.getDeclaredMethod("getName");
System.out.println(method.getName() + method.getReturnType() + method .getParameterCount());
method.invoke(s);//调用该方法invoke

Method[] methods = c.getDeclaredMethods();
for (Method method1 : methods) {
	System.out.println("方法名:"+method1.getName() + "返回值类型:"+method1.getReturnType() +" 参数个数"+method1.getParameterCount());
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值