反射機制的概述和字節碼對象的獲取方式
阿新 • • 發佈:2019-04-02
文件中 ref str found 方法 row java語言 讓我 通過 1.1.1 反射介紹
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法
對於任意一個對象,都能夠調用它的任意一個方法
這種動態獲取的以及動態調用對象的方法的功能稱為java語言的反射機制.
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法
對於任意一個對象,都能夠調用它的任意一個方法
這種動態獲取的以及動態調用對象的方法的功能稱為java語言的反射機制.
簡單來說, 就可以把.class文件比做動物的屍體, 而反射技術就是對屍體的一種解剖.
通過反射技術, 我們可以拿到該字節碼文件中所有的東西, 例如成員變量, 成員方法, 構造方法, 而且還包括私有
1.1.2 字節碼文件獲取的三種方式
- 對象名.getCalss(); // 次方法來自於Object 對象已經存在的情況下, 可以使用這種方式
- 類名.class // 類名.class這是一個靜態的屬性, 只要知道類名, 就可以獲取
- Class.forName(“com.itheima_01.Student”); // 通過Class類中的靜態方法, 指定字符串, 該字符串是類的全類名(包名+類名)
// 此處將會拋出異常都系 ClassNotFoundException 防止傳入錯誤的類名
1.1.3 案例代碼package com.itheima_01;
/*
-
反射:
-
在運行時,我們可以獲取任意一個類的所有方法和屬性
-
在運行時,讓我們調用任意一個對象的所有方法和屬性
-
反射的前提:
-
要獲取類的對象(Class對象)
-
*/
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
// 通過Object的getClass()方法獲取,必須要有對象
Student s = new Student();
Class clazz = s.getClass();
// 通過類名獲取字節碼對象
Class clazz2 = Student.class;
// static Class<?> forName(String className)
Class clazz3 = Class.forName("com.itheima_01.Student");
System.out.println(clazz == clazz2);
System.out.println(clazz == clazz3);
System.out.println(clazz);
}
}
1.1.4 問題: 字節碼對象是用來描述什麽的?
用來描述.class文件的.
面向對象階段的時候講過java中描述事物都是通過類的形式
而字節碼文件也可以看做為一種事物, 如何描述這種事物? 那就看看這個事物是由什麽組成的了
1. 成員變量
2. 成員方法
3. 構造方法
反射機制的概述和字節碼對象的獲取方式