1. 程式人生 > 其它 >java常見面試題:反射

java常見面試題:反射

Java 常見面試題

反射

什麼是反射?

反射主要是指程式可以訪問、檢測和修改它本身狀態或行為的一種能力
Java反射:
在Java執行時環境中,對於任意一個類,能否知道這個類有哪些屬性和方法?對於任意一個物件,能否呼叫它的任意一個方法
Java反射機制主要提供了以下功能:
在執行時判斷任意一個物件所屬的類。
在執行時構造任意一個類的物件。
在執行時判斷任意一個類所具有的成員變數和方法。
在執行時呼叫任意一個物件的方法。

什麼是 java 序列化?什麼情況下需要序列化?

簡單說就是為了儲存在記憶體中的各種物件的狀態(也就是例項變數,不是方法),並且可以把儲存的物件狀態再讀出來。雖然你可以用你自己的各種各樣的方法來儲存object states,但是Java給你提供一種應該比你自己好的儲存物件狀態的機制,那就是序列化。
什麼情況下需要序列化:

  1. 當你想把的記憶體中的物件狀態儲存到一個檔案中或者資料庫中時候;
  2. 當你想用套接字在網路上傳送物件的時候;
  3. 當你想通過RMI傳輸物件的時候;

動態代理是什麼?有哪些應用?

動態代理:
當想要給實現了某個介面的類中的方法,加一些額外的處理。比如說加日誌,加事務等。可以給這個類建立一個代理,故名思議就是建立一個新的類,這個類不僅包含原來類方法的功能,而且還在原來的基礎上添加了額外處理的新類。這個代理類並不是定義好的,是動態生成的。具有解耦意義,靈活,擴充套件性強。
動態代理的應用:
Spring的AOP
加事務
加許可權
加日誌

怎麼實現動態代理?

首先必須定義一個介面,還要有一個InvocationHandler(將實現介面的類的物件傳遞給它)處理類。再有一個工具類Proxy(習慣性將其稱為代理類,因為呼叫他的newInstance()可以產生代理物件,其實他只是一個產生代理物件的工具類)。利用到InvocationHandler,拼接代理類原始碼,將其編譯生成代理類的二進位制碼,利用載入器載入,並將其例項化產生代理物件,最後返回。