java高级反射_Java高级---反射机制

java反射 运行时,对于一个java类,能否知道这个类的属性和方法,能否动态调用它的方法,答案是肯定的。就是通过反射来完成。 首先看2个过程 1*.java----->*.class    编译过程 2*.class---->*.java     反编译过程 反射:反省机制,程序运行时,检查自身的属性和方法。 每个类在加载编译时,都会生成一个*.class类文件,都会有一个Class类与之对应;这个Class类保存了各个类的所有 详细信息,包括每个类的属性、方法和构造方法,通过反射,可以获取任意一个对象的  相关类信息, 几个主要的相关类 Class:保存各个类的所有信息 获得Class类对象三种方法 1、Class cls = Class.forName("包名.类名"); 2、Class cls = Student.class();[类名.class()] 3、Student stu = new Student();   Class cls = stu.getClass(); Field:属性 Class cls = Student.class(); Field[] field1= cls.getFields();//获得public属性 Field[] field = cls.getDeclaredFields();//获得所有的属性 Modifier:访问权限   Modifier.toString(f.getModifiers());//返回某个字段的  访问修饰符 //字段数组,保存从Student类中,获取到的所有属性 Field[] field = cls.getDeclaredFields(); for (Field f : field) { //输出每个属性,和对应的 访问权限 System.out.println(f.getName()+"\t"+Modifier.toString(f.getModifiers())); } Method:方法   Student stu = new Student();   Class cls = stu.getClass(); Method[] ms = cls.getDeclaredMethods();  //找出所有的(非构造)方法 //通过方法名"setAge"和方法参数类型Integer.class[是一个Class对象],找出具体方法,返回一个Method Method setMethod = cls.getDeclaredMethod("setAge", new Class>[]{int.class}); setMethod.invoke(stu,new Object[]{21});//动态调用类方法,相当于执行stu.setAge(21); Constructor:构造方法 Constructor[] cons = cls.getConstructors(); for (Constructor constructor : cons) { System.out.println(constructor);  //输出所有重载的构造方法 } Constructor> con = cls.getConstructor();//获得无参构造方法 Object newObject = con.newInstance();//通过无参构造方法,new一个实例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值