`

测试java反射机制2

阅读更多

首先写一个类

public class MyObject {
public int a;
public int b;

public MyObject() {
}
private MyObject(int a) {

}
public MyObject(int a, int b) {
this.a = a;
this.b = b;
}
public int sum(){
return a+b;
}
public int minus(){
return a-b;
}
public int multiply(){
return a*b;
}
public int divide(){
return a/b;
}
public void voidGet(){

}
public int divide(int c,int d){
return c/d;
}

}

测试如下

//获取类
System.out.println("--------获取类-------------------------");
Class cls=Class.forName("reflect.MyObject");
System.out.println(cls);
System.out.println(MyObject.class);
System.out.println(cls.getClass());
//测试获取类的方法
Method []method=cls.getDeclaredMethods();
for(int i=0;i<method.length;i++){
Method m=method[i];
Class pclass[]=m.getParameterTypes();
System.out.println("参数个数:"+pclass.length);
for(int j=0;j<pclass.length;j++){
System.out.println("参数:"+pclass[j].toString());
}

System.out.println("方法名:"+m.getName());
System.out.println("修饰符:"+m.getModifiers());
System.out.println("返回值:"+m.getReturnType());
}
//取得类的构造函数
System.out.println("--------取得类的构造函数-------------------------");
Constructor cor[]=cls.getDeclaredConstructors();
for(int i=0;i<cor.length;i++){
Constructor co=cor[i];
System.out.println("方法名:"+co.getName());
System.out.println("修饰符:"+co.getModifiers());
//参数列表
Class params[]=co.getParameterTypes();
for(int j=0;j<params.length;j++){
System.out.println("参数:"+params[j].toString());
}
}
//测试获取字段
System.out.println("--------测试获取字段-------------------------");
Field []field=cls.getDeclaredFields();
for(int i=0;i<field.length;i++){
Field m=field[i];
System.out.println("变量名:"+m.getName());
System.out.println("修饰符:"+m.getModifiers());
System.out.println("变量类型:"+m.getType());
}

//参数类型
Class ptype[]=new Class[2];
ptype[0]=int.class;
ptype[1]=int.class;
try {
Constructor corr=cls.getConstructor(ptype);
try {
Object obj=corr.newInstance(6,3);

//改变字段的值
try {
Field fielda=cls.getField("a");
System.out.println("改变前:a="+fielda.get(obj));
fielda.set(obj, 100);
System.out.println("改变后:a="+fielda.get(obj));
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//执行方法
Method me=cls.getMethod("sum");
Object returnvalue=me.invoke(obj);
System.out.println("加="+returnvalue);
me=cls.getMethod("minus");
returnvalue=me.invoke(obj);
System.out.println("减="+returnvalue);
me=cls.getMethod("multiply");
returnvalue=me.invoke(obj);
System.out.println("乘="+returnvalue);
me=cls.getMethod("divide");
returnvalue=me.invoke(obj);
System.out.println("除="+returnvalue);
me=cls.getMethod("voidGet");
returnvalue=me.invoke(obj);
System.out.println("无返回值="+returnvalue);
me=cls.getMethod("divide",new Class[]{int.class,int.class});
returnvalue=me.invoke(obj,new Integer[]{6,3});
System.out.println("有参数的私有="+returnvalue);

//数组
Class str=Class.forName("java.lang.String");
Object arr=Array.newInstance(str, 10);
Array.set(arr, 5, "this is a test ");
Array.set(arr, 0, "this is a test ");
String str5=(String)Array.get(arr, 5);
String str0=(String)Array.get(arr, 0);
//String str10=(String)Array.get(arr, 10);//数组越界
System.out.println("数组元素="+str5);
System.out.println("数组元素="+str0);
//System.out.println("数组元素="+str10);

} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//调用默认构造函数
corr=cls.getConstructor();
try {
Object obj1=corr.newInstance();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}




} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



测试结果如下:




--------获取类-------------------------
class reflect.MyObject
class reflect.MyObject
class java.lang.Class
参数个数:0
方法名:sum
修饰符:1
返回值:int
参数个数:0
方法名:minus
修饰符:1
返回值:int
参数个数:0
方法名:voidGet
修饰符:1
返回值:void
参数个数:2
参数:int
参数:int
方法名:divide
修饰符:1
返回值:int
参数个数:0
方法名:divide
修饰符:1
返回值:int
参数个数:0
方法名:multiply
修饰符:1
返回值:int
--------取得类的构造函数-------------------------
方法名:reflect.MyObject
修饰符:1
方法名:reflect.MyObject
修饰符:1
参数:int
参数:int
方法名:reflect.MyObject
修饰符:2
参数:int
--------测试获取字段-------------------------
变量名:a
修饰符:1
变量类型:int
变量名:b
修饰符:1
变量类型:int
改变前:a=6
改变后:a=100
加=103
减=97
乘=300
除=33
无返回值=null
有参数的私有=2
数组元素=this is a test
数组元素=this is a test

分享到:
评论

相关推荐

    JAVA反射机制自定义框架测试代码

    JAVA反射机制自定义框架测试代码,留着以后复习用!

    java反射机制测试代码

    java反射机制测试代码 反射获取private类型的属性,方法,构造器 利用反射,多态实现动态编译

    Java反射机制测试Demo

    学习反射机制时候,编写的Demo.代码写的有点乱,具体可以大家自己琢磨下,其中包括Excel的操作Jar包

    在android中利用JAVA反射机制终止通话

    一、《在android中利用JAVA反射机制终止通话》:http://www.mydreamsky.tk/?p=874 二、《Android 电话的反射调用机制实现静默接听电话》:http://blog.csdn.net/zengyangtech/article/details/6198355 源码在...

    java反射工具类

    java的泛型和反射机制一直很难理解和应用,这个程序是关于反射和泛型的综合使用,主要实现获取一个类的属性名和方法,并可以获取属性值,存取属性值,属性名和属性值的字符串方式输出。只是个工具类,没有写测试类,...

    利用Java反射实现万能DAO

    利用Java的反射机制实现的万能DAO工具类,包含对应的测试代码。具体功能包括:单表查询,多表查询,模糊查询,添加,修改,删除等。利用万能DAO可以对数据库中...阅读本代码需要掌握Java反射机制以及数据库DAO类基础。

    编写计算器类,实现加法、减法操作,使用JAVA反射机制动态调用计算器对象的加法,减法函数

    编写计算器类,实现加法、减法操作 使用JAVA反射机制动态调用计算器对象的加法,减法函数

    Reflect:java反射机制的测试和ppt

    Reflectjava反射机制的测试和ppt

    反射机制例子及反射方法调用

    反射机制例子及反射方法调用,自己写的一个测试例子。 例子实现了通过字符串指定类名,并调用类的方法

    java规则引擎及反射实例

    Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套...反射机制是如今很多流行框架的实现基础,其中包括Spring、Hibernate等。原理性的问题不是本文的重点,接下来让我们在实例中学习这套精彩的机制。

    人力资源-面试-java

    Java基础、Java语法、Java集合框架、Java泛型、Java异常处理、Java多线程、Java网络编程、Java数据库编程、Java反射机制、Java设计模式、Java Spring框架、Java Spring Boot、Java MyBatis框架、Java Hibernate框架...

    Java编程题自动评分技术的研究与实现_郑燕娥.caj

    本文融合了程序查错及局部纠错技术、基于反射机制的黑盒测试技术、知 识要点的正则表达式匹配评分技术等关键技术,实现了Java编程题自动评分技 术及原型系统。评分方式兼顾了可执行代码的动态测试与源程序的静态分析...

    Java开发技术大全(500个源代码).

    代码范例列表 第1章 ... useArray2.java 用反射机制使用数组示例2 第10章 示例描述:本章学习泛型。 demoBounds.java 演示有界类型 demoForceChange.java 演示强制类型转换 demoGeneric.java ...

    Java 反射佳实践

    本文的示例代码主要是基于jOOR行编写的,如果想了解更多请查看这里的测试代码。  一、需求  一个“懒”程序员突然跑过来说:“反射好麻烦,我要提点需求。”  听到这句话后我知道,一定不好过了,奇葩需求又...

    PHP中的reflection反射机制测试例子

    Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php...

    用Java实现的数据结构暨算法,同时对其进行了测试.zip

    动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...

    Junit、反射、注解

    Junit是一个Java语言的单元测试框架,简单...反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的方法,属性,构造方法等成员。 注解相当一种标记,是类的组成部分,可以给类携带一些额外的信息。

    PHP实现依赖注入-使用反射机制和动态代理技术

    现在我还不会使用XML文件的...这段代码我测试过还比较好用吧。 不过我认为还是用很多不合理的地方,和一些bug存在。 这个我会在以后慢慢修改。也请大家给与指点。 笔者:咋个办呢 QQ:285207813 date:2009-12-19

    达内java培训目录

    JavaSE核心 异常处理、多线程基础、IO系统、网络编程、Java反射机制、JVM性能调优(JVM内存结构剖析、GC分析及调优、JVM内存参数优化)、Java泛型、JDK新特性 熟练掌握JavaSE核心内容,特别是IO和多线程;...

Global site tag (gtag.js) - Google Analytics