Java中的反射——(1)什么是反射


Java程序中的各個Java類屬於同一類事物,描寫敘述這類事物的Java類名就是Class.

public class ReflectTest {
	public static void main(String[] args) throws ClassNotFoundException {
		String str1 = "abc";
		Class cls1 = String.class;
		Class cls2 = str1.getClass();
		Class cls3 = Class.forName("java.lang.String");
		
		System.out.println(cls1 == cls2);
		System.out.println(cls2 == cls3);
	}
}
獲取Class類的實例方法有三種:

1、類名.class

2、對象.getClass()

3、Class.forName("String path);

上面樣例中兩個返回都是true,我們能夠看到三種方式獲取到的Class類的實例是同樣的。每個類型就是一個Class類的實例對象。

以下我們再來看看Class類的isPrimitive()方法:


public class ReflectTest {
	public static void main(String[] args) throws ClassNotFoundException {
		String str1 = "abc";
		Class cls1 = String.class;
		Class cls2 = str1.getClass();
		Class cls3 = Class.forName("java.lang.String");
		
		System.out.println(cls1 == cls2);
		System.out.println(cls2 == cls3);
		
		System.out.println(cls1.isPrimitive());
		System.out.println(int.class.isPrimitive());
		System.out.println(int.class == Integer.class);
		System.out.println(int.class == Integer.TYPE);
	}
}
執行結果:

從上面結果能夠看到,Integer類型的字節碼和int類型的字節碼不是同一個,在Java中有九種提前定義的 Class 對象。表示八個基本類型和 void。這些類對象由 Java 虛擬機創建,與其表示的基本類型同名。即 booleanbytecharshortintlongfloatdouble

 

除過Integer.TYPE外,還有:Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE

僅僅要在源程序中出現的類型,都有各自的Class實例對象,推斷的方法例如以下:

反射就是把Java類中的各種成分映射成對應的Java類。

比如,一個Java類用一個Class類的對象來表示,一個類中的組成部分:成員變量,方法,構造方法,包等等信息也用一個個的Java類來表示,就像汽車是一個類。汽車中的發動機,變速箱也是一個個的類。表示Java類的Class類中提供了一系列的方法來獲取當中的變量(Field),方法(Method),構造方法(Contructor),修飾符,包(Package)等信息。





免責聲明!

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



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