反射与其方法属性

学习思维导图:

1.什么是反射

反射java语言中的一种机制,通过这种机制可以动态的实例化对象、读写属性、调用方法

2.类类

①Class.forName(完整类名)

第一种写法:

第二种写法:

②类名.Class

通用查询

③对象.getClass()

通用增删改

3.反射实例化

 

①getConstructor

只能获取到公用的构造器

报错:没有匹配的方法

 

②getDeclaredConstyuctor

可以获取到私有的构造器以及公用的构造器

报错:没有访问权限

正确写法:

 

③newInstance

反射调用有参构造器:

括号里填的是你将要调的构造方法里面的参数的类型

4.反射动态方法的调用

①getMethod

②getDeclaredMethod

 

invoke 参数1:类实例,在这里指的是Student类实例

参数2:当前被调用的方法,传递的参数值

Invoke的返回值,就是被反射调用的方法的返回值,如果被调用的方法是void,那么返回null

 

报错:方法未找到

 

正确写法:

 

完整代码:

public class Demo3 {
	public static void main(String[] args) throws Exception {
		Class<Student> stuClz1=(Class<Student>)Class.forName("com.zhuwei.reflect.Student");
		Student s=stuClz1.newInstance();
		Method m1 = stuClz1.getMethod("hello");
		System.out.println(m1.invoke(s));
		
		Method m2 = stuClz1.getDeclaredMethod("hello",String.class);
		System.out.println(m2.invoke(s,"张三"));
		
		Method m3 = stuClz1.getDeclaredMethod("add",Integer.class,Integer.class);
		m3.setAccessible(true);
		System.out.println(m3.invoke(s,10,5));
		
	}

}

5.反射读写属性

①getDeclaredFiled

报错:

正确写法:

public class Demo4 {
	public static void main(String[] args) throws Exception {
		Class<?> stuClz1 = Class.forName("com.zhuwei.reflect.Student");
		Student s=(Student) stuClz1.newInstance();
		Field f = stuClz1.getDeclaredField("sname");
		f.setAccessible(true);
		f.set(s, "张三");
		System.out.println(s.getSname());
		System.out.println(f.get(s));
	}

}

反射写属性:        

反射读属性:        

②getDeclaredFileds

 比较oop与反射读取属性值的方式

 反射获取该对象所有属性值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值