*************************************************************************************************
2007/3/3 星期六
author: by Mircle_wang
title: reflect
qq:83529101
希望对大家有帮助,也欢迎交流 : 共同进步
**************************************************************************************************
src
Student
Teacher 被加载类
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package src;
public class Student {
private Integer id;
private String name;
private Integer age;
private String email;
// id
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return this.id;
}
// age
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
return age;
}
// name
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
// email
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package src;
public class Teacher {
private Integer id;
private String name;
private Integer age;
// id
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
// name
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
// age
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
return age;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
util
CallAnyMethod 反射类
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class CallAnyMethod {
public static void convert(String className, Object classNameobj,
Object[] para) throws ClassNotFoundException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
Class c = Class.forName(className);
Method[] methList = c.getDeclaredMethods();
System.out.println(c.getName());
for (int i = 0; i < methList.length; i++) {
// if((methList[i].getName().indexOf("get"))!=-1)
if (methList[i].getName().startsWith("get")) {
Object o = methList[i].invoke(classNameobj, para);
System.out
.println(methList[i].getName().substring(3) + ":" + o);
}
}
}
public static void convert(String className, Object classNameobj)
throws ClassNotFoundException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
convert(className, classNameobj, null);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
main
TestRef 验证类
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package main;
import java.lang.reflect.InvocationTargetException;
import src.Student;
import src.Teacher;
import util.CallAnyMethod;
public class TestRef {
/**
* @param args
* @throws InstantiationException
*/
public static void main(String[] args) throws InstantiationException {
// TODO Auto-generated method stub
// student set
Student stu = new Student();
stu.setId(1);
stu.setAge(24);
stu.setName("张三");
stu.setEmail("ho@hotmail.com");
// teacher set
Teacher tec = new Teacher();
tec.setId(2);
tec.setAge(23);
tec.setName("李笑");
try {
CallAnyMethod.convert("src.Student", stu);
//System.out.println(Thread.currentThread().getName());
//System.out.println(Class.forName("src.Student").getName());
CallAnyMethod.convert("src.Teacher", tec);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException 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();
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
运行结果:
src.Student
Age:24
Email:ho@hotmail.com
Name:张三
Id:1
src.Teacher
Age:23
Name:李笑
Id:2
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
分享到:
相关推荐
- 在复杂版中,引入了`invokeGetMethod()`方法,该方法用于通过反射调用getter方法获取字段值,这样可以处理非基本类型字段的值获取,因为`Field.get()`只能处理基本类型的值。 - 这个方法可能需要传递额外的参数...
仅仅通过反射方法没有办法知道集合元素中的类型,所以上面的两个converter能将任何集合转换成相对javascript而言有意义的对象.然而没有办法将不同的集合类类型分别采用不同的转换方法.因为没有办法完全自动进行转换,...
**重载**是指在一个类中定义多个同名方法,但这些方法具有不同的参数列表。 - **重载的特点**: - 参数的数量、类型或顺序不同。 - 方法的返回类型不影响重载。 - 方法名必须相同。 - **重载的作用**: - 提高...
- **方法重载**:通过方法签名的不同实现方法重载。 #### 二十六、传递值类型参数 - **值类型参数**:值类型参数按值传递,即在方法中修改参数不会影响原始值。 #### 二十七、传递引用类型参数 - **引用类型参数**...
- **访问私有成员**:即使成员变量或方法是私有的,也可以通过反射机制访问它们。 - **调用方法**:动态调用类的方法。 **4.3 示例代码** ```java import java.lang.reflect.Constructor; import java.lang....
- **抽象类**:可以包含抽象方法和非抽象方法,作为多个相似类的基类。 4. **异常处理** - **try-catch-finally**:捕获并处理异常,finally块确保关键代码无论是否发生异常都会执行。 - **自定义异常**:通过...
10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i ; i++) { if((i%2) == 1) { Sum += i ; ...
2. Key-Value Coding (KVC):一种间接访问对象属性的技术,无需直接调用set和get方法,方便属性批量赋值和反射操作。 3. Key-Value Observing (KVO):监听对象属性变化,当属性值改变时,会自动通知观察者,实现...
而在C#中,一个文件可以包含多个命名空间,且每个命名空间可以包含多个类,这为代码组织提供了更大的灵活性。 **4.3 值类型与引用类型** 在处理值类型时,C#和JAVA采取了不同的策略。C#中,基本类型如int、bool等...
- **类加载时机**:类在首次主动使用时被加载,例如通过反射调用、实例化、静态字段引用等方式触发。 - **初始化过程**:包括父类初始化、静态块执行、静态变量赋值等步骤。 - **类初始化与类加载的区别**:类加载...
- **对象:** 是类的实例,可以通过类创建。 - **属性:** 对象的数据成员,用于存储对象的状态。 - **方法:** 对象的行为,用于定义对象的操作。 **3.3 继承** - 继承是面向对象编程的基本特性之一,子类可以从...
- **实现**: 主要通过`Class`类的`forName()`方法获取类的信息,再通过反射API(如`Constructor`、`Method`等)进行动态操作。 **自定义注解的场景及实现** - **场景**: 标记代码、元数据存储、自动代码生成等。 -...
- Property是C#中用于封装类成员变量的机制,它提供了一种安全访问和修改对象数据的方法,通常包括get和set访问器。Property允许我们控制对数据的访问权限,并可以添加额外的逻辑,如验证输入。 - Attribute则是元...
Reflect不是一个新的概念,而是JavaScript语言的一个内置对象,它提供了与Proxy相关的操作方法,这些方法与Object对象中操作对象的方法相似,但更侧重于表达操作本身,而不是对象的属性。例如,`Reflect....
每个泛型类的实例在内存中只有一份,不同的类型参数不会导致多个实例。例如,`List<Integer>`和`List<String>`在运行时都是`List`的实例,只是类型参数不同而已。 ##### 类型转换与instanceof 当涉及到类型转换和`...
类可以实现一个或多个接口,强制执行特定的行为规范。 5. **泛型**:泛型允许我们创建可重用的类型安全的数据结构,如List,T代表任何类型,提高了代码的灵活性和效率。 6. **异常处理**:C#使用try-catch块来捕获...
线程允许在同一进程中并行执行多个代码段,通过共享内存和通信机制实现高效的数据交换。进程则在不同的地址空间运行,提供更高的隔离性和安全性,但通信成本较高。多线程和多进程的结合使用,可以充分发挥现代多核...
- 本地方法栈:与虚拟机栈相似,用于本地方法调用。 - 程序计数器:线程私有的,记录当前线程所执行的字节码指令地址。 2. **堆里面的分区**: - Eden:新创建的对象首先分配在这里。 - Survivor:经历了一次或...
多线程是Java的核心特性之一,允许并发执行多个线程,提高程序效率和响应性。主要通过`Thread`类或实现`Runnable`接口来创建线程。理解线程生命周期、同步机制、线程间通信等是关键。 #### 3. 面向对象的核心概念 ...
- **类方法**:使用关键字`self`定义的方法,只能由类调用而不是对象。 ##### §3.6 存取控制 - **访问级别**:Ruby支持公有、私有和保护三种访问级别。 - **示例**:通过`public`、`private`和`protected`关键字...