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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java8基础之反射

發(fā)布時間:2025/3/17 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java8基础之反射 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

反射是Java開發(fā)中一個非常重要的概念,掌握了反射的知識,才能更好的學(xué)習(xí)Java高級課程,因此必須要學(xué)習(xí)!本博客主要介紹Class類的使用,方法和成員變量的反射。

實體類User

package reflect; public class User {// 屬性定義private String name;public Integer age;// 無參構(gòu)造方法public User(){super();}// 有參構(gòu)造方法public User(String name, Integer age) {super();this.name = name;this.age = age;}// 定義普通方法public void say() {System.out.println("say方發(fā):我叫" + name + "," + age + "歲了!");}// 定義重載方法public void say(String name, Integer age) {System.out.println("重載say方法:我叫" + name + "," + age + "歲了!");}// 私有方法private void desc() {System.out.println("我超甜!");} }

獲取User類對象

@Testpublic void getClassObject() {try {// 第一種方式:通過類加載器(動態(tài))Class userClassA = Class.forName("reflect.User");// 第二種方式:通過類Class userClassB = User.class;// 第三種方式:通過類的對象User user = new User();Class userClassC = user.getClass();// 查看三種方式得到的對象是否相同System.out.println(userClassA == userClassB && userClassB == userClassC);} catch (ClassNotFoundException e) {e.printStackTrace();}}

結(jié)果:ture

獲取User對象

@Testpublic void getBean(){try {// 括號里面的寫法很有講究!User user = (User)Class.forName("reflect.User").newInstance("費哥",18);;user.say("費哥哥", 18);} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {e.printStackTrace();}}

結(jié)果:重載say方法:我叫費哥哥,18歲了!

通過User類對象,獲取方法信息

@Testpublic void test(){try {Class userClass = Class.forName("reflect.User");// 獲取所用聲明方法Method[] ms = userClass.getDeclaredMethods();for(Method m : ms) {// 獲取方法名字System.out.print("方法名:"+ m.getName());// 獲取返回值類型System.out.print(",返回值類型:"+m.getReturnType().getName());// 獲取參數(shù)類型Class[] cs = m.getParameterTypes();for(Class c : cs) {System.out.print(",參數(shù)類型:"+c.getSimpleName());}System.out.println();}} catch (Exception e) {e.printStackTrace();}}

結(jié)果:
方法名:say,返回值類型:void,參數(shù)類型:String,參數(shù)類型:int
方法名:say,返回值類型:void
方法名:desc,返回值類型:void

通過User類對象,獲取成員變量信息

@Testpublic void test(){try {Class userClass = Class.forName("reflect.User");Field[] field = userClass.getDeclaredFields();for(Field f : field) {System.out.println("成員名字:"+f.getName()+",成員類型:"+f.getType().getSimpleName());}} catch (Exception e) {e.printStackTrace();}}

結(jié)果:
成員名字:name,成員類型:String
成員名字:age,成員類型:Integer

通過User類對象,獲取構(gòu)造函數(shù)信息

@Testpublic void test(){try {Class userClass = Class.forName("reflect.User");Constructor[] con = userClass.getDeclaredConstructors();for(Constructor c : con) {// 構(gòu)造方法名字System.out.print(c.getName()+"(");Parameter[] para = c.getParameters();// 獲取構(gòu)造方法參數(shù)類型for(Parameter cc : para) {System.out.print(cc.getType()+" ");}System.out.println(")");}} catch (Exception e) {e.printStackTrace();}}

結(jié)果:
reflect.User()
reflect.User(class java.lang.String class java.lang.Integer )

利用反射調(diào)用類的方法

@Testpublic void getMethod(){User user = null;try {user = (User)Class.forName("reflect.User").newInstance();Method method = user.getClass().getMethod("say", String.class, int.class);// 通過Method對象,調(diào)用對象中的方法。method.invoke(user, "費強勝", 24);} catch (Exception e) {e.printStackTrace();} }

結(jié)果:重載say方法:我叫費強勝,24歲了!

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

總結(jié)

以上是生活随笔為你收集整理的Java8基础之反射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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