1. 程式人生 > >獲取class對象的三種方法以及通過Class對象獲取某個類中變量,方法,訪問成員

獲取class對象的三種方法以及通過Class對象獲取某個類中變量,方法,訪問成員

student 多種方法 多個 編譯錯誤 oid 單個 dex flex 調用

public class ReflexAndClass {

    public static void main(String[] args) throws Exception {
        
        /**
         * 獲取Class對象的三種方式
         * 1 Object ——> getClass();
         * 2 任何數據類型(包括基本數據類型)都有一個靜態的class屬性
         * 3 通過Class類的靜態方法:forName(String  className)(常用)
         * 
         * 
         * 註意:在運行期間,一個類,只有一個Class對象產生。
         * 三種方式常用第三種,第一種對象都有了還要反射幹什麽。第二種需要導入類的包,依賴太強,不導包就拋編譯錯誤。
         * 一般都第三種,一個字符串可以傳入也可寫在配置文件中等多種方法。
         * 
@throws Exception */ //第一種 getClass Student stu = new Student(); Class stuClass1 = stu.getClass(); System.out.println(stuClass1.getName()); //第二種 class屬性 Class stuClass2 = Student.class; System.out.println(stuClass2==stuClass1); //第三種
try { Class stuClass3 = Class.forName("reflex.Student");//student的路徑 System.out.println(stuClass3); } catch (ClassNotFoundException e) { e.printStackTrace(); } /**通過Class對象可以獲取某個類中的:構造方法、成員變量、成員方法;並訪問成員; * * 1.獲取構造方法: * 1).批量的方法: * public Constructor[] getConstructors():所有"公有的"構造方法 * public Constructor[] getDeclaredConstructors():獲取所有的構造方法(包括私有、受保護、默認、公有) * * 2).獲取單個的方法,並調用: * public Constructor getConstructor(Class... parameterTypes):獲取單個的"公有的"構造方法: * public Constructor getDeclaredConstructor(Class... parameterTypes):獲取"某個構造方法"可以是私有的,或受保護、默認、公有; * * 調用構造方法: * Constructor-->newInstance(Object... initargs) * 獲取私有的構造方法的時候需要使用setAccessible設置訪問權限為true才能進行構造,否則出現異常
*/ Class<?> clazz = Class.forName("reflex.Student"); Constructor[] public1 = clazz.getConstructors(); System.out.println("公有構造方法"); for(Constructor con : public1){ System.out.println(con); } Constructor[] public2 = clazz.getDeclaredConstructors(); System.out.println("所有構造方法"); for(Constructor con : public2){ System.out.println(con); } Constructor con = clazz.getConstructor(null); System.out.println("公有無參:" + con); Constructor cons = clazz.getDeclaredConstructor(String.class); System.out.println("所有無參公有構造方法"+cons); Object name = clazz.getDeclaredConstructor(String.class).newInstance("chen"); Student s = new Student(); System.out.println("名稱為:" + name); //調用構造方法 Object obj = con.newInstance(); // System.out.println("obj = " + obj); // Student student = (Student)obj; } }
public class Student {
    
        //---------------構造方法-------------------
        //(默認的構造方法)
        Student(String str){
            System.out.println("(默認)的構造方法 s = " + str);
        }
        
        //無參構造方法
        public Student(){
            System.out.println("調用了公有、無參構造方法執行了。。。");
        }
        
        //有一個參數的構造方法
        public Student(char name){
            System.out.println("姓名:" + name);
        }
        
        //有多個參數的構造方法
        public Student(String name ,int age){
            System.out.println("姓名:"+name+"年齡:"+ age);//這的執行效率有問題,以後解決。
        }
        
        //受保護的構造方法
        protected Student(boolean n){
            System.out.println("受保護的構造方法 n = " + n);
        }
        
        //私有構造方法
        private Student(int age){
            System.out.println("私有的構造方法   年齡:"+ age);
        }
    
}

獲取class對象的三種方法以及通過Class對象獲取某個類中變量,方法,訪問成員