1. 程式人生 > >反射機制的概述和字節碼對象的獲取方式

反射機制的概述和字節碼對象的獲取方式

文件中 ref str found 方法 row java語言 讓我 通過

1.1.1 反射介紹
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法
對於任意一個對象,都能夠調用它的任意一個方法
這種動態獲取的以及動態調用對象的方法的功能稱為java語言的反射機制.

簡單來說, 就可以把.class文件比做動物的屍體, 而反射技術就是對屍體的一種解剖.
通過反射技術, 我們可以拿到該字節碼文件中所有的東西, 例如成員變量, 成員方法, 構造方法, 而且還包括私有
1.1.2 字節碼文件獲取的三種方式

  1. 對象名.getCalss(); // 次方法來自於Object 對象已經存在的情況下, 可以使用這種方式
  2. 類名.class // 類名.class這是一個靜態的屬性, 只要知道類名, 就可以獲取
  3. 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. 構造方法

反射機制的概述和字節碼對象的獲取方式