通过一个实例让你快速学习java反射
来源:互联网 发布:python 日志文件 编辑:程序博客网 时间:2024/06/03 20:48
什么是反射?
反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。
通俗的讲就是反射可以在运行时根据指定的类名获得类的信息。
也许你看完java反射的解释之后还是一头雾水,不要急,我们通过一个实例来让你了解java反射的作用,实践才是检验真理的唯一标准。
首先我们需要知道java反射大部分是需要Class这个类来完成,这里我给出经常使用的Class的方法,想了解更多的可以去查看jdk Api。
通过类的全限定名来获取类的信息,还原该类的字段和方法等声明和定义。
测试需要的类
package com.zhu.test;class Animal{}interface A{}interface B{}public class Dog extends Animal implements A,B{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
public static void main(String[] args) throws ClassNotFoundException { StringBuffer sb=new StringBuffer(); //-------------------获取类信息------------------------------------------ Class c=Class.forName("com.zhu.test.Dog"); //通过Modifier的toString方法获取类的修饰符 String modifier=Modifier.toString(c.getModifiers()); sb.append(modifier+" class"); sb.append(" "+c.getSimpleName()); //获取该类继承的类 Class superClass=c.getSuperclass(); c.getGenericSuperclass(); //判断该类是否有父类(除了Object) if(!superClass.getSimpleName().equals("Object")){ sb.append(" extends "+superClass.getSimpleName()); } //获取该类实现的接口 Class[] interfaces=c.getInterfaces(); if(interfaces!=null){ sb.append(" implements "); for(int i=0;i<interfaces.length;i++){ Class cl=interfaces[i]; sb.append( cl.getSimpleName()); if(i!=interfaces.length-1){ sb.append(","); } } } sb.append("{\n"); //-------------------获取字段信息------------------------------------------ Field[] fields=c.getDeclaredFields(); for(Field field:fields){ String s=Modifier.toString(field.getModifiers()); sb.append(s); sb.append(" "); String fieldType=field.getType().getSimpleName(); sb.append(fieldType); sb.append(" "); String fieldName=field.getName(); sb.append(fieldName); sb.append("\n"); } //-------------------获取方法信息------------------------------------------ Method [] methods=c.getDeclaredMethods(); for(Method m:methods){ //获取方法修饰符 String methodModifier=Modifier.toString(m.getModifiers()); sb.append(methodModifier); sb.append(" "); //获取方法返回值 String returnType=m.getReturnType().getSimpleName(); sb.append(returnType); sb.append(" "); sb.append(m.getName()); sb.append("("); //获取方法参数信息 Class[]params=m.getParameterTypes(); for(int i=0;i<params.length;i++){ Class clas=params[i]; sb.append(clas.getSimpleName()); sb.append(" "); sb.append("arg"+i); if(i!=params.length-1){ sb.append(","); } } sb.append(");"); sb.append("\n"); } sb.append("}"); System.out.println(sb.toString()); }
输出结果
由此可看出java反射的强大。
阅读全文
0 0
- 通过一个实例让你快速学习java反射
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- (转) 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- 一个例子让你了解Java反射机制
- Java虚拟机内存分布与介绍
- VS控制台程序Socket通讯
- golang命令行库cobra的使用
- 非规范的maven项目打包路径指定
- HDU1037
- 通过一个实例让你快速学习java反射
- C语言实现cp -r --parents拷贝文件和文件夹
- STL数据结构小结
- HDU1040
- JDBC的操作步骤
- maven打包时 junit.framework不存在
- Python迭代工具
- PHP和OneNet平台交互
- C++复习第一天 C++基本概念