java反射基礎
每一個java類在內存中都對應著有一個Class類對象,這個對象記錄著該java類的相關信息。我們可以通過這個Class對象去:
a: 在運行時判斷任意一個對象所屬的類;
b:在運行時構造任意一個類的對象。
c:在運行時獲取任意一個類所具有的成員變量和方法。
d: 在運行時調用任意一個對象的可對外訪問的方法;
e:在運行時給任意一個對象的可對外訪問的成員變量賦值;
心情不是很好,現發點代碼。明天來修改吧,唉,居然為了女人心情不好。郁悶阿
/*
* @(#)UserType.java
* createTime:2007-10-26 下午03:11:49
*/
package com.zdsoft.javaiobase.ref;

/**
* @author sam E-mail:ashan8888@163.com
* @version 1.0
*/
public class UserType {
private String name;

private String sex;

private int old;
public String testName;

public String getTestName() {
return testName;
}

public void setTestName(String testName) {
this.testName = testName;
}

public String getName() {
return name;
}

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

public int getOld() {
return old;
}

public void setOld(int old) {
old = old;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}
}
寫一些反射測試代碼:
/*
* @(#)RefTest.java
* createTime:2007-10-26 下午03:13:24
*/
package com.zdsoft.javaiobase.ref;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import junit.framework.TestCase;

/**
* @author sam E-mail:ashan8888@163.com
* @version 1.0
*/
public class RefTest extends TestCase {
private Class cobj;

@Override
protected void setUp() throws Exception {
cobj = Class.forName("com.zdsoft.javaiobase.ref.UserType");
}

public void testCreateObj() throws Exception {
System.out.println(cobj.newInstance());
}

public void testGetMethods() throws Exception {
Method[] methods = cobj.getDeclaredMethods();
System.out.println("-------Methods------");
for (Method m : methods) {
System.out.println(m.toString());
}
}

public void testGetMethod() throws Exception {
Method m = cobj.getMethod("setName", String.class);
System.out.println("-------a Method------");
System.out.println(m.toString());

}
public void testGetFields() throws Exception {
System.out.println("------fileds-------");
Field[] fields = cobj.getDeclaredFields();
for(Field f : fields){
System.out.println(f.getName());
}
}
public void testInvoke() throws Exception {
UserType userType = (UserType) cobj.newInstance();
Method m = cobj.getMethod("getName", null);
Method ms = cobj.getMethod("setName", String.class);
ms.invoke(userType,"sam");
System.out.println("------invoke getName-------");
System.out.println(m.invoke(userType,null));
}
public void testFiled() throws Exception {
Field f= cobj.getField("testName");
UserType userType = (UserType) cobj.newInstance();
f.set(userType, "sam");
Method m = cobj.getMethod("getTestName", null);
System.out.println(m.invoke(userType, null));
}
}
a: 在運行時判斷任意一個對象所屬的類;
b:在運行時構造任意一個類的對象。
c:在運行時獲取任意一個類所具有的成員變量和方法。
d: 在運行時調用任意一個對象的可對外訪問的方法;
e:在運行時給任意一個對象的可對外訪問的成員變量賦值;
心情不是很好,現發點代碼。明天來修改吧,唉,居然為了女人心情不好。郁悶阿


























































































































posted on 2007-10-26 22:40 sam.chuan.yang 閱讀(338) 評論(1) 編輯 收藏