更新時間:2019-07-12 09:52:57 來源:動力節點 瀏覽8417次
1.什么是反射?
反射是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為Java語言的反射機制。
2.哪里用到反射機制?
JDBC中,利用反射動態加載了數據庫驅動程序。
Web服務器中利用反射調用了Sevlet的服務方法。
Eclispe等開發工具利用反射動態刨析對象的類型與結構,動態提示對象的屬性和方法。
很多框架都用到反射機制,注入屬性,調用方法,如Spring。
3.什么叫對象序列化,什么是反序列化,實現對象序列化需要做哪些工作?
對象序列化,將對象中的數據編碼為字節序列的過程。
反序列化;將對象的編碼字節重新反向解碼為對象的過程。
JAVA提供了API實現了對象的序列化和反序列化的功能,使用這些API時需要遵守如下約定:
被序列化的對象類型需要實現序列化接口,此接口是標志接口,沒有聲明任何的抽象方法,JAVA編譯器識別這個接口,自動的為這個類添加序列化和反序列化方法。
為了保持序列化過程的穩定,建議在類中添加序列化版本號。
不想讓字段放在硬盤上就加transient
以下情況需要使用Java序列化:
想把的內存中的對象狀態保存到一個文件中或者數據庫中時候;
想用套接字在網絡上傳送對象的時候;
想通過RMI(遠程方法調用)傳輸對象的時候。
4.反射機制的優缺點?
優點:可以動態執行,在運行期間根據業務功能動態執行方法、訪問屬性,最大限度發揮了java的靈活性。
缺點:對性能有影響,這類操作總是慢于直接執行java代碼。
5.動態代理是什么?有哪些應用?
動態代理是運行時動態生成代理類。
動態代理的應用有SpringAOP數據查詢、測試框架的后端mock、rpc,Java注解對象獲取等。
6.怎么實現動態代理?
JDK原生動態代理和cglib動態代理。
JDK原生動態代理是基于接口實現的,而cglib是基于繼承當前類的子類實現的。
7.Java反射機制的作用
在運行時判斷任意一個對象所屬的類
在運行時構造任意一個類的對象
在運行時判斷任意一個類所具有的成員變量和方法
在運行時調用任意一個對象的方法
8.如何使用Java的反射?
通過一個全限類名創建一個對象
Class.forName(“全限類名”);例如:com.mysql.jdbc.DriverDriver類已經被加載到jvm中,并且完成了類的初始化工作就行了
類名.class;獲取Class<?>clz對象
對象.getClass();
獲取構造器對象,通過構造器new出一個對象
Clazz.getConstructor([String.class]);
Con.newInstance([參數]);
通過class對象創建一個實例對象(就相當與new類名()無參構造器)
Cls.newInstance();
通過class對象獲得一個屬性對象
Fieldc=cls.getFields():獲得某個類的所有的公共(public)的字段,包括父類中的字段。
Fieldc=cls.getDeclaredFields():獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的聲明字段
通過class對象獲得一個方法對象
Cls.getMethod(“方法名”,class……parameaType);(只能獲取公共的)
Cls.getDeclareMethod(“方法名”);(獲取任意修飾的方法,不能執行私有)
M.setAccessible(true);(讓私有的方法可以執行)
讓方法執行
1).Method.invoke(obj實例對象,obj可變參數);-----(是有返回值的)
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習