日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 反射详解

發(fā)布時(shí)間:2025/4/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 反射详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

反射(Reflection)是Java 程序開(kāi)發(fā)語(yǔ)言的特征之一,它允許運(yùn)行中的 Java 程序獲取自身的信息,并且可以操作類或?qū)ο蟮膬?nèi)部屬性  

?

與反射有關(guān)的類包.

java.lang.reflect.*;

java.lang.Class;

?

下面來(lái)看反射到底能做什么:

?

  • 獲取Class對(duì)象 1).Object.getCalss(); 2).Class.forName(String)(String的寫法:包名.類名.就會(huì)創(chuàng)建包名.類名對(duì)應(yīng)的那個(gè)對(duì)象)( 注:1.2只適用于引用類型) 3).封裝類.TYPE返回對(duì)應(yīng)的基本類型的Class對(duì)象.Integer.TYPE對(duì)應(yīng)的是int的Class對(duì)象注:3只適用于基本類型 4).類型.Class。注:4是通用的上面的4種方法,只有方法2是動(dòng)態(tài)的,只要換一個(gè)包就可以了.它具有動(dòng)態(tài)潛質(zhì).所以真正意義的想體現(xiàn)動(dòng)態(tài)編程只能使用方法2. eg: 1 package com.company; 2 3 public class Main { 4 public static void main(String[] args) throws Exception { 5 Person person = new Person("batty"); 6 /* clazz 是儲(chǔ)存Person類內(nèi)容(constructor、field、method等)的類 7 也就是說(shuō),Class是儲(chǔ)存類信息的類 8 */ 9 Class clazz = Class.forName("com.company.Person"); 10 System.out.println("person.getClass(): " + person.getClass()); // class com.company.Person 11 System.out.println("clazz.getClass(): " + clazz.getClass()); // class java.lang.Class 12 System.out.println("clazz.getName(): " + clazz.getName()); // com.company.Person 13 System.out.println("clazz.getClass().getName(): " + clazz.getClass().getName()); // java.lang.Class 14 System.out.println("person.getClass(): "+ person.getClass()); // class com.company.Person 15 System.out.println("Class.forName(\"Person\"): " + Class.forName("com.company.Person")); // class com.company.Person 16 System.out.println("String.TYPE " + Integer.TYPE); // int 17 System.out.println("person.class: " + Person.class); // class com.company.Person 18 } 19 } 20 class Person{ 21 String name; 22 Person(String name) { 23 this.name = name; 24 } 25 }

    ?

  • 獲取類中的構(gòu)造函數(shù) [獲取構(gòu)造<根據(jù)參數(shù)類型>](使用時(shí)一般用不帶declared的,即藍(lán)色字體) Constructor<T> getConstructor(Class<?>... parameterTypes) 返回一個(gè) Constructor 對(duì)象,它反映此 Class 對(duì)象所表示的類的指定公共構(gòu)造方法。 Constructor<?>[] getConstructors() 返回一個(gè)包含某些 Constructor 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類的所有公共構(gòu)造方法。 Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回一個(gè) Constructor 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類或接口的指定構(gòu)造方法。 Constructor<?>[] getDeclaredConstructors() 返回 Constructor 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象表示的類聲明的所有構(gòu)造方法。

    ?具體使用例子:利用反射調(diào)用構(gòu)造函數(shù)

    1 package Reflect; 2 import java.lang.reflect.Constructor; 3 class Demo() { 4 String name; 5 Demo() {} 6 Demo(String name) { 7 this.name = name; 8 } 9 @Override 10 String toString(){ 11 return "["+this.name+"]"; 12 } 13 } 14 public class test() { 15 public static void main(String[] args) { 16 Class<?> test = null; 17 try { 18 test = Class.forName(Reflect.Demo); 19 } catch (Exception e) { 20 e.printStackTrace(); 21 } 22 Demo d1 = null; 23 Demo d2 = null; 24 Constructor<?> cons[]=test.getConstructors(); 25 try { 26 d1=(Demo)cons[0].newInstance(); 27 d2=(Demo)cons[1].newInstance("TestDemo"); 28 } catch(Exception e){ 29 e.printStackTrace(); 30 } 31 System.out.println(d1); 32 System.out.println(d2); 33 } 34 }

    ?

  • 獲取類中的成員函數(shù)(method) [獲取方法<方法名加上參數(shù)類型>](使用時(shí)一般用不帶declared的,即藍(lán)色字體) Method getMethod(String name, Class<?>... parameterTypes) 返回一個(gè) Method 對(duì)象,它反映此 Class 對(duì)象所表示的類或接口的指定公共成員方法。 Method[] getMethods() 返回一個(gè)包含某些 Method 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法。 Method getDeclaredMethod(String name, Class<?>... parameterTypes) 返回一個(gè) Method 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類或接口的指定已聲明方法。 Method[] getDeclaredMethods() 返回 Method 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象表示的類或接口聲明的所有方法,包括公共、保護(hù)、默認(rèn)(包)訪問(wèn)和私有方法,但不包括繼承的方法。

    具體使用例子:利用反射調(diào)用方法
    1 package Reflect; 2 import java.lang.reflect.Constructor; 3 class Demo() { 4 String name; 5 Demo() {} 6 Demo(String name) { 7 this.name = name; 8 } 9 void demoTest(String name) { 10 System.out.println(this.name); 11 } 12 @Override 13 String toString(){ 14 return "["+this.name+"]"; 15 } 16 } 17 public class test() { 18 public static void main(String[] args) { 19 Class<?> test = null; 20 try { 21 test = Class.forName(Reflect.Demo); 22 } catch (Exception e) { 23 e.printStackTrace(); 24 } 25 try{ 26 //調(diào)用Person類中的sayChina方法 27 Method method = test.getMethod("demoTest"); 28 method.invoke(test.newInstance()); 29 }catch (Exception e) { 30 e.printStackTrace(); 31 } 32 } 33 }

    ?

  • 獲取類中的成員變量(field) [獲取屬性<根據(jù)屬性名>](使用時(shí)一般用是帶declared的,即藍(lán)色字體,因?yàn)閷傩砸话愣际撬接械? Field getField(String name) 返回一個(gè) Field 對(duì)象,它反映此 Class 對(duì)象所表示的類或接口的指定公共成員字段。 Field[] getFields() 返回一個(gè)包含某些 Field 對(duì)象的數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類或接口的所有可訪問(wèn)公共字段。 Field getDeclaredField(String name) 返回一個(gè) Field 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類或接口的指定已聲明字段。 Field[] getDeclaredFields() 返回 Field 對(duì)象的一個(gè)數(shù)組,這些對(duì)象反映此 Class 對(duì)象所表示的類或接口所聲明的所有字段。

    ?有declared的方法是支持私有,但是不支持繼承,無(wú)declared的方法支持繼承,不支持私有,且只能取出public的東西。

    ?因此取屬性的時(shí)候一般來(lái)說(shuō)是帶declared的,因?yàn)閷傩砸话愣际撬接械?取方法時(shí)一般是不帶declared的,取構(gòu)造時(shí)一般也是不帶declared的.

    ?

    具體使用例子:利用反射獲取字段field

    1 package Reflect; 2 import java.lang.reflect.Constructor; 3 class Demo() { 4 String name; 5 Demo() {} 6 Demo(String name) { 7 this.name = name; 8 } 9 @Override 10 String toString(){ 11 return "["+this.name+"]"; 12 } 13 } 14 public class test() { 15 public static void main(String[] args) { 16 Class<?> test = null; 17 try { 18 test = Class.forName(Reflect.Demo); 19 } catch (Exception e) { 20 e.printStackTrace(); 21 } 22 // 取得本類的全部屬性 23 Field[] field = test.getDeclaredFields(); 24 for (int i = 0; i < field.length; i++) { 25 // 權(quán)限修飾符 26 int mo = field[i].getModifiers(); 27 String priv = Modifier.toString(mo); 28 // 屬性類型 29 Class<?> type = field[i].getType(); 30 System.out.println(priv + " " + type.getName() + " " 31 + field[i].getName() + ";"); 32 } 33 } 34 }

    ?

  • ?寫個(gè)博客寫了大半個(gè)月了,現(xiàn)在才想起把這篇寫完發(fā)布出去,我的第一篇博客就這樣誕生了。。。。。。。。。。。。。。。。。。

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/luxurytime/p/9115130.html

    總結(jié)

    以上是生活随笔為你收集整理的java 反射详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 在线观看黄网址 | 亚洲日本综合 | 在线欧美日韩 | 精品国产av鲁一鲁一区 | 艳妇臀荡乳欲伦交换电影 | 97人妻一区二区精品视频 | 日本狠狠操 | 葵司免费一区二区三区四区五区 | 欧美日韩中文国产一区发布 | 欧美在线视频免费播放 | 乳揉みま痴汉4在线播放 | 国产精品一区二区三区不卡 | 欧美国产日韩一区 | 欧美五月婷婷 | 久久精品99久久久久久久久 | 一区二区三区中文字幕在线观看 | 亚洲视频在线视频 | 葵司有码中文字幕二三区 | 一区二区网 | 手机av在线| 午夜大片在线观看 | 欧美日韩中出 | 污污网站免费在线观看 | 99国产在线播放 | 新婚之夜玷污岳丰满少妇在线观看 | 国产一二区在线观看 | 亚洲精品福利在线 | 国产91嫩草 | av片网站| 亚洲美女自拍视频 | 一区二区三区美女视频 | jizz成熟丰满老女人 | 草民午夜理伦三级 | 肉色超薄丝袜脚交一区二区图片 | 久久亚洲精少妇毛片午夜无码 | 久久久久久久久久一区二区 | 国产精品福利视频 | 在线观看国产亚洲 | 国产九色91| 国产一级二级三级视频 | 起碰在线| 国产av无码专区亚洲av麻豆 | 美女视频网址 | 欧美在线播放一区二区 | 国产精品国产三级国产aⅴ下载 | 久久精品毛片 | 操操网 | 大胸喷奶水www视频妖精网站 | 日韩欧美一区在线 | 国产天天综合 | 成年人小视频在线观看 | 在线观看久草 | 97人人爽人人爽人人爽人人爽 | 国产精品视频一区二区三区在3 | 国产伦精品一区二区. | 欧美日韩一区二区三区不卡 | 国产精品资源站 | 日本网站免费观看 | 天天操夜夜操夜夜操 | 欧美 日韩 国产 一区 | 亚洲午夜在线视频 | 少妇喷白浆 | 国产精品免费一区二区三区四区 | 亚洲精品成人在线视频 | 91麻豆精品| 久久久91视频 | 18禁一区二区三区 | 国产精品资源 | 亚洲人成电影在线 | 亚洲www在线观看 | 国产精品传媒在线 | 欧美一级黄 | 日本视频不卡 | 少妇扒开粉嫩小泬视频 | 久草综合在线观看 | 艳母免费在线观看 | 性天堂网| 国产一级免费大片 | 国产91丝袜在线播放九色 | 久久白浆| 欧美 日韩 国产 成人 在线 | 香港黄色网 | 一区二区三区视频免费 | 欧美v视频 | 欧美日韩综合在线观看 | 久久人人添人人爽添人人片 | 亚洲高清天堂 | 免费色片网站 | 26uuu成人网 国产精品久久久久久久久久直播 | 日韩一区二区三区在线免费观看 | 国产精品视频一区二区三区在3 | 中文在线a天堂 | 713电影免费播放国语 | 美日韩丰满少妇在线观看 | 国内久久精品视频 | 亚洲黄色在线 | 久久精品牌麻豆国产大山 | 中文字幕永久免费 | 精品国产乱码一区二区三区99 |