獲取類對象的四種方法


對於每一個類在加載時都會有一個唯一的Class對象,Class對象中包含了所有需要動態獲取的類的信息, 所以Class類是Reflection API 中的核心類 。

獲取Class對象的方法?

getClass
​
.class
​
Class.forName();
​
ClassLoader

 

native:本地的源碼就到頭了,再往下走:就不是java代碼

在JDK中,主要由以下類來實現Java反射機制,這些類都位於java.lang.reflect包中:

Class類:代表一個類。

Field 類:代表類的成員變量(成員變量也稱為類的屬性)。

Method類:代表類的方法。

Modifier類:代表修飾符。

lConstructor 類:代表類的構造方法。

Array類:提供了動態創建數組,以及訪問數組的元素的靜態方法。

 
        
obj.getClass();
​
class屬性
​
Class.forName();
​
ClassLoader

 

Demo1 獲取類對象的四種方式

`package demo1;
​
public class Demo1 {
​
   /**
​
    * @param args
​
    * @throws ClassNotFoundException 
​
    */public static void main(String[] args) throws ClassNotFoundException {
​
      //得到Class類對象的四種方法
//1.
​
      Object obj = new String();
​
      Class clz1 = obj.getClass();
  

  //2.
  Class clz2 = String.class;
  
  //3.
  Class clz3 = Class.forName("java.lang.String");
  
  //4.
  ClassLoader cl = ClassLoader.getSystemClassLoader();
  Class clz4 = cl.loadClass("java.util.ArrayList");
}

}

 



在JDK中,主要由以下類來實現Java反射機制,這些類都位於java.lang.reflect包中:

Class類:代表一個類。

Field 類:代表類的成員變量(成員變量也稱為類的屬性)。

Method類:代表類的方法。

Modifier類:代表修飾符。

Constructor 類:代表類的構造方法。

Array類:提供了動態創建數組,以及訪問數組的元素的靜態方法。

 

反射Student類的所有構造方法

 
        
package demo2;
​
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
​
public class Demo2 {
​
   /**
    * @param args
    * @throws NoSuchMethodException 
    * @throws SecurityException 
    * @throws InvocationTargetException 
    * @throws IllegalAccessException 
    * @throws InstantiationException 
    * @throws IllegalArgumentException 
    */
   public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
      // 反射String類的所有構造方法
      Class clz = Student.class;
​
      System.out.println("所有構造方法");
      // Constructor[] cons = clz.getConstructors();
      Constructor[] cons = clz.getDeclaredConstructors();
      for (Constructor con : cons) {
         // System.out.println("訪問修飾權限:" +
         // Modifier.toString(con.getModifiers()));
         // System.out.println("方法名:" + con.getName());
         // System.out.println("****************************");
         System.out.println(Modifier.toString(con.getModifiers()) + " "
               + con.getName());
      }
​
      
      //找無參的構造方法    Student s = new Student();
      Constructor con = clz.getDeclaredConstructor();
      Object obj = con.newInstance();
      System.out.println(obj);
      
      //找帶string,int類型參數的構造方法 Student s = new Student("zhangsan",12)
      con = clz.getDeclaredConstructor(String.class, int.class);
      obj = con.newInstance("zhangsan", 12);
      System.out.println(obj);
      
      con = clz.getDeclaredConstructor(String.class);
      
      
   }
​
}

雖然以上都是從老鄧的代碼心得復制過來的,因為我實在不知道寫什么了,學得一知半解,理解的也不全面,只能到處移植。

我本來是不打算學這個java的,其實也從來沒想過學有關計算機這方面的,可無奈一波三折,誤打誤撞就到了這里。

沒什么好說的,我這個人生無大志,不說碌碌無為也但求無過,既然來到了世上就好好走一趟。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM