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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java反射 Constructor类

發布時間:2025/3/12 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java反射 Constructor类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java反射 Constructor類

Java通過反射可以獲取構造方法,和使用構造方法創造對象。

在網上找了一個比較好理解的例子來弄清楚Constructor類。

public Constructor getConstructor()// 公共構造方法對象 public Constructor[] getConstructors()//所有公共構造方法對象 public Constructor[] getDeclaredConstructors()//所有構造方法對象 public Constructor getDeclaredConstructor()//獲取私有構造方法對象 public Constructor<T> getConstructor(Class<?>... parameterTypes)// 參數表示的是:你要獲取的構造方法的構造參數個數及數據類型的class字節碼文件對象 public void setAccessible(boolean flag)// 值為true則指示反射的對象在使用時應該取消Java語言訪問檢查。 暴力訪問 package fieldtest;public class Student {// 成員變量public String name;// 公共private int age;// 私有// 構造方法public Student() {super();// TODO Auto-generated constructor stub}// 私有構造方法private Student(String name) {this.name = name;}public Student(String name, int age) {super();this.name = name;this.age = age;}// 成員方法(getXxx/setXxx)public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 成員方法public void study() {System.out.println("我愛學習java!");}// 私有private void study(String string) {System.out.println("我還愛學習" + string);}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";} } import java.lang.reflect.Constructor;public class ConstructorDemo {public static void main(String[] args) throws Exception {// 獲取字節碼文件對象Class c = Class.forName("fieldtest.Student");// 獲取所有構造方法Constructor[] cons = c.getDeclaredConstructors();for (Constructor con : cons) {System.out.println(con);}// 獲取單個構造方法Constructor con = c.getConstructor();// 返回的是構造方法對象Constructor con1 = c.getConstructor(String.class, int.class);// 返回的是有參構造方法對象Constructor con2 = c.getDeclaredConstructor(String.class);// 創建對象Object obj = con.newInstance();//使用無參構造方法創建對象Object obj1 = con1.newInstance("x", 1);// 暴力訪問con2.setAccessible(true);// 值為true則指示反射的對象在使用時應該取消Java語言訪問檢查。Object obj2 = con2.newInstance("y");System.out.println(obj.toString());System.out.println(obj1.toString());System.out.println(obj2.toString());} }/*輸出: public fieldtest.Student(java.lang.String,int) private fieldtest.Student(java.lang.String) public fieldtest.Student() Student [name=null, age=0] Student [name=x, age=1] Student [name=y, age=0]*/

通過例子可以總結:

使用反射機制創建對象步驟:

  • 獲得指定類的Class類對象。

    Class c = Class.forName("fieldtest.Student");

  • 通過反射獲取指定參數類型的Constructor類對象。

    Constructor con1 = c.getConstructor(String.class, int.class);

  • 調Constructor類對象的newInstance()方法傳入對應參數值,創建對象。

    Object obj1 = con1.newInstance("x", 1);

  • 例子2:

    import java.lang.reflect.*; public class ClassObj {public static void main(String[] args) {try {Class c5 = Class.forName("java.lang.Integer");//在類中首先獲得指定類的Class類對象Constructor construct = c5.getConstructor(int.class);//通過Class類對象的getConstructor獲得指定符合參數類型的構造方法。Integer in = (Integer) construct.newInstance(1234);//通過constructor類對象的newInstance()方法傳入參數,創建對象in。System.out.println(in.toString());}catch(Exception e) {e.printStackTrace();}} } //輸出:1234 /* Integer的toString()源碼:private final int value;public Integer(int value) {this.value = value; } public String toString() {return toString(value); } */

    一些例子代碼參考自https://www.jb51.net/article/171123.htm

    總結

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

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