三十一、java Exception體系結構
java 異常是程序運行過程中出現(xiàn)的錯誤玲献。Java把異常當作對象來處理,并定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中定義了許多異常類,分為兩大類,錯誤Error和異常Exception棵譬。其中異常類Exception又分為運行時異常(RuntimeException)和非運行時異常(非runtimeException),也稱之為不檢查異常(Unchecked Exception)和檢查異常(Checked Exception)预伺。
1、Error與Exception
Error是程序無法處理的錯誤曼尊,比如OutOfMemoryError酬诀、ThreadDeath等。
這些異常發(fā)生時骆撇,Java虛擬機(JVM)一般會選擇線程終止瞒御。
Exception是程序本身可以處理的異常,這種異常分兩大類運行時異常和非運行時異常神郊。程序中應當盡可能去處理這些異常肴裙。
2、運行時異常和非運行時異常
運行時異常: 都是RuntimeException類及其子類異常: IndexOutOfBoundsException 索引越界異常
ArithmeticException:數(shù)學計算異常
NullPointerException:空指針異常
ArrayOutOfBoundsException:數(shù)組索引越界異常
ClassNotFoundException:類文件未找到異常
ClassCastException:造型異常(類型轉換異常)
這些異常是不檢查異常(Unchecked Exception)涌乳,程序中可以選擇捕獲處理蜻懦,也可以不處理。這些異常一般是由程序邏輯錯誤引起的夕晓。
非運行時異常:是RuntimeException以外的異常宛乃,類型上都屬于Exception類及其子類。從程序語法角度講是必須進行處理的異常蒸辆,如果不處理征炼,程序就不能編譯通過。如:
IOException躬贡、文件讀寫異常
FileNotFoundException:文件未找到異常
EOFException:讀寫文件尾異常
MalformedURLException:URL格式錯誤異常
SocketException:Socket異常
SQLException:SQL數(shù)據(jù)庫異常
三十二谆奥、session和cookie的區(qū)別
session是存儲在服務器端,cookie是存儲在客戶端的拂玻,所以安全來講session的安全性要比cookie高酸些,然后我們獲取session里的信息是通過存放在會話cookie里的sessionid獲取的宰译。又 由于session是存放在服務器的內(nèi)存中,所以session里的東西不斷增加會造成服務器的負擔擂仍,所以會把很重要的信息存儲在session中囤屹,而把一些次要東西存儲在客戶端的cookie里,然后cookie確切的說分為兩大類分為會話cookie和持久化cookie逢渔,會話cookie確切的說是存放在客戶端瀏覽器的內(nèi)存中肋坚,所以說他的生命周期和瀏覽器是一致的,瀏覽器關了會話cookie也就消失了肃廓,然而持久化cookie是存放在客戶端硬盤中智厌,而持久化cookie的生命周期就是我們在設置cookie時候設置的那個保存時間,然后我們考慮一問題當瀏覽器關閉時session會不會丟失盲赊,從上面敘述分析session的信息是通過sessionid獲取的铣鹏,而sessionid是存放在會話cookie當中的,當瀏覽器關閉的時候會話cookie消失所以我們的sessionid也就消失了哀蘑,但是session的信息還存在服務器端诚卸,這時我們只是查不到所謂的session但它并不是不存在。那么绘迁,session在什么情況下丟失合溺,就是在服務
器關閉的時候,或者是sessio過期缀台,再或者調(diào)用了invalidate()的或者是我們想要session中的某一條數(shù)據(jù)消失調(diào)用session.removeAttribute()方法棠赛,然后session在什么時候被創(chuàng)建呢,確切的說是通過調(diào)用session.getsession來創(chuàng)建膛腐,這就是session與cookie的區(qū)別
三十三睛约、字節(jié)流與字符流的區(qū)別
stream結尾都是字節(jié)流,reader和writer結尾都是字符流
兩者的區(qū)別就是讀寫的時候一個是按字節(jié)讀寫哲身,一個是按字符辩涝。
實際使用通常差不多。
在讀寫文件需要對內(nèi)容按行處理勘天,比如比較特定字符膀值,處理某一行數(shù)據(jù)的時候一般會選擇字符流。
只是讀寫文件误辑,和文件內(nèi)容無關的沧踏,一般選擇字節(jié)流。
三十四巾钉、final,finally,finalize三者區(qū)別
Final是一個修飾符:
當final修飾一個變量的時候翘狱,變量變成一個常量,它不能被二次賦值
當final修飾的變量為靜態(tài)變量(即由static修飾)時砰苍,必須在聲明這個變 量的時候給它賦值
當final修飾方法時潦匈,該方法不能被重寫
當final修飾類時阱高,該類不能被繼承
Final不能修飾抽象類,因為抽象類中會有需要子類實現(xiàn)的抽 象方法茬缩,(抽 象類中可以有抽象方法赤惊,也可以有普通方法,當一個抽象類中沒有抽象方 法時凰锡,這個抽象類也就沒有了它存在的必要)
Final不能修飾接口未舟,因為接口中有需要其實現(xiàn)類來實現(xiàn)的方法
Finally:
Finally只能與try/catch語句結合使用,finally語句塊中的語句一定會執(zhí)行掂为, 并且會在return裕膀,continue,break關鍵字之前執(zhí)行
finalize:
Finalize是一個方法勇哗,屬于java.lang.Object類昼扛,finalize()方法是GC (garbage collector垃圾回收)運行機制的一部分,finalize()方法是在 GC清理它所從 屬的對象時被調(diào)用的
(finalize是Object類的一個方法欲诺,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法抄谐,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件時)