摘要:大家好,小樂繼續(xù)接著上集樂字節(jié)反射之一反射概念與獲取反射源頭這次是之二實例化對象接口與父類修飾符和屬性一實例化對象之前我們講解過創(chuàng)建對象的方式有克隆反序列化,再加一種,根據(jù)對象,使用或者構(gòu)造器實例化對象。
大家好,小樂繼續(xù)接著上集:樂字節(jié)Java反射之一:反射概念與獲取反射源頭Class
這次是之二:實例化對象、接口與父類、修飾符和屬性
一:實例化對象之前我們講解過創(chuàng)建對象的方式,有new 、克隆、反序列化,再加一種,根據(jù)Class對象,使用newInstance() 或者構(gòu)造器實例化對象。調(diào)用以下api即可
//獲取源頭 Class> clz = Class.forName("com.shsxt.ref.simple.User"); //第一種:通過newInstance()創(chuàng)建對象 User user=(User)clz.newInstance(); user.setUname("sxt"); user.setUpwd("good"); //第二種:通過getDeclaredConstructors()創(chuàng)建對象,取得全部構(gòu)造函數(shù)(注意順序) Constructor>[] cons=clz.getDeclaredConstructors(); for(Constructor>c:cons){ System.out.println(c); } //注意觀察上面的輸出結(jié)果,再實例化,否則參數(shù)容易出錯 User u1=(User)cons[0].newInstance("shsxt","good"); User u2=(User)cons[1].newInstance("sxt"); User u3=(User)cons[2].newInstance(); System.out.println(u1.getUname()+u1.getUpwd());
注意:newInstance()是調(diào)用空構(gòu)造,如果空構(gòu)造不存在,會出現(xiàn)異常。由此可知,使用其他構(gòu)造器創(chuàng)建對象比較麻煩,使用空構(gòu)造非常簡單。確保空構(gòu)造存在 。
二、 接口與父類通過api獲取接口與父類
//獲取源頭 Class> clz =Class.forName("com.shsxt.ref.simple.User"); //獲取所有接口 Class>[] inters=clz.getInterfaces(); for(Class> in:inters){ System.out.println(in.getName()); } //獲取父類 Class> cls=clz.getSuperclass(); System.out.println("繼承的父類為:"+cls.getName());三、 修飾符
獲取修飾符,使用Modifier即可
Class>clz=Class.forName("com.shsxt.ref.simple.User"); //獲得修飾符 int n=clz.getModifiers(); //使用Modifier轉(zhuǎn)換為相應(yīng)的字符串 System.out.println(Modifier.toString(n));四、 屬性
獲取所有屬性(包括父類或接口) ,使用Field 即可操作
Class> clz = Class.forName("com.shsxt.ref.simple.User"); //獲取屬性 System.out.println("===============本類屬性=========="); // 取得本類的全部屬性 Field[] field = clz.getDeclaredFields(); for (int i = 0; i < field.length; i++) { // 1、權(quán)限修飾符 int mo = field[i].getModifiers(); String vis = Modifier.toString(mo); // 2、屬性類型 Class> type = field[i].getType(); //3、名字 String name = field[i].getName(); System.out.println(vis + " " + type.getName() + " "+ name + ";"); } System.out.println("=========公開的屬性包括接口或者父類屬性======"); field = clz.getFields(); for (int i = 0; i < field.length; i++) { System.out.println(field [i]); }
樂字節(jié)原創(chuàng),轉(zhuǎn)載請注明出處
Java反射機制后續(xù)會繼續(xù)講述,歡迎關(guān)注 樂字節(jié)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75213.html
摘要:本文承接上一篇樂字節(jié)發(fā)射之二實例化對象接口與父類修飾符和屬性繼續(xù)講述反射之三方法數(shù)組類加載器一方法獲取所有方法包括父類或接口,使用即可。當沒有任何引用指向?qū)ο髸r就會被卸載,結(jié)束類的生命周期。 本文承接上一篇:樂字節(jié)Java發(fā)射之二:實例化對象、接口與父類、修飾符和屬性 繼續(xù)講述Java反射之三:方法、數(shù)組、類加載器 一、方法 獲取所有方法(包括父類或接口),使用Method即可。sho...
摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態(tài)是面向?qū)ο笞罹璧臇|西,要實現(xiàn)運行時多態(tài)需要方法重寫子類繼承父類并重寫父類中已 1、簡述Java程序編譯和運行的過程:答:① Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼--字節(jié)碼,創(chuàng)建完源文件之后,程序會先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運行這個 .c...
摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態(tài)是面向?qū)ο笞罹璧臇|西,要實現(xiàn)運行時多態(tài)需要方法重寫子類繼承父類并重寫父類中已 1、簡述Java程序編譯和運行的過程:答:① Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼--字節(jié)碼,創(chuàng)建完源文件之后,程序會先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運行這個 .c...
摘要:注解有以下幾個知識點元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解注解處理器本文先介紹前面?zhèn)€知識點元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解。注解相當于是一種嵌入在程序中的元數(shù)據(jù),可以使用注解解析工具或編譯器對其進行解析,也可以指定注解在編譯期或運行期有效。 大家好,我是樂字節(jié)的小樂,上次說過了Java多態(tài)的6大特性|樂字節(jié),接下來我們來看看Java編程里的注解。showImg(https://segme...
摘要:與都繼承自類,在中也是使用字符數(shù)組保存字符串,,這兩種對象都是可變的。采用字節(jié)碼的好處語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時又保留了解釋型語言可移植的特點。 String和StringBuffer、StringBuilder的區(qū)別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區(qū)別 可變性...
閱讀 1624·2021-11-22 14:45
閱讀 1075·2021-11-17 09:33
閱讀 3328·2021-09-02 09:48
閱讀 975·2019-08-30 15:54
閱讀 2771·2019-08-30 15:53
閱讀 2560·2019-08-30 12:54
閱讀 2249·2019-08-29 12:37
閱讀 2428·2019-08-26 13:58