电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java catch與throw同時使用的操作

瀏覽:7日期:2022-08-16 11:42:09
一、應用背景

在實際應用中,處理異常往往需要更加復雜的處理——當一個異常出現(xiàn)時,單靠某個方法無法完全處理該異常,必須由幾個方法協(xié)作才能完全處理該異常,也就是說,在異常出現(xiàn)的當前方法中,程序只能對異常進行部分處理,還有些處理需要在方法的調用者中才能完成,所以應該再次拋出異常,讓該方法的調用者也能捕獲到異常。

為了實現(xiàn)這種通過多個方法協(xié)作處理同一異常的情形,可以catch塊中結合throw語句來完成。

二、應用舉例1 代碼示例

AuctionTest.java

public class AuctionTest{private double initPrice = 30.0;// 因為該方法中顯式拋出了AuctionException異常,// 所以此處需要聲明拋出AuctionException異常public void bid(String bidPrice)throws AuctionException{double d = 0.0;try{d = Double.parseDouble(bidPrice);}catch (Exception e){// 此處完成本方法中可以對異常執(zhí)行的修復處理,// 此處僅僅是在控制臺打印異常跟蹤棧信息。e.printStackTrace();// 再次拋出自定義異常throw new AuctionException('競拍價必須是數(shù)值,'+ '不能包含其他字符!');}if (initPrice > d){throw new AuctionException('競拍價比起拍價低,'+ '不允許競拍!');}initPrice = d;}public static void main(String[] args){AuctionTest at = new AuctionTest();try{at.bid('df');}catch (AuctionException ae){// 再次捕捉到bid方法中的異常。并對該異常進行處理System.err.println(ae.getMessage());}}}

AuctionException.java

public class AuctionException extends Exception{ // 無參數(shù)的構造器 public AuctionException(){} //① // 帶一個字符串參數(shù)的構造器 public AuctionException(String msg) //② { super(msg); }}2 運行結果

java.lang.NumberFormatException: For input string: 'df' at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224) at java.lang.Double.parseDouble(Double.java:510) at AuctionTest.bid(AuctionTest.java:16) at AuctionTest.main(AuctionTest.java:39)

競拍價必須是數(shù)值,不能包含其他字符!

3 結果說明

上面程序bid對應catch塊捕獲到異常后,系統(tǒng)打印了該異常的跟蹤棧信息,接著拋出一個AuctionException異常,通知該方法調用者再次處理AuctionException異常。

所有程序中的main方法,也就是bid方法調用者再次捕獲AuctionException異常并將該異常詳細描述信息輸出到標準錯誤輸出。

補充:Java try-catch、throw和throws的幾點想法

以前寫代碼,很少用到異常,后來發(fā)現(xiàn)這種習慣是錯的。異常也是一種信息,并不是錯誤。

1:先寫個簡單的類:

package com.exception.demo;public class Main { public static void main(String[] args) { Main main = new Main(); } public void methodTry() { } public void methodThrow() { }}

初始環(huán)境就是這么簡答。

2:下面給方法methodTry加上方法主體:

public static void main(String[] args) { Main main = new Main(); main.methodTry(); } public void methodTry() { int a=10; int b=0; int c=a/b; }

剛開始學代碼的時候都會寫這個方法,會拋出一個異常:

Java catch與throw同時使用的操作

控制臺很清楚的告訴我們,被除數(shù)不能為0.但是如果我們想自己獲取這個異常,然后做些操作呢?比如說 如果這個方法體有問題,我就做一個輸出。

public void methodTry() { try { int a=10; int b=0; int c=a/b; System.out.println(c); } catch (Exception e) { System.out.println('這個方法體有問題:'+e.getMessage()); } }

這個時候就用到了try-catch,手動的捕獲這個異常,然后進行我們需要的操作。畢竟異常分很多種,并不是所有的異常都是我們不需要的。

比如說對用戶登錄來說,登錄成功 登錄失敗兩種結果,登錄失敗又分為重復登錄,賬號密碼不匹配等。

我們可以把這些失敗全都寫成Exception。當成功的時候就直接返回,失敗的時候拋出異常,這個可比我們寫好多返回值簡單多了。

接著說try-catch

Java catch與throw同時使用的操作

我們手動的捕獲了這個異常。上面的代碼告訴我們,當try-catch塊中有異常時,異常后面的代碼是不會執(zhí)行的。try-catch還有什么好處?回滾。

3:throw

public static void main(String[] args) { Main main = new Main(); main.methodThrow(); } public void methodThrow() { throw new Exception('這里有異常'); }

其實當我簡單的拋出個異常的時候,throw new Exception()這里會報錯,現(xiàn)在看一個報錯信息:

Java catch與throw同時使用的操作

顯示讓我們選擇是throws 還是try-catch。

我們寫好的throw是什么意思呢? 其實跟a/0是一個意思,都是拋出一個異常,只不過一個是jdk已經(jīng)定義好的異常,被除數(shù)不能為0.一個是我們手動拋出的異常。

先用try-catch試試看

public void methodThrow() { try { throw new Exception('這里有異常'); } catch (Exception e) { System.out.println('MethodThrow:'+e.getMessage()); } }

Java catch與throw同時使用的操作

重點在于手動拋出異常后,我們要在catch中進行處理,在catch中寫我們的部門邏輯代碼。

4:throws

剛才我們選擇的是try-catch,現(xiàn)在選擇throws

public static void main(String[] args) throws Exception { Main main = new Main(); main.methodThrow(); } public void methodThrow() throws Exception { throw new Exception('這里有異常'); }

方法methodThrow throws Exception之后,他的父類就面臨著兩種情況,要么try-catch 要么throws這個異常。這種情況跟methodThrow中手動拋出異常遇到的問題是一樣的。

看來可以這么理解:

throw是手動拋出異常,跟 被除數(shù)不能為0 數(shù)組下標越界等異常一樣,都是異常。

try-catch是在catch中手動捕獲異常,然后進行一些操作。比如說輸出異常信息,打印錯誤日志等。

throws是往上級拋出異常,我的方法methodThrow有異常,但是在這個方法中我不進行處理了,讓上級進行處理吧。然后就跑到main函數(shù)那去了。

對main函數(shù)來說,可以throws讓系統(tǒng)進行處理,也可以自己處理這個異常啊。

main.methodThrow()和a/0 、throw new Execption()沒什么區(qū)別,都是有異常。

其實可以整體的寫:

public static void main(String[] args){ Main main = new Main(); try { main.methodThrow(); } catch (Exception e) { System.out.println(e.getMessage()); } } public void methodThrow() throws Exception { throw new Exception('這里有異常'); }

方法中的異常,到main函數(shù)中再進行處理。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
主站蜘蛛池模板: 短信营销平台_短信群发平台_106短信发送平台-河南路尚 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 聚丙烯酰胺_厂家_价格-河南唐达净水材料有限公司 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 玻璃瓶厂家_酱菜瓶厂家_饮料瓶厂家_酒瓶厂家_玻璃杯厂家_徐州东明玻璃制品有限公司 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 南京泽朗生物科技有限公司| PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 广州迈驰新GMP兽药包装机首页_药品包装机_中药散剂包装机 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 四川实木门_成都实木门 - 蓬溪聚成门业有限公司 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 百度网站优化,关键词排名,SEO优化-搜索引擎营销推广 | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 动环监控_机房环境监控_DCIM_机房漏水检测-斯特纽 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 列管冷凝器,刮板蒸发器,外盘管反应釜厂家-无锡曼旺化工设备有限公司 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 |