java 異常 之 實戰篇(trows 和 try catch Dead Code),trowscatch

來源:互聯網
上載者:User

java 異常 之 實戰篇(trows 和 try catch Dead Code),trowscatch
一:throws 和 trycatch 區別

(1)例如,publicFileWriter(String fileName) throws IOException{}

我在mian中建立一個FileWrite對象
importjava.io.*;
publicclass ShengmingThrows {
     public static void main(String[] args){
         try{
         FileWriter fw=new FileWriter("k.txt");
         } catch(FileNotFoundException ex){}
    }
}
(2) 另一種處理方法:
importjava.io.*;
publicclass ShengmingThrows {
     public static void main(String[] args)throws IOException{
        //try{
         FileWriter fw=new FileWriter("k.txt");
       // }
       // catch(IOException e){}
    }
}
請解釋一下兩種操作的不同之處,throws只是聲明異常,異常並沒有處理throws只是對該類聲明會拋出一個異常,但沒有對異常進行捕獲,讓別的調用它的方法進行處理,

或者繼續拋出,拋給上一層函數或類的成員函數。。try catch是對可能出現異常的代碼捕獲異常並對其進行處理

throws只是聲明異常,異常並沒有處理
當然,try和catch也不是非要處理啊。
像代碼,
try{
        FileWriter fw=new FileWriter("k.txt");
        }
        catch(IOException e){}   //catch裡也是空的,它也沒有處理啊

二:拋出什麼異常,如捕獲多個異常

(1)完整代碼如下

File file = new File("d:\\a.txt");// 這個不是read的不會拋異常的,只有,有可能拋出相應的異常,才寫catch的,否則多餘的catch eclipse也會報錯的BufferedReader bf = new BufferedReader(new FileReader(file));//有可能拋異常catch(ParseException ex){// Date d1 = df.parse(tmp_date + t1);是由於parse函數拋出的異常,所以編程中可以根據函數的提示來書寫異常ex.printStackTrace();System.out.println("資料解析異常:" + ex);// log.warn("****" + ex);}public static void main(String[] args){DateFormat df = new SimpleDateFormat("yy-MM-dd HH:mm:ss");String t1 = "07:30:45";String t2 = "08:32:46";String tmp_date = "2014-04-01 ";try{File file = new File("d:\\a.txt");// 這個不是read的不會拋異常的,只有,有可能拋出相應的異常,才寫catch的,否則多餘的catch eclipse也會報錯的BufferedReader bf = new BufferedReader(new FileReader(file));Date d1 = df.parse(tmp_date + t1);Date d2 = df.parse(tmp_date + t2);//System.out.println("******" + d1.compareTo(d2));System.out.println(d1.getTime());System.out.println(d2.getTime());long diff = d2.getTime()-d1.getTime();long hour = diff/(1000*60*60);diff = diff%(1000*60*60);long minute = diff/(1000*60);diff = diff%(1000*60);long second = diff/1000;System.out.println("hour=" + hour + ", minute=" + minute + ", second=" + second);//2685000}catch(ParseException ex){// Date d1 = df.parse(tmp_date + t1)是由於parse函數拋出的異常,所以編程中可以根據函數的提示來書寫異常ex.printStackTrace();System.out.println("資料解析異常:" + ex);// log.warn("****" + ex);}catch(NullPointerException ex){ex.printStackTrace();System.out.println("null 指標異常:" + ex);// log.warn("****" + ex);}catch(IndexOutOfBoundsException ex){ex.printStackTrace();System.out.println("數組越界異常:" + ex);// log.warn("****" + ex);}catch(RuntimeException ex){ex.printStackTrace();System.out.println("運行時異常,NullPointerException IndexOutOfBoundsException 都是其子類" + ex);// log.warn("****" + ex);}catch(FileNotFoundException ex){ex.printStackTrace();System.out.println("檔案找不到異常:" + ex);// log.warn("****" + ex);}catch(IOException ex){ex.printStackTrace();System.out.println("IO讀取異常,是FileNotFoundException的父類" + ex);// log.warn("****" + ex);}catch(Exception ex){ex.printStackTrace();System.out.println("異常,上面各種異常的父類" + ex);// log.warn("****" + ex);}}}

(2)總之,因為Exception這個是那幾個異常的 父類或者基類!那幾個異常都是他的子類,Exception放在最前面後面就沒有機會了,其把所有的異常都捕獲了。

三:初遇Dead Code

(1) Dead Code引起的原因

經常使用MyEclipse或Eclipse編輯器編寫java代碼的程式員,可能經常遇到一個黃線警告提示:dead code;一般程式員遇到這些問題都會置之不理,反正也不影響程式的

編譯執行。對,這不是bug,只是一個提示,對於一個有強迫症的程式員來說,他非要代碼一點問題都沒有,包括黃線警告都要消滅掉,這裡簡單說下dead code 即死代

碼、無作用的代碼提示的原因和解決方案。

顧名思義,無作用程式碼,即你編寫的那一行是無效代碼,可有可無,說白了就是一行廢話;這是你就要看一下這一行的處理邏輯是什麼,可能是多餘判斷或者其他多餘代碼;比

如如下情況:

(2)情況一:沒用的條件判斷,就是你判斷的這個條件永遠為真

if (true& true) {

    System.out.println("execute ok");

  } else {

    System.out.println("executefail");

  }

 從else開始即為無作用。因為true&true在編繹時即知結果,所以else部分是無用的,編譯器知道肯定不會執行的代碼。

換成:

boolean a =true;

  boolean b = true;

  if (a & b) {

    System.out.println("execute ok");

  } else {

    System.out.println("executefail");

  }

則不會出現該問題,因為在編譯時間編譯器不確定a & b是否恒成立。

(2)情況二:多餘的判斷,就是你判斷的這個對象永遠不為空白;其實類似於情況一

  TimeLineEventModel dataModel = new TimeLineEventModel();

if(dataModel !=null){

    執行一些操作....

}

這裡的判斷也是多餘,因為你已經new了這個對象,那這個對象就不會為空白,你剛剛new的對象,怎麼會為空白呢?

未完待續,可能還有其他一些情況的無作用程式碼,等到時候編碼遇見了再進行補充吧!目前來看,deadcode提示一般出現在if或其他判斷的條件上。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.