1. 程式人生 > 實用技巧 >Jenkins封版合併Git程式碼

Jenkins封版合併Git程式碼

說說你對 Java 中反射的理解?

在執行狀態,

對於任意一個類,都能獲取這個類的所有屬性和方法,

對任意一個物件,都能呼叫它的任意屬性和方法。

這種動態獲取的資訊及動態呼叫物件的方法即為Java的反射

反射能做什麼?

在執行時判斷一個類所具有的成員變數和方法

在執行時判斷任意一個物件所屬的類

在執行時構造一個類的物件

在執行時呼叫任意一個物件的方法

動靜態代理的區別,什麼場景使用?

區別:

靜態代理通常只代理一個類,動態代理是代理一個介面下的多個實現類

靜態代理事先知道要代理的是什麼,而動態代理不知道要代理什麼東西,只有在執行時才知道。

動態代理是實現 JDK 裡的 InvocationHandler

介面的 invoke 方法,但注意的是代理的是介面,也就是你的業務類必須要實現介面,通過 Proxy 裡的 newProxyInstance 得到代理物件。
還有一種動態代理 CGLIB,代理的是類,不需要業務類繼承介面,通過派生的子類來實現代理。通過在執行時,動態修改位元組碼達到修改類的目的。

使用場景:

AOP 程式設計就是基於動態代理實現的,比如著名的 Spring 框架、Hibernate 框架等等都是動態代理的使用例子。

獲得一個類物件有哪些方式?

  • 型別.class,例如:String.class

  • 物件.getClass(),例如:"hello".getClass()

  • Class.forName(),例如:Class.forName("java.lang.String")