jdk6.0从入门到精通-----chapter16反射机制

反射机制用到java.lang.reflect包中的类
一下是一个小例子:

package example1;

import java.lang.reflect.Method;

public class PrintMethods {
public static void main(String[] args) throws Exception {
// 加载并初始化命令行参数指定的类
Class classType = Class.forName(args[0]); // 一定是类的全名字,加上package,如java.lang.Object
Method methods[] = classType.getDeclaredMethods(); // 获得类的所有方法
for (int i = 0; i < methods.length; i++) {
System.out.println(methods[i].toString());
}
}

}

如果参数是:java.lang.Object
执行结果
protected void java.lang.Object.finalize() throws java.lang.Throwable
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()
protected native java.lang.Object java.lang.Object.clone() throws
java.lang.CloneNotSupportedException
private static native void java.lang.Object.registerNatives()
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()


第二个例子;

对象接口:
package example2;
public interface ObjInterface {

public String getGreeting();
}

对象实体类
package example2;
public class ObjImpl implements ObjInterface {

@Override
//内置的java的Annotation类型@Override
public String getGreeting() {
return "hello world!";
}

}


测试类:
package example2;

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

public class Main {

public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException, SecurityException,
NoSuchMethodException, IllegalArgumentException,
InvocationTargetException {
// 根据类名称创建类实例
Class objClass = Class.forName("example2.ObjImpl"); // ClassNotFoundException
// 面向接口
ObjInterface obj = (ObjInterface) objClass.newInstance();// InstantiationException,IllegalAccessException
// ObjImpl obj = (ObjImpl) objClass.newInstance(); //这样也可

System.out.println(obj.getGreeting());

// 根据方法名称创建方法实例
Method method = obj.getClass().getMethod("getGreeting", // 错错??????NoSuchMethodException???
new Class[] { String.class });// SecurityException,
// NoSuchMethodException

// 动态调用方法
Object result = method.invoke(obj, new Object[] { "Tu chuanbin" }); // InvocationTargetException
System.out.println("返回结果:" + (String) result);

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值