java.lang.Class類java
聲明:數組
public final class Class<T>extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement
T
- 由此 Class
對象建模的類的類型。例如, String.class
的類型是 Class<String>
。若是將被建模的類未知,則使用 Class<?>
。函數
Class 類的實例表示正在運行的 Java 應用程序中的類和接口。ui
枚舉是一種類,註釋是一種接口。spa
每一個數組屬於被映射爲 Class 對象的一個類,全部具備相同元素類型和維數的數組都共享該Class 對象。.net
基本的 Java 類型(boolean、byte、char、short、int、long、float 和double)和關鍵字 void 也表示爲 Class 對象。code
Class類沒有public構造方法。Class對象是在加載類時由Java 虛擬機以及經過調用類加載器中的defineClass 方法自動構造的。對象
在Java中,每一個class都有一個相應的Class對象。也就是說,當咱們編寫一個類,編譯完成後,在生成的.class文件中,就會產生一個 Class對象,用於表示這個類的類型信息。Class類不是咱們認爲建立的,是由java虛擬機,在咱們生成.class文件的時候建立的,咱們能夠通 過幾種方法,得到這個Class類實例。blog
Class 對象的三種獲取方法繼承
package com.tonyluis;
public class Test2 {
public static void main(String args[]) throws ClassNotFoundException {
Class<Test2> t1 = Test2.class;
Class<?> t2 = Class.forName("com.tonyluis.Test2");
Class<? extends Test2> t3 = new Test2().getClass();
System.out.println((t1 == t2) + " " + (t2 == t3));
//輸出true true
}
}
重要的幾個方法:
1, public static Class<?> forName(String className)
返回一個Class<?>對象,注意經過這個方法是不能肯定Class<?>裏面通配符?的類型的。
2,public T newInstance() :根據對象的class新建一個對象,經常使用於反射中構建對象,調用對象方法,注意該類需實現默認無參構造方法。
Class<?> doubleClass= Class.forName("java.lang.Double"); try { Double objDouble = (Double) doubleClass.newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }
3,public ClassLoader getClassLoader():
4,public String getName():
5,public native Class getSuperclass():獲取類的父類,Object的父類爲null
6,public java.net.URL getResource(String name)
解決 File File =new File("C:\\test.txt")絕對路徑問題,能夠得到相對路徑。
參考:http://blog.csdn.net/lcj8/article/details/3502849
7,其餘類
public boolean isEnum()
public native boolean isArray()
public native boolean isPrimitive()
public boolean isAnnotation()
public Package getPackage() :反射中得到package,如java.lang.Object 的package爲java.lang。
public native int getModifiers() : 反射中得到修飾符,如public static void等 。
public Field getField(String name):反射中得到域成員。
public Field[] getFields() :得到域數組成員。
public Method[] getMethods() :得到方法。
public Method getDeclaredMethod(String name, Class<?>... parameterTypes):加個Declared表明本類,繼承,父類均不包括。
public Constructor<?>[] getConstructors() :得到全部的構造函數。
其中Package、Field、Method方法均爲java.lang.reflect包裏的對象