- 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语言中的一种动态语言技术,能够在运行时解析外部对象的信息。通过反射技术,可以动态地获取类以及类中的成员,并可以调用该类成员。 产生反射技术的需求: 在项目完成以后,发现需要增加功能,...
8. **反射机制**:Java反射允许程序在运行时检查类、接口、字段和方法的信息,并能动态创建对象和调用方法。例如: ```java Class<?> clazz = Class.forName("java.util.ArrayList"); Object instance = clazz.new...
本文将深入探讨Java反射的概念,通过实例解析如何使用反射来获取对象属性值,并介绍Class类、基本数据类型以及类的反射。 首先,`Class`类在Java中扮演着核心角色。每一个类在Java中都是`Class`类型的实例,这种...
以下是一些基于“Java面试经验解析.zip”文件内容的关键知识点的详细说明: 1. **基础知识**:Java面试通常会从基础开始,涵盖语法、数据类型、运算符、流程控制语句(如if-else、switch-case、for、while等)。...
【Java反射机制详解】 在Java编程语言中,反射是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等元数据。在第16章中,我们将深入探讨Java类加载、连接和初始化的过程,以及反射的相关概念。...
- 题目:说明Java反射机制的作用和应用场景。 - 答案:反射允许在运行时动态获取类信息,创建和操作对象,实现动态代理,便于实现插件化或框架设计。 7. **设计模式** - 题目:举例说明单例模式的实现方式及其优...
java基础工具类iceroot iceroot是一个java基础工具类....包含的方法举例: 字符串截取 驼峰下划线互转 执行命令行 反射调用方法 集合操作 日期格式化与解析 时分秒转换 uuid生成 常用的常量 执行sql
以下是一些常见的Java面试题目以及相关的知识点解析: 1. **基础语法与数据类型** - Java中的基本数据类型有哪些?它们各自占用的内存大小是多少? - 介绍Java中的引用数据类型,如类、接口、数组。 - 解释自动...
- **Q:** Java反射机制能做什么? - **A:** 反射允许运行中的Java程序获取类的信息(如类名、方法、字段),并在运行时创建和调用类的对象,增强了代码的灵活性和动态性。 9. **IO流** - **Q:** 什么是字节流和...
解析:反射为Java提供了强大的元数据操作能力,但在使用时需谨慎,因为它可能导致程序的运行效率降低和安全性问题。问题 10:请解释一下 Java 中的异常处理机制,以及 try-catch-finally 语句块的作用?答案:Java ...
66. 反射机制 49 66.1.1. 传统的类型转换。 49 66.1.2. 通过Class对象来获取对象的类型。 49 66.1.3. 通过关键字instanceof或Class.isInstance()方法 49 67. 说出一些常用的类,包,接口,请各举5个 50 68. XML文档...
定义是创建Annotation类型,解析是通过Java反射API获取并使用Annotation信息。 - Annotation处理器是工具,如Java的apt工具,它可以扫描源代码中的Annotation,并根据开发者定义的规则执行相应的操作,如验证、代码...
### 华为Java面试题知识点解析 #### 一、Java面向对象基础 1. **super()与this()的区别** - `super()`用于调用父类的构造方法或父类中的成员方法。 - `this()`用于调用本类中的其他构造方法。 2. **作用域public...
Java反射机制 **知识点概述:** - **Class 对象:** 获取类的信息。 - **Field、Method、Constructor:** 操作类的成员变量、方法和构造函数。 #### 40. Web.xml 文件的作用 **知识点概述:** - **配置信息:** ...
本文将根据提供的部分内容,深入解析Java笔试题中的关键知识点,帮助读者巩固基础,提升技能。 1. **HashMap与HashTable的区别** - HashMap是非线程安全的实现,它是Hashtable的轻量级版本,效率相对较高。 - ...
这通常需要利用Java的反射API,例如`Field`的`set()`方法。 5. **初始化对象**:如果类有特定的初始化方法(如`init()`),可以调用这些方法完成对象的初始化。 在实际开发中,IoC容器如Spring框架已经提供了强大的...
- **反射机制**:如何通过反射创建对象、调用方法和访问字段。 - **注解的使用**:自定义注解,以及注解处理器的工作原理。 10. **Spring框架** - **依赖注入**:理解DI的原理,以及@Autowired和@Resource的异同...
下面将根据标题、描述以及标签,详细解析可能出现在Java求职面试中的关键知识点。 1. **Java基础** - **数据类型与变量**:了解基本数据类型(整型、浮点型、字符型、布尔型)及其作用,理解引用数据类型如类、...
- `super.getClass()`用于获取父类的`Class`对象,可以通过反射机制获取类的信息。 **知识点31:String是最基本的数据类型吗?** - `String`不是基本数据类型,它是Java中的一个类,用于表示文本。 **知识点32:...