java反射基礎(chǔ)
每一個(gè)java類在內(nèi)存中都對(duì)應(yīng)著有一個(gè)Class類對(duì)象,這個(gè)對(duì)象記錄著該java類的相關(guān)信息。我們可以通過(guò)這個(gè)Class對(duì)象去:
a: 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;
b:在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。
c:在運(yùn)行時(shí)獲取任意一個(gè)類所具有的成員變量和方法。
d: 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的可對(duì)外訪問(wèn)的方法;
e:在運(yùn)行時(shí)給任意一個(gè)對(duì)象的可對(duì)外訪問(wèn)的成員變量賦值;
心情不是很好,現(xiàn)發(fā)點(diǎn)代碼。明天來(lái)修改吧,唉,居然為了女人心情不好。郁悶阿
/*
* @(#)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;
}
}
寫(xiě)一些反射測(cè)試代碼:
/*
* @(#)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: 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;
b:在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象。
c:在運(yùn)行時(shí)獲取任意一個(gè)類所具有的成員變量和方法。
d: 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的可對(duì)外訪問(wèn)的方法;
e:在運(yùn)行時(shí)給任意一個(gè)對(duì)象的可對(duì)外訪問(wèn)的成員變量賦值;
心情不是很好,現(xiàn)發(fā)點(diǎn)代碼。明天來(lái)修改吧,唉,居然為了女人心情不好。郁悶阿


























































































































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