Java反射

java反射的基本概念

反射非常非常重要的一点是可以将方法的名称和参数,以变量的形式传递,比如从网页上读,从数据库读,从文件里读,传什么方法名我就可以动态的调用方法,这就是反射的好处,但是反射会让运行速度降低。
但是我们可以通过setAccessible方法来关闭安全检查,以提高一些效率。关闭安全检查之后,无视类中所有成员的权限修饰符,都当作public来处理。
在学习完反射之后在学习框架会容易理解很多,你会在框架中见到大量用反射来创造对象的代码。
一般代码:启用安全检查的反射代码:关闭安全检查的代码
他们的运行速度比大约是1:30:8
下面的代码是Class的一些基本操作
在这里插入图片描述在这里插入图片描述 package reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test {
@SuppressWarnings("all")
public static void main(String[] args) {
	try {
		Class<STudents> clazz = (Class<STudents>)Class.forName("reflection.STudents");
		/* 通过Class对象来查看类内部的所有信息*/
		/*Field f=  clazz.getDeclaredField("sex");//获取类属性
		Method m = clazz.getMethod("setNum",int.class);//获取类的所有public方法
		Constructor c =	clazz.getConstructor(int.class,String.class,boolean.class);
		//获取类得所有public构造器
		System.out.println(c);*/
		
		
		/*调用该类的无参构造来创造对象*/
		/* STudents s1 = clazz.newInstance();
		 System.out.println(s1);*/
		
		
		/*调用该类的有参构造器来创造对象*/
		/*Constructor f = clazz.getDeclaredConstructor(int.class,String.class,boolean.class);
		 * //获取有参构造器
		STudents s1= (STudents) f.newInstance(5,"张三",false); //用有参构造器创造对象 返回 该类的实例
		System.out.println(s1.getName());//输出该实例的名字*/
			
		
		/*通过反射API来调用普通方法 */
		/*clazz.newInstance().setNum(4); 这不是通过反射调用*/
		//首先通过Class对象来获取到该类的成员方法
		/*STudents s =clazz.newInstance();
		Method m = clazz.getDeclaredMethod("setName", String.class);//获得该类setName方法
		m.invoke(s,"lisi");
		System.out.println(s.getName());*/
		/*重点:通过上述的例子 可以看出  方法名称和参数都变成了变量  ,
		 这样我们就可以将方法名和对象变成参数 从外界传递进来 ,这就是反射的好处*/
		
		
		/*通过反射API调用成员变量*/
		/*STudents s4 = clazz.newInstance();
		Field f = clazz.getDeclaredField("num");
		f.setAccessible(true);//可以跳过私有检查 直接赋值 ,私有方法也用这个方法,并不是false时就不能访问
		f.set(s4, 2);//因为属性是私有的 所以直接赋值会报错 1
		System.out.println(s4.getNum());*/
		
		
		

		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

}
`

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值