異常 垃圾對象等

有兩個多月沒寫了吧,沒堅持下來,趁着今天生日還沒過,更緊更新一下^=^

 

1.關於Java的拷貝

Java中沒有引用傳遞的說法,只有值傳遞,而且傳遞的只是一份拷貝。因爲傳遞的是拷貝,所以修改的往往只是拷貝的值,而原來的值沒有變化,但是對於對象引用的拷貝,拷貝的是內存中指向的對象的首地址,因此,通過拷貝修改了對象的內容之後,對象的內容是已經改變了的。三種情況如下:

(1)md.change3(date);  //假如讓date+1date修改的是拷貝的值,原來的值不變

System.out.println(date);

 

    (2)public void change1(Dog dog1){

      

       dog1.setDogAge(6);

    } //因爲都指向同一個對象,因此,通過拷貝修改對象,對象其實已經改變。

 

(3)public void change5(Dog dog){

      

       dog = new Dog("小黑",5);

    } //因爲新new了一個對象,所以這個時候是兩個對象,原來的對象不改變

   

 

2.沒有被引用的對象被稱爲垃圾對象。垃圾對象的三種情形:

(1) void go(){

Life  z = new Life();

}方法結束後滿足垃圾回收

(2) Life  z = new Life();

    z = new Life();原來指向的對象滿足垃圾回收

(3) Life  z = new Life();

z = null; 原來指向的對象滿足垃圾回收

 

 

 

3.異常.

(1)總述:

異常(Exception)是一種特殊的運行錯誤,是在程序運行過程中發生、會打斷程序正常執行的錯誤。Error類對象由Java虛擬機生成並拋出;

A 無法恢復

B OutOfMerroyError

Exception類對象由應用程序處理或拋出

(2)異常Throwable類:

分兩類:a.錯誤Error    OutOfMerroyError超出內存b.違例Exception

錯誤是沒有辦法的,只能重新啓動機器

違例又分爲:

A 編譯時的錯誤compile error有時也叫checkedException 

B 運行時的異常runtimeException有時也叫uncheckedException

編譯異常:SQLException

運行異常:ArithmeticException,NullPointerException,NumberFormatException

程序員只能處理違例,對錯誤無能爲力。

(3) 對於異常的處理:

捕獲異常通過try-catch-finally語句實現。getMessage()一般不用,一般用printStackTrace(),用來打印出異常。

A.如果try{ }塊中有多個異常,當執行到第一個異常時,系統會處理這個異常,其他的異常不會再處理,會被忽略。

B.catch語句塊中是對違例對象進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用於處理可能產生的不同類型的違例對象。與其它對象一樣,可以訪問一個違例對象的成員變量或調用它的方法。

C. 使用多重 catch 語句時,異常子類一定要位於異常父類之前。也就是說,異常的處理是按金字塔的形狀排列,最後的Exception父類放在最後。如果不按這個順序排列,將會出錯。

D.finally語句是任選的   捕獲例外的最後一步是通過finally語句爲例外處理提供一個統一的出口,使得在控制流轉到程序的其它部分以前,能夠對程序的狀態作統一的管理。不論在try代碼塊中是否發生了異常事件,finally塊中的語句都會被執行。

如果try或者catch塊有return 指令,finally還是會被執行,流程先跳到finally然後再回到return指令

E.格式:

try{

       ...... //可能產生違例的代碼

}catch( ExceptionName1 e ){

       ...... //當產生ExceptionName1型違例時的處置措施

}catch( ExceptionName2 e ){

......       //當產生ExceptionName2型違例時的處置措施

}  [ finally{

...... //無條件執行的語句

 

 

4.拋出異常

(1)聲明:throws,說明下面的代碼塊可能存在異常,但也可能沒有異常,當聲明瞭throws      的時候,可以不拋出throw,說明沒有異常。有throws就一定要執行try--catch--finally

(2)拋出:throw ,當拋出異常thorw後,一定要先在函數名裏聲明throws。然後用try--catch-       -finally來處理。但如果拋出的是運行時的異常如RuntimeException則不用在函數名裏聲明throws

(3)例子

public static void f1() throws Exception{

       throw new NullPointerException();

    }

 

 

5.自定義異常

自定義異常時,如果繼承的是Exception,則需要拋出異常,並且執行try--catch;如果繼承RuntimeException,則不能拋出異常,try--catch可執行也可以不執行。

例子:

public class ItIsAllMyFaultException extends RuntimeException{

 

    private String reason;

   

    public  ItIsAllMyFaultException(String reason){

      

       super(reason);

    }

==================================================================

public class ExceptionDemo {

 

   

    public static void main(String[] args) {

       /*try{

       withDrow();

       System.out.println("in the try method");

       }

       catch(ItIsAllMyFaultException e){

           System.out.println("This is my Exception!");

           e.printStackTrace();

       }

       finally{

           System.out.println("in the finally method");

       }*/

    withDrow();

   

   

    }

   

    public static void withDrow()throws ItIsAllMyFaultException{

      

       int i = 2000;

       int j = 4000;

       if(i<j){

          

//         throw new ItIsAllMyFaultException();

           System.out.println("=============");

       }

    }

 

}

 

發佈了26 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章