JAVA反射笔记(一)

Java反射机制

Java反射机制是在运行状态中对于任意一个类都能获取到它的属性和方法。这种动态获取信息以及动态调用对象的方法的功能称为Java语言的反射机制,想要使用反射就必选获取到字节码文件。

类加载进内存的时机

1.创建类的实例
2.访问类的静态变量,或者为静态变量赋值
3.调用类的静态方法
4.初始化某个类的子类
5.使用反射来强制创建某个类或者接口的class对象

Person类

public class Person {
	public String name;
	Integer age;
	private String gender;
	public Person() {
		super();
		System.out.println("这是无参构造");
	}
	public Person(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
		System.out.println("有参构造");
	}
	
	public void show(){
		System.out.println("我是"+this.name+"年龄"+this.age);
	}
	
	public void eat(String str){
		System.out.println("我今天吃了"+str);
	}
	
	public static void main(String[] args) {
		char s='中';
		System.out.println((int)s);
	}
}

一.获取字节码的三种方式

//1.通过使用Class.forName()方法
 Class<?> clazz1 = Class.forName("com.ecit.testClass.Person");
//2.通过class静态属性
Class clazz2 = Person.class;
//3.通过对象的getclass方法
Person p1 = new Person();
Class<?> clazz3 = p1.getClass();

二.通过字节码创建对象

//1.获取无参构造器
Person p11 = (Person)clazz1.newInstance();
//2.获取带参构造器
Constructor c = clazz1.getConstructor(String.class,Integer.class);
Person p2 = (Person)c.newInstance("张三",21);
System.out.print("获得有参构造调用show()方法:");
p2.show();

三.通过字节码获取字段

//1.获取公有字段
Field f = clazz1.getField("name");
f.set(p2, "李四");
System.out.print("获得公有字段并修改name:");
p2.show();
//2.获取私有字段
Field f2 = clazz1.getDeclaredField("age");
f2.setAccessible(true);
f2.set(p2, 22);
System.out.print("获得公有字段并修改age:");
p2.show();

四.通过字节码获取方法

//1.获取公有方法
Method m1 = clazz1.getMethod("show");
System.out.println("获得的公有方法名字是:"+m1.getName());
System.out.print("获得公有方法show()并调用:");
m1.invoke(p2);//调用p2对象中的show方法
//2.获取私有方法
Method m2 = clazz1.getDeclaredMethod("eat", String.class);
m2.setAccessible(true);
System.out.print("获得获得私有方法eat()并调用:");
m2.invoke(p2,"米饭");

运行结果

这是无参构造
这是无参构造
有参构造
获得有参构造调用show()方法:我是张三年龄21
获得公有字段并修改name:我是李四年龄21
获得公有字段并修改age:我是李四年龄22
获得的公有方法名字是:show
获得公有方法show()并调用:我是李四年龄22
获得获得私有方法eat()并调用:我今天吃了米饭

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值