您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何在Java中利用反射創建對象,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Java Reflaction in Action中的解釋:反射是運行中的程序檢查自己和軟件運行環境的能力,它可以根據它發現的進行改變。通俗的講就是反射可以在運行時根據指定的類名獲得類的信息 個人理解:就是我們對于創建對象我們除了通過 new關鍵字創建外,還能通過什么創建呢?private的屬屬性真的不能獲取嗎?反射就能做到打破這些所謂的規則反射和new創建對象誰的效率高? new
public class Main { public static void main(String[] args) throws IllegalAccessException, InstantiationException { Class<Person> clazz = Person.class; Person person = clazz.newInstance(); System.out.println(person instanceof Person); // true } } class Person { private Integer age; private String name; public Person() { } }
public class Main { public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException { Class<?> clazz = Class.forName("com.best.test.Person"); Person person = (Person) clazz.newInstance(); System.out.println(person instanceof Person); // true } } class Person { private Integer age; private String name; public Person() { } }
public class Main { public static void main(String[] args) throws IllegalAccessException, InstantiationException{ Person person = new Person(); Class<? extends Person> clazz = person.getClass(); Person person1 = clazz.newInstance(); System.out.println(person1 instanceof Person); // true } } class Person { private Integer age; private String name; public Person() { } }
通過類對象的getConstructor()或getDeclaredConstructor()方法獲得構造器(Constructor)對象并調用其newInstance()方法創建對象,適用于無參和有參構造方法。
public class Main { public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { Class<Person> clazz = Person.class; Constructor<Person> ctor = clazz.getConstructor(Integer.class, String.class); Person person = ctor.newInstance(26, "jak"); System.out.println(person instanceof Person); // true } } class Person { private Integer age; private String name; public Person(Integer age, String name) { this.age = age; this.name = name; } }
public class Main { public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { Class<Person> clazz = Person.class; Constructor<Person> ctor = clazz.getDeclaredConstructor(String.class); Person person = ctor.newInstance("jak"); System.out.println(person instanceof Person); // true } } class Person { private Integer age; private String name; public Person(Integer age, String name) { this.age = age; this.name = name; } public Person(String name) { this.name = name; } }
getDeclaredConstructor(Class<?>... parameterTypes)
這個方法會返回指定參數類型的所有構造器,包括public的和非public的,當然也包括private的。getDeclaredConstructors()的返回結果就沒有參數類型的過濾了。
再來看getConstructor(Class<?>... parameterTypes)
這個方法返回的是上面那個方法返回結果的子集,只返回指定參數類型訪問權限是public的構造器。getConstructors()的返回結果同樣也沒有參數類型的過濾。
以上就是如何在Java中利用反射創建對象,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。