『壹』 java中throw和throws的區別
都是關鍵字
throw用於代碼當中拋出異常;throws用於方法名結尾定義方法拋出的異常類型。
例如
inta=1;
thrownewException();
system.out.println("a");
在throw這行控制台會報Exception異常,如果你new的是NullPointException就會報空指針異常,你拋什麼他報什麼。下面的輸出不會執行,程序終止。
如果使用了異常處理,例如
inta=1;
try{
a=2;
thrownewException();
a=3;
}catch(Exceptione){
systemt.out.println(a);
a=4;
}
system.out.println(a);
這樣在a賦2後手動拋異常,被catch捕獲,然後輸出a、a賦4,最終結果是輸出2、4。
而throws用途:
publicvoidmethod()throwsException{...}
這個方法被調用後,如果這個方法里出了錯,這個錯誤就會被拋給引用它的那個方法。在控制台就會看到一層一層拋上去的引用棧。
『貳』 JAVA閲岄潰鐨則hrow鏄鍋氫粈涔堢敤鐨勶紵錛熷疄闄呯紪紼嬩腑鏈変粈涔堟牱鐨勫簲鐢錛燂紵錛
throw鍏抽敭瀛楅氬父鐢ㄥ湪鏂規硶浣撲腑錛屽苟涓旀姏鍑轟竴涓寮傚父瀵硅薄銆
紼嬪簭鍦ㄦ墽琛屽埌throw璇鍙ユ椂絝嬪嵆鍋滄錛屽畠鍚庨潰鐨勮鍙ラ兘涓嶆墽琛屻
閫氳繃throw鎶涘嚭寮傚父鍚庯紝濡傛灉鎯沖湪涓婁竴綰т唬鐮佷腑鏉ユ崟鑾峰苟澶勭悊寮傚父錛
鍒欓渶瑕佸湪鎶涘嚭寮傚父鐨勬柟娉曚腑浣跨敤throws鍏抽敭瀛楀湪鏂規硶澹版槑涓鎸囨槑瑕佽窇鍑虹殑寮傚父錛
濡傛灉瑕佹崟鎹塼hrow鎶涘嚭鐨勫紓甯革紝鍒欏繀欏諱嬌鐢╰ry鈥攃atch璇鍙ャ
瀹為檯緙栫▼涓鐨勫簲鐢ㄤ篃闈炲父騫挎硾,姣斿備綘鎯沖皾璇曠潃璺戝嚭鏌愪釜寮傚父鏉ラ獙璇佹煇琛屼唬鐮佹垨鑰呮槸瑕佽窇鍑鴻嚜瀹氫箟鐨勫紓甯
,浣犲氨鍙浠ョ洿鎺throw new xxxException.榪樻湁鍦ㄤ竴涓搴炲ぇ鐨勯」鐩涓璬ebug鏄鍗佸垎涓嶆柟渚跨殑,浣犲彲浠ュ湪鏂規硶鍋氫釜鎷︽埅
try{
throw new NullPointerException();
}catch(NullPointerException e){
e.printStackTrace();
}
榪欐牱鍙浠ユ墦鍗板嚭鍫嗘爤淇℃伅,澶уぇ鏂逛究浜嗕綘瀵規暣涓鏂規硶鐨勭悊瑙.榪樻湁寰堝氱殑搴旂敤,浣犲彲浠ュ皾璇曠潃鍘誨彂鐜板摕銆
『叄』 java異常 throws與throw的用法
第一:throw最重要的用法,不是先捕獲再拋出,而是第一次拋出的時候,如
publicintdivide(inta,intb)throwsDivideZeroException{
if(b==0)
thrownewDivideZeroException("can'tdivide0");
returna/b;
}
然後:先捕獲再拋出,是這樣用的。
publicintdoSomeThing(intx,inty){
try{
inta=divide(x+y,x-y);
intb=divide(x-y,x+y);
returna*b;
}catch(DivideZeroExceptione){
thrownewRuntimeException("dosomethingerror",e);
}
}
而且也可以不拋出,在本級就處理了。
publicintdoSomeThing(intx,inty){
try{
inta=divide(x+y,x-y);
intb=divide(x-y,x+y);
}catch(DivideZeroExceptione){
Loggerlogger=Logger.getLogger(getClass());
logger.info("dosomethingerror",e);
return-1;
}
}
你問到:使用了throws的方法中即使沒有throw,也依然可以拋出異常啊
回答:那是因為拋出的異常不是你手動拋出的,而是來自於你調用的方法(其根源還是在這個方法中用throw拋出的,或者是這個方法調用的方法)。