J2EE基础:反射

一、什么是反射呢?

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

二、类类

1、Class.forName(完整类名)

//1.Class.forName(),得到Student模板
Class<Student> stuClazz = (Class<Student>)Class.forName("com.zking.reflect.Student");

2、类名.Class

//2.Student.Class
Class<Student> stuClazz01 = Student.class;

3、对象.getClass()

//3.  对象.getClass()
		Student stu = new Student();
		Class<Student> stuClazz02 = (Class<Student>)stu.getClass();

三、反射实例化

1、getConstructor

Constructor<Student> stuCon = stuClazz.getConstructor(String.class);
		Student stu03 = stuCon.newInstance("li");
		System.out.println("stu03 = " + stu03.getSid());

2、getDeclaredConstructor

3、newInstance

//调用私有的构造函数
	Constructor<Student> stuCon05 = stuClazz.getDeclaredConstructor(Integer.class);
//打开私有方法的访问权限
	stuCon05.setAccessible(true);
	Student stu05 = stuCon05.newInstance(23);
	System.out.println("stu05 = " + stu05.age);

四、反射动态方法调用

1、getMethod

通过反射来获取Method:

//通过反射来获取Method
		Method method = stuClazz.getMethod("hello");
		Object obj = method.invoke(stu02);
		System.out.println(obj);

2、getDeclaredMethod

有返回值得情况,且是私有方法:

Method m03 = stuClazz.getDeclaredMethod("add", Integer.class,Integer.class);
		m03.setAccessible(true);//打开访问权限
		int sum = (int)m03.invoke(stu02, 3 ,3);
		System.out.println(sum);

五、反射读写属性

动态的获取属性的值:

        Field f = stuClazz.getField("age");
        int age = (int)f.get(stu02);
        System.out.println(age);

1、getDeclaredField

获取私有的属性:

//获取私有的属性
		Field f02 = stuClazz.getDeclaredField("sname");
		f02.setAccessible(true);
		String name = (String)f02.get(stu02);
		System.out.println(name);

2、getDeclaredFields

Field[] fs = stuClazz.getDeclaredFields();
		for(Field f04 : fs) {
			f04.setAccessible(true);
			System.out.println(f04.getName()+": "+f04.get(stu02));
		}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值