Java反射 Constructor类
生活随笔
收集整理的這篇文章主要介紹了
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类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么修改ppt的虚线间隔_还有一小时下班
- 下一篇: 找出不是两个数组共有的元素