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

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

JAVA基礎--如何通過異常處理錯誤

瀏覽:3日期:2022-08-31 14:18:18

《Thinking in Java》上對這章的講解不少,可見重要性,學習和總結一些主要的記錄下來。

一、創建自定義異常

package Exception; class SimpleException extends Exception{} public class InheritingException{ public void f() throws SimpleException { System.out.println('Throw SimpleException from f()'); throw new SimpleException(); } public static void main(String[] args) { InheritingException sed = new InheritingException(); try { sed.f(); } catch (SimpleException e) { e.printStackTrace(); } } }

輸出:

Throw SimpleException from f()Exception.SimpleExceptionat Exception.InheritingException.f(InheritingException.java:10)at Exception.InheritingException.main(InheritingException.java:19)

throw與throws的區別與詳情

編譯器創建了默認構造器,它將自動調用基類的默認構造器。

對異常來說,最重要的部分就是類名,其它也沒用,可以增加一個帶參的構造方法。

比如NullPointerException:

public class NullPointerException extends RuntimeException { private static final long serialVersionUID = 5162710183389028792L; /** * Constructs a {@code NullPointerException} with no detail message. */ public NullPointerException() { super(); } /** * Constructs a {@code NullPointerException} with the specified * detail message. * * @param s the detail message. */ public NullPointerException(String s) { super(s); } }二、捕獲異常

1)try塊

如果在方法內部拋出了異常(或者在方法內部調用的其他方法拋出了異常),這個方法將在拋出異常的過程中結束。

要是不希望方法就此結束,可以在方法內設置一個特殊的塊來捕獲異常。

try{ //exceptions }

2)異常處理程序

異常處理程序緊跟在try塊之后,以關鍵字catch表示:

try{ //exceptions } catch(Type1 id1) { //Type1 } catch(Type2 id2) { //Type2}

當異常被拋出時,異常處理機制將負責搜尋參數與異常類型相匹配的第一個處理程序。然后進入catch子句執行,此時認為異常得到了處理。

注意,只有匹配的catch子句才能得到執行,這與switch語句不同。

3)棧軌跡

printStackTrace()方法所提供的信息可以通過getStackTrace()方法來直接訪問,這個方法將返回一個由棧軌跡中的元素所構成的數組,其中每一個元素都表示

棧中的一幀。元素0是棧頂元素,并且是調用序列中的最后一個方法調用。數組中最后一個元素和棧底是調用序列中的第一個方法調用。

public class WhoCalled { static void f() { try { throw new Exception(); } catch (Exception e) { for(StackTraceElement ste : e.getStackTrace()) { System.out.println('line: ' + ste.getLineNumber() + ' method: ' + ste.getMethodName()); } } } static void g() {f();} static void h() {g();} public static void main(String[] args) {f();g();h();} }

程序輸出:

line: 5 method: fline: 14 method: mainline: 5 method: fline: 12 method: gline: 14 method: mainline: 5 method: fline: 12 method: gline: 13 method: hline: 14 method: main

三、Java標準異常

Throwable這個Java類被用來表示任何可以作為異常被拋出的類。

Throwable對象可分為兩種類型:

1 Error用來表示編譯時和系統錯誤。

2 Exception是可以被拋出的基本類型,程序員關心的基類型通常是Exception。

四、RuntimeException

if(t == null) { throw new NullPointerException(); }

如果對Null引用進行調用,Java會自動拋出NullPointerException異常,所以上述代碼是多余的,它屬于Java的標準運行時檢測的一部分:

public class NeverCaught { static void f() { throw new RuntimeException(); } static void g() {f();} public static void main(String[] args) { g(); } }

輸出:

Exception in thread 'main' java.lang.RuntimeException

at Exception.NeverCaught.f(NeverCaught.java:6)

at Exception.NeverCaught.g(NeverCaught.java:10)

at Exception.NeverCaught.main(NeverCaught.java:14)

從輸出可以發現,RuntimeException是一個特例,對于這種異常類型,編譯器不需要異常說明,其輸出被報告給了System.err。

如果RuntimeException沒有被捕獲而直達main(),那么在程序退出前將調用異常的printStackTrace()方法。

*注意:

只能在代碼中忽略RuntimeException(及其子類)類型的異常,其它異常類型的處理都是由編譯器強制實施的。

1)常見的五種RuntimeException

NullPointerException - 空指針引用異常

ClassCastException - 類型強制轉換異常

IllegalArgumentException - 傳遞非法參數異常

ArithmeticException - 算術運算異常

ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常

IndexOutOfBoundsException - 下標越界異常

NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常

NumberFormatException - 數字格式異常

SecurityException - 安全異常

UnsupportedOperationException - 不支持的操作異常

五、使用finally進行清理

class ThreeException extends Exception {} public class FinallyWorks { static int count = 0; public static void main(String[] args) { while(true) { try { if(count++ == 0) { throw new ThreeException(); } System.out.println('No exception'); } catch (ThreeException e) { System.out.println('ThreeException'); } finally { System.out.println('In finally clause'); if(count == 2) break; } } } }

這個程序給了我們一些思路(確實。。),如果把try塊放在循環里,就建立了一個“程序繼續執行之前必須要到達”的條件。

還可以加入一個static類型的計數器或者別的裝置,使循環在放棄之前能夠嘗試一定的次數。這將使程序的健壯性更上一個臺階(好叼的樣子)。

1)finally用來做什么

當要把除內存之外的資源恢復到它們的初始狀態時,就要用到finally子句。

2)在return中使用finally

因為finally子句總是會執行的,所以在一個方法中,可以從多個點返回,并且可以保證重要的清理工作仍舊會執行:

class ThreeException extends Exception {} public class FinallyWorks { static int count = 0; public static void main(String[] args) { while(true) { try { if(count++ == 0) { throw new ThreeException(); } System.out.println('No exception'); return; } catch (ThreeException e) { System.out.println('ThreeException'); } finally { System.out.println('In finally clause'); if(count == 3) break; } } } }

第一次循環,首先執行第7行,符合條件,拋出異常,執行catch塊,最后執行finally清理,不符合第16行判斷,繼續循環

第二次循環,不符合第7行判斷,拋出異常,并return,但依舊執行finally清理,不符合第16行判斷,但try塊中已經執行return,所以程序結束,輸出:

ThreeExceptionIn finally clauseNo exceptionIn finally clause

3)Java異常的缺憾:異常丟失

public class ExceptionSilencer { public static void main(String[] args) { try { throw new RuntimeException(); } finally { return; } } }

以上就是JAVA基礎--如何通過異常處理錯誤的詳細內容,更多關于JAVA 通過異常處理錯誤的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 重庆LED显示屏_显示屏安装公司_重庆LED显示屏批发-彩光科技公司 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 家用净水器代理批发加盟_净水机招商代理_全屋净水器定制品牌_【劳伦斯官网】 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 高温高压釜(氢化反应釜)百科 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 成都中天自动化控制技术有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 |