Java Class類及反射機制

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包裏的對象

相關文章
相關標籤/搜索