一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - java反射機(jī)制示例詳解

java反射機(jī)制示例詳解

2019-11-05 11:32java技術(shù)網(wǎng) JAVA教程

反射就是加載類,并解剖出類的各個(gè)組成部分,下面介紹了java反射機(jī)制示例,大家參考使用吧

1.什么是反射?
一個(gè)類有多個(gè)組成部分,例如:成員變量,方法,構(gòu)造方法等。
反射就是加載類,并解剖出類的各個(gè)組成部分。

2.加載類
java中有一個(gè)Class類用于代表某一個(gè)類的字節(jié)碼。
Class類既然代表某個(gè)類的字節(jié)碼,那就要提供加載某個(gè)類
字節(jié)碼的方法:forName().   此方法用于加載某個(gè)類的字節(jié)碼
到內(nèi)存中,并使用class對(duì)象進(jìn)行封裝。
另外2種得到class對(duì)象的方式:
類名.class
對(duì)象.getClass()

先創(chuàng)建一個(gè)簡(jiǎn)單的Person類
 

復(fù)制代碼代碼如下:


public class ReflectDemo {  
public static void main(String args[]) throws Exception  
{  //1.  
 Class clazz = Class.forName("dsa.Person") ; 

 

//2.  
Class clazz1 = new Person().getClass() ; 

//3.  
Classclazz2=Person.class;
}
}

 

3.反射構(gòu)造方法

Person類中:

 

復(fù)制代碼代碼如下:


/**
*構(gòu)造方法
*/
publicPerson(){
System.out.println("null");
}

 

publicPerson(Stringname){
System.out.println(name);
}

publicPerson(Stringname,intpwd){
System.out.println(name+"+"+pwd);
}

privatePerson(Listlist){
System.out.println("List");
}

 

測(cè)試類中:

 

復(fù)制代碼代碼如下:


//反射publicPerson()
@Test
publicvoidtest1()throwsException{
Classclazz=Class.forName("RflectorDemo.Person");
Constructorcr=clazz.getConstructor(null);//獲取構(gòu)造器對(duì)象
Personp=(Person)cr.newInstance(null);//通過(guò)構(gòu)造器實(shí)例化對(duì)象
//System.out.println(p.name);
}

 

//反射publicPerson(Stringname)
@Test
publicvoidtest2()throwsException{
Classclazz=Class.forName("RflectorDemo.Person");
Constructorcr=clazz.getConstructor(String.class);
Personp=(Person)cr.newInstance("haha");
System.out.println(p.name);
}

//反射publicPerson(Stringname,intpwd)
@Test
publicvoidtest3()throwsException{
Classclazz=Class.forName("RflectorDemo.Person");
Constructorcr=clazz.getConstructor(String.class,int.class);
Personp=(Person)cr.newInstance("haha",1);
//System.out.println(p.name);
}

//反射publicPerson(Listlist)
@Test
publicvoidtest4()throwsException{
Classclazz=Class.forName("RflectorDemo.Person");
Constructorcr=clazz.getDeclaredConstructor(List.class);
cr.setAccessible(true);//暴力破解
Personp=(Person)cr.newInstance(newArrayList());
System.out.println(p.name);
}
//另一種創(chuàng)建對(duì)象的途徑,只適用于無(wú)參的構(gòu)造方法
@Test
publicvoidtest5()throwsException{
Classclazz=Class.forName("RflectorDemo.Person");

Personp=(Person)clazz.newInstance();
System.out.println(p.name);
}

 

當(dāng)構(gòu)造方法是私有的,我們就進(jìn)行暴力破解!??!

4.反射常規(guī)方法

Person類中:

復(fù)制代碼代碼如下:


/**
*方法
*/
publicvoidjf()
{

 

}
publicvoidjf(Stringname,intpwd)
{

}
publicClass[]jf(Stringname,int[]pwd)
{
returnnewClass[]{String.class,int.class};
}
privatevoidjf(InputStreamin)
{
System.out.println(in);
}
publicstaticvoidjf(intnum)
{
System.out.println(num);
}
publicstaticvoidmain(Stringargs[])
{
System.out.println("main!!!");
}


測(cè)試類中:

復(fù)制代碼代碼如下:


