Java反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2242字,纯文字阅读大概需要4分钟。
内容图文
通过反射的方法设计应用程序,提高更好的扩展性。
获取字节码文件对象的方式:
1. 通过Object类中的getClass方法。
虽然通用,但是前提必须有指定类,并对该类进行对象的创建,才可以调用getClass方法。
2. 使用的任意数据类的一个静态成员class,所有的数据类型都具备的这一个属性。
好处:不用new对象。但是,还需要使用具体的类。
3. 使用Class类中的forName方法。通过给定类名来获取对应的字节码文件对象。
只要知道类的名字就可以了。获取对应的字节码文件直接由forName方法自动完成。
这就是反射技术使用的获取字节码文件对象的方式。
通过newInstance()就可以创建字节码对象所表示的类的实例。
通过new创建给定的类的实例。
调用该类的构造函数。
* 通常被反射的类都会有提供空参数的构造函数。
* 如果没有对应的构造函数,会报 InstantiationException
* 如果有提供,但是权限不够,会报 lllegalAccessException
Person p = new Person();
加载Person类,并将Person类封装成字节码文件对象。
通过new创建Person对象。
调用构造函数对对象初始化。
如果要通过指定的构造函数初始化对象怎么办呢?
1. 获取字节码文件对象。
2. 获取给定的构造函数。
3. 通过构造函数初始化对象。
public static void getConstructorDemo() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); //获取指定的构造器。获取Person类中两个参数string,int的构造函数。 Constructor cons = clazz.getConstructor(String.class,int.class); //有了构造器对象后,通过构造器对象来初始化给类对象。 Object obj = cons.newInstance("wangwu",23); //Person p = new Person("lisi",21); }
获取字段
public static void getFieldDemo() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String fieldName = "age"; //获取age字段对象。 // Field field = clazz.getField(fieldName);//获取是公共的字段。 Field field = clazz.getDeclaredField(fieldName); // getXXX:获取都是类中公共的成员。 // getDeclaredXXX:获取本类中已有的成员。 // System.out.println(field); //对其进行值的设置,必须先有对象。 Object obj = clazz.newInstance(); //通过查找父类AccessiableObject的方法。setAccessiable(true); field.setAccessible(true);//取消权限检查,暴力访问。一般不访问私有。 field.set(obj, 30);//IllegalAccessException:age字段是私有的。 System.out.println(field.get(obj)); }
获取方法
public static void getMethodDemo2() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String methodName = "staticShow"; Method method = clazz.getMethod(methodName, null); // 第1个参数后面都是 返回值类型 method.invoke(null, null); 对象设置为 null } publicstaticvoid getMethodDemo() throws Exception { String className = "cn.itcast.domain.Person"; Class clazz = Class.forName(className); String methodName = "show"; Method method = clazz.getMethod(methodName, String.class,int.class); Object obj = clazz.newInstance(); method.invoke(obj, "wangcai",20); 实例方法要手动传入 对象 }
原文:https://www.cnblogs.com/escapist/p/9060079.html
内容总结
以上是互联网集市为您收集整理的Java反射全部内容,希望文章能够帮你解决Java反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。