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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA---反射

發布時間:2024/7/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA---反射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當用到一個類對象的時候,JVM會把此類的Class字節碼文件加載到內存中(只加載一次),JVM會此類的信息封裝成對象。利用封裝好的對象獲取類的相關信息進行構造類或者調用方法等,叫做反射。

反射的目的和作用就是為了開發者寫出更通用的代碼。

  • 把類名稱,繼承,實現封裝成Class對象
  • 把類的構造方法封裝成Constructor對象
  • 把類的成員屬性封裝成File對象
  • 把類的普通方法、返回值封裝成Method對象

?

舉例

package com.myjava.reflect;public class Person {private int _age;private String _name;public int get_age(){return _age;}public void say(){System.out.println(_name + "今年" + _age + "歲了");}public void set_age(int _age){this._age = _age;}public Person(int _age, String _name){super();this._age = _age;this._name = _name;}public String get_name(){return _name;}public void set_name(String _name){this._name = _name;} }

主程序

?

package com.myjava.reflect;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException;/*** @ClassName: ReflectTest* @Description: TODO(這里用一句話描述這個類的作用)* @author 劉陽陽* @date 2016年10月5日 上午9:20:32**/public class ReflectTest {public static void main(String[] args)throws ClassNotFoundException, NoSuchMethodException,SecurityException, IllegalAccessException, IllegalArgumentException,InvocationTargetException, InstantiationException{// 根據類名進行加載,此加載不進行對象構造生成Class myClass = Class.forName("com.myjava.reflect.Person");// 這個需要導入對應的Person// Class myClass = Person.class;// 這個是進行實例化后獲取對應的類信息// Class myClass = new Person(11, "honey").getClass();System.err.println(myClass.getName()); // 獲取類名稱Field[] Fields = myClass.getDeclaredFields();// 獲取成員字段for (Field f : Fields){System.err.println(f.getName());// 獲取成員名稱System.err.println(f.getModifiers());// 聲明的權限 default private public// protectedSystem.err.println(f.getType());// 獲取成員類型 }Constructor[] constructors = myClass.getDeclaredConstructors();for (Constructor con : constructors){System.err.println(con.getName());System.err.println(con.getModifiers());// 聲明的權限 default private// public protectedSystem.err.println(con.getParameterCount());// 參數個數System.err.println(con.getParameters()); // 參數集合 }// 調用此對象中的SAY方法,構造參數位_age=11,_name=honeymyClass.getMethod("say").invoke(myClass.getConstructor(int.class, String.class).newInstance(11, "honey"), null);}}

?

程序執行結果為

com.myjava.reflect.Person
_age
2
int
_name
2
class java.lang.String
com.myjava.reflect.Person
1
2
[Ljava.lang.reflect.Parameter;@15db9742
honey今年11歲了

?

轉載于:https://www.cnblogs.com/Coolkaka/p/5931772.html

總結

以上是生活随笔為你收集整理的JAVA---反射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。