/**
*反射類的方法
*
*@authortanlvxu
*
*/
publicclassDemo2{

 

//反射類的方法:publicvoidjf()
@Test
publicvoidtest1()throwsException{
Personp=newPerson();
Classclazz=Class.forName("RflectorDemo.Person");
Methodmethod=clazz.getMethod("jf",null);
method.invoke(p,null);
}

//反射類的方法:publicvoidjf(Stringname,intpwd)
@Test
publicvoidtest2()throwsException{
Personp=newPerson();
Classclazz=Class.forName("RflectorDemo.Person");
Methodmethod=clazz.getMethod("jf",String.class,int.class);
method.invoke(p,"dsa",30);
}

//反射類的方法:publicClass[]jf(Stringname,int[]pwd)
@Test
publicvoidtest3()throwsException{
Personp=newPerson();
Classclazz=Class.forName("RflectorDemo.Person");
Methodmethod=clazz.getMethod("jf",String.class,int[].class);
Classcs[]=(Class[])method.invoke(p,"aads",newint[]{1,2,3});
System.out.println(cs[0]);
}

//反射類的方法:privatevoidjf(InputStreamin)
@Test
publicvoidtest4()throwsException{
Personp=newPerson();
Classclazz=Class.forName("RflectorDemo.Person");
Methodmethod=clazz.getDeclaredMethod("jf",InputStream.class);
method.setAccessible(true);
method.invoke(p,newFileInputStream("d:\\qqClient.txt"));
}

//反射類的方法:publicstaticvoidjf(intnum)
@Test
publicvoidtest5()throwsException{
Classclazz=Class.forName("RflectorDemo.Person");
Methodmethod=clazz.getMethod("jf",int.class);
method.invoke(null,30);
}

//反射類的方法:publicstaticvoidm(intnum)
@Test
publicvoidtest6()throwsException{
Classclazz=Class.forName("RflectorDemo.Person");
Methodmethod=clazz.getMethod("main",String[].class);
//method.invoke(null,(Object)newString[]{"ds","das"});
method.invoke(null,newObject[]{newString[]{"ds","das"}});
}

 


5.反射字段

PerSon類中:

 

復(fù)制代碼代碼如下:


/**
*字段
*/
publicStringname="swr";
privateintpassword=45;
privatestaticintage=35;
測(cè)試類中:

 

Java代碼
/**
*反射類的字段
*@authortanlvxu
*
*/
publicclassDemo3{
/**
*反射字段publicStringname="swr";
*@throwsException
*/
@Test
publicvoidtest1()throwsException
{
Personp=newPerson();
Classclazz=Class.forName("RflectorDemo.Person");
Fieldf=clazz.getField("name");
//獲取字段的值
Objectvalue=f.get(p);
//獲取字段的類型
Classtype=f.getType();
if(type.equals(String.class)){
Stringname=(String)f.get(p);
System.out.println(name);
}

//設(shè)置字段的值
f.set(p,"dfafa");
System.out.println(p.name);

}

/**
*反射字段privateintpassword;
*@throwsException
*/
@Test
publicvoidtest2()throwsException
{
Personp=newPerson();
Classclazz=Class.forName("RflectorDemo.Person");
Fieldf=clazz.getDeclaredField("password");
f.setAccessible(true);
f.set(p,36);
System.out.println(f.get(p));

}

/**
*反射字段privatestaticintage=35;
*@throwsException
*/
@Test
publicvoidtest3()throwsException
{
Classclazz=Class.forName("RflectorDemo.Person");
Fieldf=clazz.getDeclaredField("age");
f.setAccessible(true);
f.set(null,24);
System.out.println(f.get(null));

}

 

其實(shí)無(wú)論反射構(gòu)造方法,或者字段都大致相同,我們可以舉一反三!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: b片在线观看 | 99r视频在线观看 | 午夜宅男影院 | 美女张开腿让男人桶的 视频 | 九九九好热在线 | 母爱成瘾在线观看 | 亚洲精品成人AV在线观看爽翻 | 国产精品一区久久精品 | 青草视频网站在线观看 | 99ri在线精品视频 | 午夜爽喷水无码成人18禁三级 | 午夜在线观看免费完整直播网 | 草莓视频榴莲视频 | 国产精品自拍一区 | 刺客女仆 | 国产网站免费在线观看 | 日韩ab| 亚洲天堂中文字幕 | 大逼美女| 欧美日韩一区二区三区久久 | 亚洲第一天堂网 | 天天操天天射天天爽 | 国产精品九九久久一区hh | 天生奶水1v1高h | 国产99区| 久久久久久久久性潮 | 国产亚洲精aa在线观看香蕉 | 草草视频免费在线观看 | 色综合天天综合网站中国 | 姐姐不~不可以动漫在线观看 | 日本xxoo动图网站欧美 | 99精品视频免费在线观看 | 国产一区二区免费在线 | 亚洲AV久久久噜噜噜久久 | 亚洲瑟瑟网 | 草嫩社区 | 福利视频一区二区牛牛 | 好大用力深一点女公交车 | 暖暖在线日本 | 美女岳肉太深了使劲 | 国产成+人+综合+亚洲不卡 |