final, finally, finalize 的區別?
final:修飾符(關鍵字)有三種用法:如果一個類被聲明為 final,意味著它不能再派生出新的子類,即不能被繼承,因此它和 abstract 是反義詞。將變量聲明為 final,可以保證它們在使用中不被改變,被聲明為 final 的變量必須在聲明時給定初值,而在以后的引用中只能讀取不可修改。被聲明為 final 的方法也同樣只能使用,不能在子類中被重寫。
finally:通常放在 try…catch 的后面構造總是執行代碼塊,這就意味著程序無論正常執行還是發生異常,這里的代碼只要 JVM 不關閉都能執行,可以將釋放外部資源的代碼寫在 finally 塊中。finalize:Object 類中定義的方法,Java 中允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在銷毀對象時調用的,通過重寫 finalize() 方法可以整理系統資源或者執行其他清理工作。
什么是反射?
在Java運行時環境中,對于任意一個類,能否知道這個類有哪些屬性和方法?對于任意一個對象,能否調用它的任意一個方法
Java反射機制主要提供了以下功能:
-
在運行時判斷任意一個對象所屬的類。
-
在運行時構造任意一個類的對象。
-
在運行時判斷任意一個類所具有的成員變量和方法。
-
在運行時調用任意一個對象的方法。
反射機制的優缺點
-
優點:
-
能夠運行時動態獲取類的實例,提高靈活性;
-
與動態編譯結合Class.forName('com.mysql.jdbc.Driver.class');//加載MySQL的驅動類
-
-
缺點:
-
使用反射性能較低,需要解析字節碼,將內存中的對象進行解析。
-
其解決方案是:通過setAccessible(true)關閉JDK的安全檢查來提升反射速度;多次創建一個類的實例時,有緩存會快很多;ReflflectASM工具類,通過字節碼生成的方式加快反射速度
-
Java反射API有幾類?
反射 API 用來生成 JVM 中的類、接口或則對象的信息。
-
Class 類:反射的核心類,可以獲取類的屬性,方法等信息。
-
Field 類:Java.lang.reflec 包中的類,表示類的成員變量,可以用來獲取和設置類之中的屬性值。
-
Method 類:Java.lang.reflec 包中的類,表示類的方法,它可以用來獲取類中的方法信息或者執行方法。
-
Constructor 類:Java.lang.reflec 包中的類,表示類的構造方法。