[Java]反射机制及构造对象
来源:互联网 发布:汽车最新导航软件 编辑:程序博客网 时间:2024/06/06 09:01
测试代码
package main;import java.lang.annotation.Annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import bean.Animal;public class TestMain { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub showClass(); System.out.println("//////////////////////////////////////////////////////////"); System.out.println("使用一个参数的构造器..."); System.out.println(createAnimalByConstructor("bean.Cat", "Mr Cat")); System.out.println(createAnimalByConstructor("bean.Dog", "Mr dog")); System.out.println("使用两个参数的构造器..."); System.out.println(createAnimalByConstructor("bean.Cat", "Mr Cat",18)); System.out.println(createAnimalByConstructor("bean.Dog", "Mr dog",20)); System.out.println("使用method反射构造对象..."); System.out.println(createAnimalByMethod("bean.Bird","setAge", new Object[]{30})); System.out.println(createAnimalByMethod("bean.Bird","setNameAndAge", new Object[]{"小燕子",30})); } public static Animal createAnimalByConstructor(String clazzStr,String name) throws Exception{ Class clazz = Class.forName(clazzStr); Constructor constructor = clazz.getConstructor(name.getClass()); Animal animal = (Animal)constructor.newInstance(name); return animal; } public static Animal createAnimalByConstructor(String clazzStr,String name,Integer age) throws Exception{ Class clazz = Class.forName(clazzStr); Constructor constructor = clazz.getConstructor(new Class[]{name.getClass(),age.getClass()}); Animal animal = (Animal)constructor.newInstance(name,age); return animal; } public static Object createAnimalByMethod(String clazzStr,String methodName,Object[] args) throws Exception{ Class clazz = Class.forName(clazzStr); Object object = clazz.newInstance(); Class[] classes = new Class[args.length]; for(int i=0;i<args.length;i++){ classes[i] = args[i].getClass(); } Method method = clazz.getMethod(methodName, classes); method.invoke(object, args); return object; } public static void showClass() throws ClassNotFoundException{ Class clazz = Class.forName("bean.Cat"); System.out.println(clazz); Annotation[] annotations = clazz.getAnnotations(); System.out.println("Annotation..."); for(Annotation annotation:annotations){ System.out.println(annotation.toString()+" : "+annotation.annotationType()); } Constructor[] constructors = clazz.getConstructors(); System.out.println("*********************************"); System.out.println("Constructor..."); for(Constructor constructor:constructors){ System.out.println("--------------------------------"); System.out.println(constructor.getName()); System.out.println(constructor.getModifiers()); Class[] parameterClasses = constructor.getParameterTypes(); System.out.println("getParameterTypes..."); for(Class parameterClass:parameterClasses){ System.out.println(parameterClass.getName()); } System.out.println(constructor.getTypeParameters()); } System.out.println("*********************************"); System.out.println("getDeclaredClasses..."); Class[] declaredClasses = clazz.getDeclaredClasses(); for(Class declaredClass:declaredClasses){ System.out.println(declaredClass.getName()+" : "+declaredClass.getSimpleName()); } System.out.println("*********************************"); System.out.println("getDeclaredFields..."); Field[] fields = clazz.getDeclaredFields(); for(Field field:fields){ System.out.println(field.getName()+" : "+field.getType().getName()); } System.out.println("*********************************"); System.out.println("getFields..."); fields = clazz.getFields(); for(Field field:fields){ System.out.println(field.getName()+" : "+field.getType().getName()); } System.out.println("*********************************"); System.out.println("getSuperclass: "+clazz.getSuperclass().getName()); System.out.println("*********************************"); System.out.println("getDeclaredMethods..."); Method[] methods = clazz.getDeclaredMethods(); for(Method method:methods){ System.out.println("---------------------------"); System.out.println(method.getName()); Class[] parameters = method.getParameterTypes(); for(Class parameterClass:parameters){ System.out.println(parameterClass.getName()+" : "+parameterClass.getSimpleName()); } } }}
测试结果
class bean.CatAnnotation...*********************************Constructor...--------------------------------bean.Cat1getParameterTypes...java.lang.String[Ljava.lang.reflect.TypeVariable;@ae3865e--------------------------------bean.Cat1getParameterTypes...java.lang.Stringjava.lang.Integer[Ljava.lang.reflect.TypeVariable;@5f8a8ae7*********************************getDeclaredClasses...*********************************getDeclaredFields...age : java.lang.Integer*********************************getFields...*********************************getSuperclass: bean.Animal*********************************getDeclaredMethods...---------------------------toString---------------------------setAgejava.lang.Integer : Integer---------------------------getAge---------------------------eatjava.lang.String : String---------------------------eat//////////////////////////////////////////////////////////使用一个参数的构造器...Cat [age=null, toString()=Animal [name=Mr Cat]]Dog [age=null, toString()=Animal [name=Mr dog]]使用两个参数的构造器...Cat [age=18, toString()=Animal [name=Mr Cat]]Dog [age=20, toString()=Animal [name=Mr dog]]使用method反射构造对象...Bird [name=null, age=30]Bird [name=小燕子, age=30]
0 0
- [Java]反射机制及构造对象
- Java反射机制概念及构造方法的反射
- java反射机制-通过无参构造实例化对象
- 通过Java反射机制构造类的对象
- [java]反射机制给属性使用set方法构造对象
- Java反射机制创建对象
- java反射机制创建对象
- java反射机制生成对象
- Java反射机制创建对象
- Java反射机制创建对象
- Java反射机制创建对象
- JAVA反射机制创建对象
- 反射 创建对象及访问构造方法
- JAVA 采用反射机制 获取构造方法
- Java通过反射机制使用非默认构造器创建对象
- java反射机制——通过无参构造实例化对象
- Java反射机制及应用
- Java反射机制及实例
- 不传递数据,而是生产数据;不使用个人终端,而是共享服务接口
- MFC Picture Control显示OpenCV图像
- Oracle DBMS_LOCK
- Android Gems — Fragment本质之View管理
- 12.06
- [Java]反射机制及构造对象
- Android中使用Notification实现普通通知栏(Notification示例一)
- 统计_数据的概括性度量
- PAT乙级 1017. A除以B (20)
- Toolbar 关联 DrawerLayout (抽屉菜单)
- PHP 自定义错误机制
- JPA 菜鸟教程 3 单向多对一
- 归纳笔记023:流媒体的理论与HLS框架
- 网络扫描技术揭秘学习笔记《一》TCP/IP协议编程