Java反射机制-学习笔记2(一)

2014-11-24 08:07:31 · 作者: · 浏览: 3

【实例8】调用其他类中的方法

[java]
package org.zhang.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

interface Chiness{
void say();
}

class Person implements Chiness{
public Person(){

}

@Override
public void say() {
System.out.println("我是中国人");
}

public void sayHello(String str,int x){
System.out.println("Hello, String is: " + str + ", int is: " + x);
}
}

public class ReflectTest {
public static void main(String[] args){

Class< > personClass = null;
try {
personClass = Class.forName("org.zhang.test.Person");
Method method = personClass.getMethod("say");
method.invoke(personClass.newInstance());

Method sayHello = personClass.getMethod("sayHello",String.class,int.class);
sayHello.invoke(personClass.newInstance(),"你好",25);


} catch (ClassNotFoundException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (NoSuchMethodException e){
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (InvocationTargetException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (InstantiationException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}

}
}

【结果:】
[html]
我是中国人
Hello, String is: 你好, int is: 25

【实例9】调用其他类的getter、setter方法

[java]
package org.zhang.test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

class Person {
private String name;
private String sex;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}
}

public class ReflectTest {
public static void main(String[] args) {
Class< > personClass = null;

try {
personClass = Class.forName("org.zhang.test.Person");
Person person = (Person) personClass.newInstance();
setter(person,"name","xiaozhang");
setter(person,"sex","男");
getter(person,"name");
getter(person,"sex");
} catch (InstantiationException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (IllegalAccessException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (ClassNotFoundException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}

public static void getter(Object obj, String attr) {
try {
Class< > objClass = obj.getClass();
String methodName = "get" + attr.substring(0, 1).toUpperCase() + attr.substring(1);
Method ge