- 1. 使用反射得到对象的属性. 注: 属性的使用,同样也受private,public等作用域的限制.
public class FieldClass {
public String publicField = "ss"; // public 属性
private Double privateField = new Double(22.22); // private 属性
public static Boolean staticField = true; // static 属性
}
import java.lang.reflect.Field;
import junit.framework.TestCase;
public class FieldTestCase extends TestCase {
public void testField() throws Exception {
FieldClass test = new FieldClass();
Field field1 = FieldClass.class.getField("publicField");
assertEquals(field1.get(test), test.publicField); // 能够使用test.intPublicField,则也可以使用反射得到值
try {
Field field2 = FieldClass.class.getField("privateField");
} catch (Exception e) {
assertTrue(e instanceof java.lang.NoSuchFieldException); // 由于doubleField是private的, 不可被外部直接调用
}
Field field3 = FieldClass.class.getField("staticField");
assertTrue((Boolean) field3.get(FieldClass.class));
}
}
public class MethodClass {
public String publicMehod() {
return "public";
}
private String privateMethod() {
return "private";
}
public static String staticMethod() {
return "static";
}
}
import java.lang.reflect.Method;
import junit.framework.TestCase;
public class MethodTestCase extends TestCase {
public void testMethod() throws Exception {
MethodClass test = new MethodClass();
Method method1 = MethodClass.class.getMethod("publicMehod", new Class[] {});
assertEquals(method1.invoke(test, new Object[] {}), "public");
try {
Method method2 = MethodClass.class.getMethod("privateMethod", new Class[] {});
} catch (Exception e) {
assertTrue(e instanceof NoSuchMethodException);
}
Method method3 = MethodClass.class.getMethod("staticMethod", new Class[] {});
assertEquals(method3.invoke(MethodClass.class, new Object[] {}), "static");
}
}
public class ArguementMethodClass {
public String methodWithNoArguement() {
return "no";
}
public String methodWithOneArgument(String arg) {
return "one";
}
public String methodWithTwoArguments(String arg0, String arg1) {
return "two";
}
public String methodWithArrayArguments(String[] argArray) {
return "array";
}
public String methodWithMoreArguments(String... args) {
return "more";
}
}
import java.lang.reflect.Method;
import junit.framework.TestCase;
public class ArgumentMethodTestCase extends TestCase {
public void testArgumentMethod() throws Exception {
ArguementMethodClass test = new ArguementMethodClass();
Method method1 = ArguementMethodClass.class.getMethod("methodWithNoArguement", new Class[] {});
method1.invoke(test, new Object[] {});
Method method2 = ArguementMethodClass.class.getMethod("methodWithOneArgument", new Class[] { String.class });
assertEquals(method2.invoke(test, new Object[] { "aa" }), "one");
Method method3 = ArguementMethodClass.class.getMethod("methodWithTwoArguments", new Class[] { String.class, String.class });
assertEquals(method3.invoke(test, new Object[] { "aa", "bb" }), "two");
Method method4 = ArguementMethodClass.class.getMethod("methodWithArrayArguments", new Class[] { String[].class });
assertEquals(method4.invoke(test, new Object[] { new String[] { "aa" } }), "array");
Method method5 = ArguementMethodClass.class.getMethod("methodWithMoreArguments", new Class[] { String[].class });
assertEquals(method5.invoke(test, new Object[] { new String[] { "aa" } }), "more");
}
}
public class OverloadMethodClass {
public String sameMethod() {
return "one";
}
public String sameMethod(String arg) {
return "two";
}
}
import java.lang.reflect.Method;
import junit.framework.TestCase;
public class OverloadMthodTestCase extends TestCase {
public void testOverrideMethod() throws Exception {
OverloadMethodClass test = new OverloadMethodClass();
Method method1 = OverloadMethodClass.class.getMethod("sameMethod", new Class[] {});
assertEquals(method1.invoke(test, new Object[] {}), "one");
Method method2 = OverloadMethodClass.class.getMethod("sameMethod", new Class[] { String.class });
assertEquals(method2.invoke(test, new Object[] { "aa" }), "two");
}
}
分享到:
相关推荐
描述JAVA反射机制应用、举例。描述反射机制的具体实现及方法实现。
关于java反射机制的很好的讲解,包括Java的反射机制(Reflection)、Class类、如何获得类的相关信息和运用,并且还有相应的练习,有助于更好地学习java反射机制
·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千斤 2.课程内容推陈出新: ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse...
详细讲解java的reflect包的,阐述反射机制及动态代理的细节问题。其中动态代理部分内容参考网上资料。读完此文,相信会对javaf反射机制有一个完整清楚的了解。尤其应该看看其他中代码举例部分。
·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千斤 2.课程内容推陈出新: ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse...
数学问题趣味化举例解析PPT学习教案.pptx
是关于c#的一个反射举例,希望大家对C#的反射能够一个很好的认识,帮助大家更请简单的理解其中的意思
java 浮点数举例java 浮点数举例java 浮点数举例
主要介绍了Java反射技术原理与用法,结合实例形式分析了Java反射技术的基本概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下
java垃圾回收器机制,代码举例注释及个人笔记
一个详细的java常用API举例。。有代码和说明。希望可以帮助到你。
本资料主要详细介绍JAVA 中各设计模式及其举例说明其用法
主要结合实例形式分析了介绍了java基于反射得到对象属性值的方法,Class类,基本数据类型,类的反射等,需要的朋友可以参考下
高考数学高频易错题举例解析.doc
主要介绍了Java的图像缓冲技术的使用,使用到了Java的awt.image包,需要的朋友可以参考下
MODBUS规约报文详细举例解析.doc
PLC控制系统应用举例解析PPT教案.pptx
相似三角形应用举例解析PPT学习教案.pptx
MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例).doc