反射、对象拷贝、异常常见问题总结
反射、對(duì)象拷貝、異常常見問題總結(jié)
目錄
反射:
對(duì)象拷貝
異常
1. 什么是反射?
反射是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為 Java 語(yǔ)言的反射機(jī)制。
2. 什么是 java 序列化?什么情況下需要序列化?
Java 序列化是為了保存各種對(duì)象在內(nèi)存中的狀態(tài),并且可以把保存的對(duì)象狀態(tài)再讀取出來。
以下情況?使用 Java 序列化:
- 想把內(nèi)存中的對(duì)象狀態(tài)保存到一個(gè)文件中或者數(shù)據(jù)庫(kù)中。
- 想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候
- 想通過 RMI(遠(yuǎn)程調(diào)用方法)傳輸對(duì)象的時(shí)候。
3. 動(dòng)態(tài)代理是什么?有哪些應(yīng)用?
動(dòng)態(tài)代理是運(yùn)行時(shí)動(dòng)態(tài)生成代理類
動(dòng)態(tài)代理的應(yīng)用有 spring aop,hibernate 數(shù)據(jù)查詢,測(cè)試框架的后端 mock、rpc、Java 注解對(duì)象獲取等。
4. 怎么實(shí)現(xiàn)動(dòng)態(tài)代理?
JDK 原生動(dòng)態(tài)代理和 cglib 動(dòng)態(tài)代理。JDK 原生動(dòng)態(tài)代理是基于接口實(shí)現(xiàn)的,而 cglib 是基于繼承當(dāng)前類的子類實(shí)現(xiàn)的。
5. 為什么要使用克隆?
克隆的對(duì)象可能包含一些已修改過的屬性,而 new 出來的對(duì)象的屬性還是初始化時(shí)候的值,所以當(dāng)需要一個(gè)新的對(duì)象來保存當(dāng)前對(duì)象的“狀態(tài)”就靠克隆方法了。
6. 如何實(shí)現(xiàn)對(duì)象克隆?
- 實(shí)現(xiàn) Cloneable 接口并重寫 Object 類中的 clone() 方法。
- 實(shí)現(xiàn) Serializable 接口,通過對(duì)象的序列化和反序列化實(shí)現(xiàn)克隆,可以實(shí)現(xiàn)真正的深度克隆。
7. 深拷貝和淺拷貝的區(qū)別是什么?
- 淺拷貝:當(dāng)對(duì)象被復(fù)制時(shí)只復(fù)制它本身和其中包含的值類型的成員變量,而引用類型的成員對(duì)象并沒有復(fù)制
- 深拷貝:除了對(duì)象本身被復(fù)制外,對(duì)象所包含的所有成員變量也將復(fù)制。
8. throw 和 throws 的區(qū)別?
- throw:是真實(shí)拋出一個(gè)異常。
- throws:是聲明可能會(huì)拋出一個(gè)異常。
9. final、finally、finalize 有什么區(qū)別?
- final:是修飾符,如果修飾類,此類不能被繼承;如果修飾方法和變量,則表示此方法和此變量不能被改變,只能使用。
- finally:是 try{} catch{} finally{} 最后一部分,表示不論發(fā)送任何情況都會(huì)執(zhí)行,finally 部分可以省略,但如果 finally 部分存在,則一定會(huì)執(zhí)行 finally 里面的代碼。
- finalize:是 Object 類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法。
10. try-catch-finally 中哪個(gè)部分可以省略?
try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同時(shí)省略,也就是說 try 的時(shí)候,必須后面跟一個(gè) catch 或者 finally。
11. try-catch-finally 中,如果 catch 中 return 了,finally 還會(huì)執(zhí)行么?
finally 一定會(huì)執(zhí)行,即使是 catch 中 return 了,catch 中的 return 會(huì)等 finally 中的代碼執(zhí)行完之后,才會(huì)執(zhí)行。
12. 常見的異常類有哪些?
- NullPointerException 空指針異常
- CalssNotFoundException 指定類不存在
- NumberFormatException 字符串轉(zhuǎn)換為數(shù)字異常
- IndexOutOfBoundsException 數(shù)組下標(biāo)越界異常
- ClassCastException 數(shù)據(jù)類型轉(zhuǎn)換異常
- FileNotFoundException 文件未找到異常
- NoSuchMethodException 方法不存在異常
- IOException IO 異常
- SocketException Socket異常
總結(jié)
以上是生活随笔為你收集整理的反射、对象拷贝、异常常见问题总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络知识点补充
- 下一篇: 多线程常见问题总结