JAVA反射机制的学习
来源:互联网 发布:看图软件安卓版 编辑:程序博客网 时间:2024/05/27 16:43
1、反射的基本概念
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2、反射的基本功能
- 可以通过反射取得一个类的实例化对象。
- 可以通过反射取得类的结构
- 可以通过反射进行属性方法的调用
3、认识反射
正常情况下,一个类要想使用,则必须找到此类,之后通过此类产生实例化对象,必须先有类再有对象,那么如果现在要想通过一个对象找到其所在的类呢?在反射机制中Class类是一个操作的源头,所有的反射操作从此类展开,但是如果想要实例化此类对象可以通过以下三个途径完成:
- 通过Object类中的getClass方法: public final Class<?> getClass();
- 通过类.class的形式:Person.class
- 通过类的静态方法:public static calss<?> forName(StringclassName) throws ClassNotFoundException
最常用的是forName方法,其次是类class方法。在Class的使用中实例化对象是最常用的一种操作,而且日后所有的框架的各个程序的实现原理都是依靠Class类完成的。为了开发方便,一定在类中定义无参构造方法。
public class PersonClassDemo {//.class方法public static void main(String[] args) {Person p1=new Person();Class<Person> c=(Class<Person>) p1.getClass();System.out.println(c.getName());//返回对象为包名.person}}
public class PersonClassDemo3 {//验证forName方法public static void main(String[] args) {Class<?> c=null;try {c = Class.forName("prc.demo1.Person");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(c.getName());}}
4、通过反射实例化属性和方法
import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class getMethodsDemo1 {public static void main(String[] args)throws Exception {Class<?> c=Class.forName("prc.demo2.Person");System.out.println("------------取得类中所有普通方法名-----------");Method m[]=c.getMethods();for (int i = 0; i < m.length; i++) {System.out.println(m[i]);}System.out.println("------------取得类中所有接口-----------");Class<?> inter[]=c.getInterfaces();for (int i = 0; i < inter.length; i++) {System.out.println(inter[i].getName());}System.out.println("------------取得类中所有父类-----------");Class<?> sc=c.getSuperclass();System.out.println(sc.getName());System.out.println("------------取得类中所有构造器-----------");Constructor<?> con[]=c.getConstructors();for (int i = 0; i < con.length; i++) {int mod=con[i].getModifiers();String str=Modifier.toString(mod);Class<?>[] parm=con[i].getParameterTypes();System.out.print(str+" ");System.out.print(con[i].getName()+"(");for (int j = 0; j < parm.length; j++) {System.out.print(parm[j].getName()+","+"arg-"+j);}System.out.println(")");}System.out.println("------------取得返回值类型、异常、方法名-----------");for(int i=0;i<m.length;i++){String mod=Modifier.toString(m[i].getModifiers());//取得访问权限String metName=m[i].getName();//取得方法名Class<?> ret=m[i].getReturnType();//取得返回值类型Class<?> exc[]=m[i].getExceptionTypes();//取得全部异常Class<?> parm[]=m[i].getParameterTypes();System.out.print(mod+" ");System.out.print(ret+" ");System.out.print(metName+" ");for (int j = 0; j < parm.length; j++) {System.out.print(parm[j]+"arg-"+j);if(j<parm.length-1){System.out.print(",");}}}System.out.println("------------取得全部变量-----------");Field []f=c.getFields();//取得全部变量for (int i = 0; i < f.length; i++) {String mo=Modifier.toString(f[i].getModifiers());System.out.println(mo);System.out.println(f[i].getType().getName());}}}
0 0
- 学习Java的反射机制
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- Java反射机制的学习
- Java反射机制的学习
- JAVA反射机制的学习
- Java反射机制的学习
- Java反射机制的学习
- JAVA反射机制的学习
- java反射机制的学习
- JAVA反射机制的学习
- JAVA反射机制的学习
- 单点Haproxy负载tomcat安装配置
- PullToRefresh原理解析
- iOS开发之SMSSDK的简单运用
- 将数字转为大写的金额
- hive中order by,sort by, distribute by, cluster by作用以及用法
- JAVA反射机制的学习
- mongodb课程介绍
- selenium的窗口跳动
- viewpager的滑动事件总结(滑动在toolbar上显示页数,滑动到最后一页显示下载的dialog)
- Spark性能优化:shuffle调优
- instanceof 与isAssignableFrom
- SpringMVC 之@RequestBody 接收Json数组对象
- java 构造函数 求圆的面积
- Android ListView 设置分割线的设置