霧霧Java郡符字崙
Person p=new Person();
宸頁焚担?輝隼頁糞箭晒匯倖斤嵆阻。辛頁宸嶽糞箭晒斤嵆議圭隈贋壓匯倖諒籾?椎祥頁駅倬勣岑祇窃兆嘉辛參糞箭晒万議斤嵆?宸劔厘断壓哘喘圭中祥氏鞭欺尫崙。椎担嗤短嗤宸劔匯嶽圭塀?斑厘断音岑祇宸倖窃議窃兆祥辛參糞箭晒万議斤嵆椿?Thank Goodness?侑雛厘断喘議頁java?java祥戻工阻宸劔議字崙。
Java議郡符字崙頁宥狛郡符API栖糞孖議?万塋俯殻會壓塰佩狛殻嶄函誼販採匯倖厮岑兆各議窃議坪何佚連。郡符API了噐java.lang.reflect淫嶄。麼勣淫凄參和叱窃?
箭徨?
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String[] args) {
try{
if(args.length<1){
System.out.println("萩補秘頼屁議窃兆?");
return;
}
Class strClass=Class.forName(args[0]);
//殊沫揮嗤峺協歌方議更夛圭隈
Class[] strArgsClass=new Class[]{ byte[].class,String.class};
Constructor constructor=strClass.getConstructor(strArgsClass);
System.out.println("Constructor:"+constructor.toString());
//距喘揮嗤歌方議更夛圭隈幹秀糞箭斤嵆object
byte[] bytes="java祥匍凍儺".getBytes();
Object[] strArgs=new Object[]{bytes,"gb2312"};
Object object=constructor.newInstance(strArgs);
System.out.println("Object"+object.toString());
}catch(Exception e){
e.printStackTrace();
}
}
}
import java.lang.reflect.*;
public class ReflectTest {
private String name;
private String age;
public ReflectTest(String name,String age){
this.name=name;
this.age=age;
}
public static void main(String[] args) {
// TODO 徭強伏撹圭隈贋功
try{
ReflectTest rt=new ReflectTest("zhanghandong","shiba");
fun(rt);
}catch(Exception e){
e.printStackTrace();
}
}
public static void fun(Object obj) throws Exception{
Field[] fields=obj.getClass().getDeclaredFields();
System.out.println("紋算岻念議:");
for(Field field:fields){
System.out.println(field.getName()+"="+field.get(obj));
if(field.getType().equals(java.lang.String.class)){
field.setAccessible(true); //駅倬譜崔葎true嘉辛參俐個撹埀延楚
String org=(String)field.get(obj);
field.set(obj,org.replaceAll("a","b"));
}
}
System.out.println("紋算岻朔議?");
for(Field field:fields){
System.out.println(field.getName()+"="+field.get(obj));
}
}
}
宸頁焚担?輝隼頁糞箭晒匯倖斤嵆阻。辛頁宸嶽糞箭晒斤嵆議圭隈贋壓匯倖諒籾?椎祥頁駅倬勣岑祇窃兆嘉辛參糞箭晒万議斤嵆?宸劔厘断壓哘喘圭中祥氏鞭欺尫崙。椎担嗤短嗤宸劔匯嶽圭塀?斑厘断音岑祇宸倖窃議窃兆祥辛參糞箭晒万議斤嵆椿?Thank Goodness?侑雛厘断喘議頁java?java祥戻工阻宸劔議字崙。
- java殻會壓塰佩扮辛參資誼販採匯倖窃議忖准鷹佚連?淫凄窃議俐蔑憲(public、static吉)、児窃(階窃、幻窃)、糞孖議俊笥、忖粁才圭隈吉佚連。
- java殻會壓塰佩扮辛參功象忖准鷹佚連栖幹秀乎窃議糞箭斤嵆?個延斤嵆議忖粁坪否才距喘斤嵆圭隈。
Java議郡符字崙頁宥狛郡符API栖糞孖議?万塋俯殻會壓塰佩狛殻嶄函誼販採匯倖厮岑兆各議窃議坪何佚連。郡符API了噐java.lang.reflect淫嶄。麼勣淫凄參和叱窃?
- Constructor窃?喘栖宙峰匯倖窃議更夛圭隈。
- Field窃?喘栖宙峰匯倖窃議撹埀延楚。
- Method窃?喘栖宙峰匯倖窃議圭隈。
- Modifer窃?喘栖宙峰窃坪光圷殆議俐蔑憲。
- Array?喘栖斤方怏序佩荷恬。
匯. 資函窃議更夛圭隈議Constructor斤嵆(方怏)
- Constructor[] getDeclaredConstructors()?卦指厮紗墮窃蕗苧議侭嗤議更夛圭隈議Constructor斤嵆方怏。
- Constructor getDeclaredConstructor(Class[] paramTypes)?卦指厮紗墮窃蕗苧議峺協更夛圭隈議Constructor斤嵆?paramTypes峺協阻歌方窃侏。
- Constructor[] getConstructors()?卦指厮紗墮窃蕗苧議侭嗤議public窃侏議更夛圭隈議Constructor斤嵆方怏。
- Constructor getConstructor(Class[] paramTypes)?卦指厮紗墮窃蕗苧議峺協議public窃侏議更夛圭隈議Constructor斤嵆?paramTypes峺協阻歌方窃侏。
箭徨?
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String[] args) {
try{
if(args.length<1){
System.out.println("萩補秘頼屁議窃兆?");
return;
}
Class strClass=Class.forName(args[0]);
//殊沫揮嗤峺協歌方議更夛圭隈
Class[] strArgsClass=new Class[]{ byte[].class,String.class};
Constructor constructor=strClass.getConstructor(strArgsClass);
System.out.println("Constructor:"+constructor.toString());
//距喘揮嗤歌方議更夛圭隈幹秀糞箭斤嵆object
byte[] bytes="java祥匍凍儺".getBytes();
Object[] strArgs=new Object[]{bytes,"gb2312"};
Object object=constructor.newInstance(strArgs);
System.out.println("Object"+object.toString());
}catch(Exception e){
e.printStackTrace();
}
}
}
屈. 資函窃撹埀延楚議Field斤嵆(方怏)
- Field[] getDeclaredFields()?卦指厮紗墮窃蕗苧議侭嗤撹埀延楚議Field斤嵆方怏?音淫凄貫幻窃写覚議撹埀延楚。
- Field getDeclaredField(String name)?卦指厮紗墮窃蕗苧議侭嗤撹埀延楚議Field斤嵆?音淫凄貫幻窃写覚議撹埀延楚?歌方name峺協撹埀延楚議兆各。
- Field[] getFields()?卦指厮紗墮窃蕗苧議侭嗤public侏議撹埀延楚議Field斤嵆方怏?淫凄貫幻窃写覚議撹埀延楚。
- Field getField(String name)?卦指厮紗墮窃蕗苧議侭嗤撹埀延楚議Field斤嵆?淫凄貫幻窃写覚議撹埀延楚?歌方name峺協撹埀延楚議兆各。
import java.lang.reflect.*;
public class ReflectTest {
private String name;
private String age;
public ReflectTest(String name,String age){
this.name=name;
this.age=age;
}
public static void main(String[] args) {
// TODO 徭強伏撹圭隈贋功
try{
ReflectTest rt=new ReflectTest("zhanghandong","shiba");
fun(rt);
}catch(Exception e){
e.printStackTrace();
}
}
public static void fun(Object obj) throws Exception{
Field[] fields=obj.getClass().getDeclaredFields();
System.out.println("紋算岻念議:");
for(Field field:fields){
System.out.println(field.getName()+"="+field.get(obj));
if(field.getType().equals(java.lang.String.class)){
field.setAccessible(true); //駅倬譜崔葎true嘉辛參俐個撹埀延楚
String org=(String)field.get(obj);
field.set(obj,org.replaceAll("a","b"));
}
}
System.out.println("紋算岻朔議?");
for(Field field:fields){
System.out.println(field.getName()+"="+field.get(obj));
}
}
}
眉. 資函窃議圭隈議Method斤嵆(方怏)
- Method[] getDeclaredMethods()?卦指厮紗墮窃蕗苧議侭嗤圭隈議Method斤嵆方怏?音淫凄貫幻窃写覚議圭隈。
- Method getDeclaredMethod(String name,Class[] paramTypes)?卦指厮紗墮窃蕗苧議侭嗤圭隈議Method斤嵆?音淫凄貫幻窃写覚議圭隈?歌方name峺協圭隈議兆各?歌方paramTypes峺協圭隈議歌方窃侏。
- Method[] getMethods()?卦指厮紗墮窃蕗苧議侭嗤圭隈議Method斤嵆方怏?淫凄貫幻窃写覚議圭隈。
- Method getMethod(String name,Class[] paramTypes)?卦指厮紗墮窃蕗苧議侭嗤圭隈議Method斤嵆?淫凄貫幻窃写覚議圭隈?歌方name峺協圭隈議兆各?歌方paramTypes峺協圭隈議歌方窃侏。
膨. 殊沫窃議凪麿佚連
- int getModifiers()?卦指厮紗墮窃議俐蔑憲議屁侘炎紛峙。
- Package getPackage()?卦指厮紗墮窃議淫兆。
- Class getSuperclass()?卦指厮紗墮窃議幻窃議Class糞箭。
- Class [] getInterfaces()?卦指厮紗墮窃糞孖議俊笥議Class斤嵆方怏。
- boolean isInterface()?卦指厮紗墮窃頁倦頁俊笥。