乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java中的反射

       印度阿三17 2019-06-14

      反射指動(dòng)態(tài)獲取類(lèi)及類(lèi)中的內(nèi)容

      示例代碼:String className = "cn.itheima.web.servlet.MyServletImpl";
      ? ? ? ? ? ? ? ? ? ? Class clazz = Class.forName(className);
      ? ? ? ? ? ? ? ? ? ? MyServletImpl my = (MyServletImpl) clazz.newInstance();

      ?

      如何獲取類(lèi)的Class對(duì)象(字節(jié)碼文件)?

      1,通過(guò)Object類(lèi)的getClass() 方法 ,需要先創(chuàng)建對(duì)象 ? ? ? -----比較兩個(gè)文件是否為同一個(gè)字節(jié)碼文件

      2,通過(guò)Class的靜態(tài)屬性 ?? .class? 獲取 ? ? -----鎖對(duì)象

      3,通過(guò)Class的靜態(tài)方法,Class.forName( )方法獲取 ? ----讀取配置文件


      如何獲取Class對(duì)象所對(duì)應(yīng)的類(lèi)的構(gòu)造方法?

      1,無(wú)參構(gòu)造,可以直接用newInstance( )來(lái)創(chuàng)建對(duì)象

      2,有參構(gòu)造,可以用 getConstructor( )來(lái)獲取構(gòu)造方法,(括號(hào)里不傳入?yún)?shù)是獲取無(wú)參構(gòu)造方法,傳入?yún)?shù)是獲取有參構(gòu)造)再使用newInstance( )來(lái)創(chuàng)建對(duì)象

      代碼演示如下:

      Class clazz = Class.forName("Bean.Person"); //獲取Person類(lèi)的Classd對(duì)象
      		Constructor constructor = clazz.getConstructor(String.class, int.class); //(反射階段) 獲取有參構(gòu)造,不傳入?yún)?shù)則是獲取無(wú)參構(gòu)造
      		Person p = (Person) constructor.newInstance("張三", 23); // 根據(jù)有參構(gòu)造創(chuàng)建實(shí)例
      		System.out.println(p);

      如何獲取Class對(duì)象所對(duì)應(yīng)的類(lèi)或接口的定義的變量,字段?

      1,如是公共變量,可以在獲取Class對(duì)象后,調(diào)用getField(String ?)獲取

      2,如是私有變量,可以在獲取Class對(duì)象后,調(diào)用getDeclaredField(Sting ?)暴力獲取 聲明的變量,如需改變其值,則需用,setAccessible(ture)去除私有權(quán)限

      Class clazz = Class.forName("Bean.Person"); //獲取Person類(lèi)的Classd對(duì)象
      		Constructor constructor = clazz.getConstructor(String.class, int.class); 
      		Person p = (Person) constructor.newInstance("張三", 23); // 根據(jù)有參構(gòu)造創(chuàng)建實(shí)例
      		//Field field = clazz.getField("name"); //獲取公共變量
      		Field declaredField = clazz.getDeclaredField("name");
      		declaredField.setAccessible(true);//去除私有屬性
      		declaredField.set(p, "李四");
      		System.out.println(p);

      如何獲取Class對(duì)象對(duì)應(yīng)的類(lèi)或接口中的方法?

      1,公共方法,getMethod( )

      2,私有方法,getDeclaredMethod( )

      Class clazz = Class.forName("Bean.Person"); //獲取Person類(lèi)的Classd對(duì)象 
      		Object p = clazz.newInstance();
      		Method method = clazz.getMethod("play",int.class);//反射階段
      		method.invoke(p, 5);

      通過(guò)反射越過(guò)泛型檢查:?

      package Reflect;
      
      import java.lang.reflect.Method;
      import java.util.ArrayList;
      
      import org.omg.CORBA.INTERNAL;
      
      public class demo6_test1 {
      	// 通過(guò)反射越過(guò)越過(guò)泛型檢查(泛型檢擦只在編譯器,在運(yùn)行期,反射階段可以跳過(guò)檢查)
      	public static void main(String[] args) throws Exception {
      		ArrayList<Integer> al = new ArrayList<>();
      		al.add(11);
      		Class<?> clazz = Class.forName("java.util.ArrayList");
      		Method method = clazz.getDeclaredMethod("add", Object.class);// ArrayList類(lèi)里的add方法里的原有的參數(shù)類(lèi)型是Object
      		method.invoke(al, "abc");
      		System.out.println(al);
      	}
      	
      }
      
      注意:?我印象中記得不能通過(guò)反射獲取父類(lèi)中的私有方法,要獲取需要遞歸通過(guò)getSuperClass()獲取父類(lèi)字節(jié)碼,參考這篇博文來(lái)源:http://www./content-1-249201.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多