Java面向物件-封裝、繼承、多型
阿新 • • 發佈:2020-09-08
說說你對 Java 中反射的理解?
在執行狀態,
對於任意一個類,都能獲取這個類的所有屬性和方法,
對任意一個物件,都能呼叫它的任意屬性和方法。
這種動態獲取的資訊及動態呼叫物件的方法即為Java的反射
反射能做什麼?
在執行時判斷一個類所具有的成員變數和方法
在執行時判斷任意一個物件所屬的類
在執行時構造一個類的物件
在執行時呼叫任意一個物件的方法
動靜態代理的區別,什麼場景使用?
區別:
靜態代理通常只代理一個類
,動態代理是代理一個介面下的多個實現類
。
靜態代理事先知道要代理的是什麼,而動態代理不知道要代理什麼東西,只有在執行時才知道。
動態代理是實現 JDK 裡的 InvocationHandler
invoke 方法
,但注意的是代理的是介面,也就是你的業務類必須要實現介面,通過 Proxy 裡的 newProxyInstance 得到代理物件。還有一種動態代理 CGLIB,代理的是類,不需要業務類繼承介面,通過派生的子類來實現代理。通過在執行時,動態修改位元組碼達到修改類的目的。
使用場景:
AOP 程式設計就是基於動態代理實現的,比如著名的 Spring 框架、Hibernate 框架等等都是動態代理的使用例子。
獲得一個類物件有哪些方式?
-
型別.class,例如:
String.class
-
物件.getClass(),例如:
"hello".getClass()
-
Class.forName(),例如:
Class.forName("java.lang.String")