Java基礎(三)

異常與異常處理

1、Java異常機制用到的幾個關鍵字:try、catch、finally、throw、throws

    try -- 用於監聽。將要被監聽的代碼(可能拋出異常的代碼)放在try語句塊之內,當try語句塊內發生異常時,異常就被拋出。

    catch   -- 用於捕獲異常。catch用來捕獲try語句塊中發生的異常。

    finally  -- finally語句塊總是會被執行。它主要用於回收在try塊裏打開的物力資源(如數據庫連接、網絡連接和磁盤文件)。只有                         finally塊,執行完成之後,纔會回來執行try或者catch塊中的return或者throw語句,如果finally中使用了return或者throw                     等終止方法的語句,則就不會跳回執行,直接停止。

    throw   -- 用於拋出異常。

    throws -- 用在方法簽名中,用於聲明該方法可能拋出的異常。主方法上也可以使用throws拋出。如果在主方法上使用了throws                      拋出,就表示在主方法裏面可以不用強制性進行異常處理,如果出現了異常,就交給JVM進行默認處理,則此時會導                        致程序中斷執行。

2、三種類型的異常

     檢查性異常:最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程序員無法預見的。例如要打開一個不存在文件時,                               一個異常就發生了,這些異常在編譯時不能被簡單地忽略

     運行時異常:運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異常可以在編譯時被忽略。

     錯誤:錯誤不是異常,而是脫離程序員控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們                    在編譯也檢查不到的   

3、異常的根接口Throwable,其下有2個子接口,Error和Exception。

     Error:指的是JVM錯誤,這時的程序並沒有執行,無法處理;

     Exception:指的是程序運行中產生的異常,用戶可以使用處理格式處理。

     

4、異常的處理方案

    try...catch、try...catch...finally、try...finally
    try{
        可能會發生的異常
    }catch(異常類型 異常名(變量)){
        針對異常進行處理的代碼
    }catch(異常類型 異常名(變量)){
        針對異常進行處理的代碼
    }...
    [finally{
        釋放資源代碼;
    }]

注意:

catch 不能獨立於 try 存在。
catch裏面不能沒有內容
在 try/catch 後面添加 finally 塊並非強制性要求的。
try 代碼後不能既沒 catch 塊也沒 finally 塊。
try裏面越少越好。
try, catch, finally 塊之間不能添加任何代碼。
finally裏面的代碼最終一定會執行(除了JVM退出)
如果程序可能存在多個異常,需要多個catch進行捕獲。
異常如果是同級關係,catch誰前誰後沒有關係
如果異常之間存在上下級關係,上級需要放在後面

5、自定義異常

    在 Java 中你可以自定義異常。如果要自定義異常類,則擴展Exception類即可,因此這樣的自定義異常都屬於檢查異常(checked          exception)。如果要自定義非檢查異常,則擴展自RuntimeException。

    按照國際慣例,自定義的異常應該總是包含如下的構造函數

  • 一個無參構造函數
  • 一個帶有String參數的構造函數,並傳遞給父類的構造函數。
  • 一個帶有String參數和Throwable參數,並都傳遞給父類構造函數
  • 一個帶有Throwable 參數的構造函數,並傳遞給父類的構造函數。

   下面是IOException類的完整源代碼,可以借鑑。

    
    

    finally塊和return

    (1)、首先一個不容易理解的事實:在 try塊中即便有return,break,continue等改變執行流的語句,finally也會執行。
    (2)、finally中的return 會覆蓋 try 或者catch中的返回值。
    (3)、finally中的return或異常會抑制(消滅)前面try或者catch塊中的異常。

 

Java中的字符串

1、String

      (1)、String對象創建後則不能修改,是不可變的,所謂的修改是創建了新的對象,所指向內存空間不同。

      (2)、一旦一個字符串在內存中創建,則這個字符串將不可改變。如果需要一個可以改變的字符串,我們可以使用StringBuffer或               者StringBuilder

     (3)、每次 new 一個字符串就是產生一個新的對象,即便兩個字符串的內容相同,使用 ”==” 比較時也爲 ”false” ,如果只需比較內               容是否相同,應使用 ”equals()” 方法,對象實體比較,通過重寫Object中的equals方法來比較。

     (4)、String常用的類

             

             字符串 str 中字符的索引從0開始,範圍爲 0 到 str.length()-1;使用 indexOf 進行字符或字符串查找時,如果匹配返回位置               索引;如果沒有匹配結果,返回 -1

      (5)、“==” 和 equals() 有什麼區別:

               ”==“是判斷兩個字符串在內存中首地址是否相同,即判斷是否是同一個字符串對象。

              ”equals“比較存儲在兩個字符串對象中的內容是否一致。

              字節是計算機存儲信息的基本單位,1 個字節等於 8 位, gbk 編碼中 1 個漢字字符存儲需要 2 個字節,1 個英文字符存儲                需要 1個字節。

2、StringBuilder 或 StringBuffe

     當頻繁操作字符串,不停的創建對象就會額外產生很多的臨時變量,使用StringBuilder 或 StringBuffe就會避免這個問題。至於         StringBuilder 和StringBuffer ,它們基本相似,不同之處,StringBuffer 是線程安全的,而 StringBuilder 則沒有實現線程安全功         能,所以性能略高。因此一般情況下,如果需要創建一個內容可變的字符串對象,應優先考慮使用 StringBuilder 類。

          

Java中必須瞭解的常用類

1、包裝類

     基本數據類型是不具備對象的特性的,比如基本類型不能調用方法、功能簡單。。。,爲了讓基本數據類型也具備對象的特             性,Java爲每個基本數據類型都提供了一個包裝類,這樣我們就可以像操作對象那樣來操作基本數據類型。

     

    包裝類主要提供兩大類的方法:

    (1)、將本類型和其他基本類型進行轉換的方法

    (2)、將字符串和基本類型及包裝類互相轉換的方法

2、日期類:Date(java.util) 和 SimpleDateFormat(java.text)

    (1)、使用 format() 方法將日期轉換爲指定格式的文本

             

    (2)、使用 parse() 方法將文本轉換爲日期(調用 SimpleDateFormat 對象的 parse() 方法時可能會出現轉換異常,即                                    ParseException , 因此需要進行異常處理)

             

3、Calendar 類(處理日期)

   (1)、java.util.Calendar 類是一個抽象類,可以通過調用 getInstance() 靜態方法獲取一個 Calendar 對象,此對象已由當前日期時             間初始化,即默認代表當前時間,如 Calendar c = Calendar.getInstance();

           

           

4、Math 類

   Math 類位於 java.lang 包中,包含用於執行基本數學運算的方法, Math 類的所有方法都是靜態方法,所以使用該類中的方法           時,可以直接使用類名.方法名,如: Math.round()

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章