獲取類的構造器Constructor
html
在Java反射中通常方法名中包含getDelcared的方法都是隻能訪問該類的全部訪問權限類型的構造器、方法或者成員變量和類變量,包括public、default(默認----方法名前什麼都不寫)、protecte、private;而其餘的只能訪問權限類型爲public的方法或成員變量 包括繼承過來的父類的public方法和成員變量、類變量,只能訪問本類的public構造器方法。java
a、public Constructor<?>[] getConstructors() 數組
返回該類中全部public的構造方法
spa
b、public Constructor<?>[] getDeclaredConstructors() code
返回 Constructor
對象的一個數組,這些對象反映 此 Class
對象表示的類聲明的全部構造方法。它們是公共、保護、默認(包)訪問和私有構造方法 orm
public class SubClass { private SubClass(){ } private SubClass(String s,String s1){ } public SubClass(String s){ } protected SubClass(int i){ } public static void main(String[] args) { try { Class clz = SubClass.class; Constructor[] cons = clz.getConstructors(); for (Constructor constructor : cons) { System.out.print(constructor.getModifiers()+"--");//權限 System.out.println(constructor.toGenericString());//構造器名稱 } System.out.println("----------"); Constructor[] cons1 = clz.getDeclaredConstructors(); for (Constructor constructor : cons1) { System.out.print(constructor.getModifiers()+"--");//權限 System.out.println(constructor.toGenericString());//構造器 } } catch (Exception e) { e.printStackTrace(); } } }
運行結果:htm
1--public cn.trip.core.servlet.SubClass(java.lang.String) ---------- 4--protected cn.trip.core.servlet.SubClass(int) 1--public cn.trip.core.servlet.SubClass(java.lang.String) 2--private cn.trip.core.servlet.SubClass(java.lang.String,java.lang.String) 2--private cn.trip.core.servlet.SubClass()
同理,對象
c、public Constructor<T> getConstructor(Class<?>... parameterTypes)繼承
獲取該類的public構造器形參參數類型爲parameterTypes數組的構造器 ip
d、public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
獲取該類的private、public、protected、default類型的指定形參參數的構造器
public class SubClass { private SubClass(){ } private SubClass(String s,String s1){ } public SubClass(String s){ } protected SubClass(int i){ } public static void main(String[] args) { try { Class clz = SubClass.class; Constructor constructor = clz.getConstructor(String.class); System.out.print(constructor.getModifiers()+"--");//權限 System.out.println(constructor.toGenericString());//構造器名稱 System.out.println("----------"); Constructor constructor1 = clz.getDeclaredConstructor(String.class,String.class); System.out.print(constructor1.getModifiers()+"--");//權限 System.out.println(constructor1.toGenericString());//構造器 } catch (Exception e) { e.printStackTrace(); } } }
運行結果:
1--public cn.trip.core.servlet.SubClass(java.lang.String) ---------- 2--private cn.trip.core.servlet.SubClass(java.lang.String,java.lang.String)
Constructor類中部分其餘方法:
public T newInstance(Object ... initargs) 建立並初始化一個類的實例
public Annotation[] getDeclaredAnnotations() 獲取構造器上的全部註解
public <T extends Annotation> T getAnnotation(Class<T> annotationClass) 獲取指定名稱的註解