`

测试java反射机制1

阅读更多
先定义一个Test类

public interface TestInterface {

public void say();


}


public  class subTest {

private int field0=50;
public  int field5=150;
protected  int field6=450;


public subTest() {

}
public subTest(String a) {

}
public void getField0(){
System.out.println("getField0");
}

private void getField5(){
System.out.println("getField5");
}
}

public class Test extends subTest implements TestInterface {

private int field1=100;

public int field2=200;

protected int field3=300;

int field4=400;

@Override
public void say() {
System.out.println("hello  saypublic");

}

public Test() {

// TODO Auto-generated constructor stub
}
private Test(String a) {

// TODO Auto-generated constructor stub
}
protected Test(int a,int b) {
System.out.println("a+b="+(a+b));
// TODO Auto-generated constructor stub
}
public Test(int f1) {
field1=f1;
// TODO Auto-generated constructor stub
System.out.println("f1="+f1);
}

protected void sayprotected(int a,int b) {
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("hello sayprotected");

}

private void sayprivate(){
System.out.println("sayprivate");
}

}

接是写一个测试mian方法

public class TestReflect {

/**
* @param args
* @throws NoSuchFieldException
* @throws SecurityException
*/
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
// TODO Auto-generated method stub
try {
Class obj=Class.forName("reflect.Test");
Test test=(Test)obj.newInstance();
System.out.println(test.getClass().getClassLoader());
System.out.println(test.getClass().getInterfaces());
System.out.println(test.getClass().getConstructors());
//指定本身定义的字段(包括私有和共有)
System.out.println("-------指定本身定义的字段(包括私有和共有)----------");
System.out.println(test.getClass().getDeclaredField("field1"));//可以
System.out.println(test.getClass().getDeclaredField("field2"));//可以
System.out.println(test.getClass().getDeclaredField("field3"));//可以
System.out.println(test.getClass().getDeclaredField("field4"));//可以
//不是本身定义的字段,访问会出错
//System.out.println(test.getClass().getDeclaredField("field5"));//不可以
//System.out.println(test.getClass().getDeclaredField("field0"));//不可以
//System.out.println(test.getClass().getDeclaredField("field6"));//不可以
//指定类或接口中的公共成员字段
System.out.println("-------指定类或接口中的公共成员字段----------");
System.out.println(test.getClass().getField("field5"));//可以
//System.out.println(test.getClass().getField("field0"));//不可以
//System.out.println(test.getClass().getField("field6"));//不可以

//所有类或接口中的公共成员字段
System.out.println("-------所有类或接口中的公共成员字段----------");
Field field[]=test.getClass().getFields();
for(int i=0;i<field.length;i++){
System.out.println(field[i].toString());
}

//所有类的成员字段
System.out.println("-------所有类的成员字段----------");
field=test.getClass().getDeclaredFields();
for(int i=0;i<field.length;i++){
System.out.println(field[i].toString());
}

//所有类的方法
System.out.println("-------所有类的方法----------");
Method method[]=test.getClass().getDeclaredMethods();
for(int i=0;i<method.length;i++){
System.out.println(method[i].toString());
}

//所有类或接口的公共成员方法
System.out.println("-------所有类或接口的公共成员方法----------");
method=test.getClass().getMethods();
for(int i=0;i<method.length;i++){
System.out.println(method[i].toString());
}
//指定类或接口中的公共成员字段
System.out.println("-------指定类或接口中的公共成员方法----------");
try {
System.out.println(test.getClass().getMethod("say", null));
//System.out.println(test.getClass().getMethod("sayprotected", null));
//System.out.println(test.getClass().getMethod("sayprivate", null));
System.out.println(test.getClass().getMethod("getField0", null));
//System.out.println(test.getClass().getMethod("getField5", null));
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//可以

//指定类方法
System.out.println("-------指定类方法----------");
try {
System.out.println(test.getClass().getDeclaredMethod("say", null));
System.out.println(test.getClass().getDeclaredMethod("sayprotected", new Class[]{int.class,int.class}));
System.out.println(test.getClass().getDeclaredMethod("sayprivate", null));
//System.out.println(test.getClass().getDeclaredMethod("getField0", null));
//System.out.println(test.getClass().getMethod("getField5", null));
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//可以
System.out.println("-------getDeclaredConstructors构造方法----------");
Constructor con[]=test.getClass().getDeclaredConstructors();
for(int i=0;i<con.length;i++){
System.out.println(con[i].toString());
}
System.out.println("-------getConstructors构造方法----------");
con=test.getClass().getConstructors();
for(int i=0;i<con.length;i++){
System.out.println(con[i].toString());
}
System.out.println("-------getConstructors构造方法----------");
Class arrl[] = {};
Class arr2[] =new Class[]{int.class,int.class};
try {
System.out.println(test.getClass().getDeclaredConstructor(arrl));
        Object obj1;
try {
obj1 = test.getClass().getDeclaredConstructor(arrl).newInstance(arrl);
System.out.println("===" + obj1);
obj1 = test.getClass().getDeclaredConstructor(arr2).newInstance(new Integer[]{3,4});
obj1 = test.getClass().getDeclaredConstructor(arr2).newInstance(3,4);
System.out.println("===" + obj1);
Method m = obj1.getClass().getDeclaredMethod("sayprotected", new Class[]{int.class,int.class});
System.out.println("===" + m.getParameterTypes());
System.out.println("===" + m.getReturnType());
Object obj2 = m.invoke(obj1, new Integer[]{4,5});

} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException 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();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


运行结果如下:


sun.misc.Launcher$AppClassLoader@19821f
[Ljava.lang.Class;@61de33
[Ljava.lang.reflect.Constructor;@14318bb
-------指定本身定义的字段(包括私有和共有)----------
private int reflect.Test.field1
public int reflect.Test.field2
protected int reflect.Test.field3
int reflect.Test.field4
-------指定类或接口中的公共成员字段----------
public int reflect.subTest.field5
-------所有类或接口中的公共成员字段----------
public int reflect.Test.field2
public int reflect.subTest.field5
-------所有类的成员字段----------
private int reflect.Test.field1
public int reflect.Test.field2
protected int reflect.Test.field3
int reflect.Test.field4
-------所有类的方法----------
public void reflect.Test.say()
protected void reflect.Test.sayprotected(int,int)
private void reflect.Test.sayprivate()
-------所有类或接口的公共成员方法----------
public void reflect.Test.say()
public void reflect.subTest.getField0()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
-------指定类或接口中的公共成员方法----------
public void reflect.Test.say()
public void reflect.subTest.getField0()
-------指定类方法----------
public void reflect.Test.say()
protected void reflect.Test.sayprotected(int,int)
private void reflect.Test.sayprivate()
-------getDeclaredConstructors构造方法----------
public reflect.Test()
private reflect.Test(java.lang.String)
protected reflect.Test(int,int)
public reflect.Test(int)
-------getConstructors构造方法----------
public reflect.Test()
public reflect.Test(int)
-------getConstructors构造方法----------
public reflect.Test()
===reflect.Test@69b332
a+b=7
a+b=7
===reflect.Test@173a10f
===[Ljava.lang.Class;@530daa
===void
a=4
b=5
hello sayprotected
分享到:
评论

相关推荐

    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

    (1)对于可以通过编译的考生程序,利用 Java 反射机制提取考生程序的相 关信息进行黑盒测试,给出测试分,再结合语法分、结果分,计算出总得分。 (2) 对于无法通过编译的考生程序,利用本地 jdk 包中的编译器编译...

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

    useArray1.java 用反射机制使用数组示例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

    SpringBoot+POI+反射机制实现复杂Excel文件解析

    使用POI框架解析复杂的Excel文件+Java后端开发人员+解析复杂Excel文件。内部含有测试使用文件,以及详细的代码注解。

Global site tag (gtag.js) - Google Analytics