国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

哪家做網(wǎng)站靠譜企業(yè)營銷策劃

哪家做網(wǎng)站靠譜,企業(yè)營銷策劃,商業(yè)網(wǎng)站開發(fā)設(shè)計(jì)報(bào)告,一家做公司點(diǎn)評(píng)網(wǎng)站目錄 一.異常的概念 二.異常的體系結(jié)構(gòu) 三.異常的處理 異常處理思路 LBYL:Look Before You Leap EAFP: Its Easier to Ask Forgiveness than Permission 異常拋出throw 異常的捕獲 提醒聲明throws try-catch捕獲處理 finally的作用 四.自定義異常類 一.異…


目錄

一.異常的概念

二.異常的體系結(jié)構(gòu)

三.異常的處理

異常處理思路

LBYL:Look Before You Leap

EAFP: It's Easier to Ask Forgiveness than Permission

異常拋出throw

異常的捕獲

提醒聲明throws

?try-catch捕獲處理

finally的作用

四.自定義異常類


一.異常的概念

有一句話說的很好 ”程序員不是在寫B(tài)UG就是在改BUG” ,在日常開發(fā)中,程序員絞盡腦汁的去寫出完美的代碼,但是在程序運(yùn)行過程中難免回遇見一些奇奇怪怪的問題。而這些問題與BUG總是很難去控制,用人類的思維去看明明是很完美的一個(gè)邏輯處理,但是交給編譯器就產(chǎn)生的結(jié)果總會(huì)與我們的預(yù)期大相徑庭,在Java中,我們將程序執(zhí)行過程中發(fā)生的不正常的行為稱為異常,比如什么算數(shù)異常啊,數(shù)組越界異常啊,空指針異常啊這都屬于異常的范圍,我們統(tǒng)稱為異常

        System.out.println(10 / 0);// 執(zhí)行結(jié)果Exception in thread "main" java.lang.ArithmeticExceptionint[] arr1 = {1, 2, 3};System.out.println(arr1[100]);// 執(zhí)行結(jié)果Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExceptionint[] arr2 = null;System.out.println(arr2.length);// 執(zhí)行結(jié)果Exception in thread "main" java.lang.NullPointerException

并且我們可以看見在Java中對(duì)于不同的異常,都有對(duì)應(yīng)的類來描述


二.異常的體系結(jié)構(gòu)

實(shí)際上異常的種類是很多的,為了應(yīng)對(duì)不同的異常或者錯(cuò)誤,Java提供了一個(gè)非常龐大的異常體系機(jī)構(gòu)供程序員來更好的維護(hù)代碼的安全性,如下圖所示

異??赡馨l(fā)生在編譯階段,可能發(fā)生在運(yùn)行階段,因此我們可以按照異常發(fā)生的時(shí)間段將其進(jìn)行分類:

  • 編譯時(shí)異常,也叫做受查異常
  • 運(yùn)行時(shí)異常,也叫做非受查異常?

但是諸如將單詞拼寫錯(cuò)誤導(dǎo)致的問題我們程序出現(xiàn)問題的情況不屬于異常


三.異常的處理

代碼中存在異常并不是什么奇怪的事情,但是在出現(xiàn)異常后,我們需要及時(shí)通知程序員去修改,對(duì)于異常的處理,我們分為倆種思路

異常處理思路

LBYL:Look Before You Leap

也就是說我們在操作之前就對(duì)異常做出充分的檢查,也就是事先防御型,比如我們?cè)谠O(shè)計(jì)一款游戲的時(shí)候,我們就需要對(duì)其中可能發(fā)生的每一個(gè)錯(cuò)誤做出處理機(jī)制和避免機(jī)制

        boolean ret = false;ret = loginGame();if (!ret) {//處理登陸游戲錯(cuò)誤;return;}ret = startMatch();if (!ret) {//處理匹配錯(cuò)誤;return;}ret = conGame();if (!ret) {//處理游戲確認(rèn)錯(cuò)誤;return;}ret = choiceChar();if (!ret) {//處理選擇英雄錯(cuò)誤;return;}ret = loading();if (!ret) {//處理載入游戲錯(cuò)誤;return;}

但這樣的處理會(huì)有一個(gè)缺陷:正常流程和錯(cuò)誤處理流程代碼混在一起, 代碼整體顯的比較混亂

EAFP: It's Easier to Ask Forgiveness than Permission

這樣的思想主要解決的問題不是如何提前避免異常,而是在異常出現(xiàn)以后如何進(jìn)行合理的應(yīng)對(duì)

        try {loginGame();startMatch();conGame();choiceChar();loading();} catch (loginGame異常) {//處理登陸游戲錯(cuò)誤;} catch (startMatch異常) {//處理匹配錯(cuò)誤;} catch (conGame異常) {//處理游戲確認(rèn)錯(cuò)誤;} catch (choiceChar異常) {//處理選擇英雄錯(cuò)誤;} catch (loading異常) {//處理載入游戲錯(cuò)誤;}

在Java中對(duì)于異常處理的核心機(jī)制就是EAFP,Java中常用的有5個(gè)異常處理的關(guān)鍵字

  • throw
  • try
  • catch
  • final
  • throws

異常拋出throw

在Java中,可以借助throw關(guān)鍵字,拋出一個(gè)指定的異常對(duì)象,將錯(cuò)誤信息告知給調(diào)用者。具體語法如下:

throw?new?XXXException?("異常產(chǎn)生的原因");

示例:?

    public static int getElement(int[] array, int index){if(null == array){throw new NullPointerException("傳遞的數(shù)組為null");}if(index < 0 || index >= array.length){throw new ArrayIndexOutOfBoundsException("傳遞的數(shù)組下標(biāo)越界");}return array[index];}public static void main(String[] args) {int[] array = {1, 2, 3};getElement(array, 3);}

?注意:

  1. throw必須寫在方法體內(nèi)部
  2. 拋出的對(duì)象必須是Exception 或者 Exception 的子類對(duì)象
  3. 如果拋出的是 RunTimeException 或者 RunTimeException的子類,則可以不用處理,直接交給JVM來處理
  4. 如果拋出的是編譯時(shí)異常,用戶必須處理,否則無法通過編譯
  5. 異常一旦拋出,其后的代碼就不會(huì)執(zhí)行

異常的捕獲

異常的捕獲就是指我們對(duì)異常的處理,通常我們有倆種方式去處理:

  • 異常聲明throws
  • try-catch捕獲處理

提醒聲明throws

處在方法聲明時(shí)參數(shù)列表之后,當(dāng)方法中拋出編譯時(shí)異常,用戶不想處理該異常,此時(shí)就可以借助throws將異常拋給方法的調(diào)用者來處理。也就是說當(dāng)前方法不處理異常提醒方法的調(diào)用者處理異常

語法格式:

修飾符 返回值類型 方法名?(參數(shù)列表) throws 異常類型1,異常類型2...{

}

public class Config {File file;/*FileNotFoundException : 編譯時(shí)異常,表明文件不存在此處不處理,也沒有能力處理,應(yīng)該將錯(cuò)誤信息報(bào)告給調(diào)用者,讓調(diào)用者檢查文件名字是否給錯(cuò)誤了*/public void OpenConfig(String filename) throws FileNotFoundException {if (filename.equals("config.ini")) {throw new FileNotFoundException("配置文件名字不對(duì)");}// 打開文件}
}

注意事項(xiàng):

  • throws必須跟在方法參數(shù)列表之后
  • 拋出的問題必須是Exception 或者 Exception的子類對(duì)象
  • 方法內(nèi)部如果拋出了多個(gè)異常,throws之后必須跟多個(gè)異常類型,之間用逗號(hào)隔開,如果拋出多個(gè)異常類型具有父子關(guān)系,直接聲明父類即可
  • 調(diào)用聲明拋出的異常方法時(shí),調(diào)用者必須對(duì)異常做出處理,或者繼續(xù)使用throws拋出

示例:?

class Config {File file;// FileNotFoundException 繼承自 IOExceptionpublic void OpenConfig(String filename) throws IOException {if(filename.endsWith(".ini")){throw new IOException("文件不是.ini文件");}if(filename.equals("config.ini")){throw new FileNotFoundException("配置文件名字不對(duì)");}// 打開文件}public void readConfig(){}public void openConfig(String s) {}public static void main(String[] args) throws IOException {Config config = new Config();config.openConfig("config.ini");}
}

?try-catch捕獲處理

剛才我們提到的throws并沒有對(duì)異常做出處理,他只是將異常報(bào)給調(diào)用者,讓調(diào)用者去處理,而如果要對(duì)異常真正的處理就需要使用try-catch。

try-catch的一般使用語法如下,其中catch:可以有一個(gè)也可以有多個(gè),根據(jù)具體需求分配,finally可以有也可以沒有,但是如果有的話finally中的代碼就一定會(huì)執(zhí)行,并且try中的代碼也可以不出現(xiàn)異常:

try{// 將可能出現(xiàn)異常的代碼放在這里}catch(要捕獲的異常類型 e){// 如果try中的代碼拋出異常了,此處catch捕獲時(shí)異常類型與try中拋出的異常類型一致時(shí)//或者是try中拋出異常的基類時(shí),就會(huì)被捕獲到//對(duì)異常就可以正常處理,處理完成后,跳出try-catch結(jié)構(gòu),繼續(xù)執(zhí)行后序代碼}catch(異常類型 e){// 對(duì)異常進(jìn)行處理}finally{// 此處代碼一定會(huì)被執(zhí)行到}
}

示例:

class Config {File file;public void openConfig(String filename) throws FileNotFoundException{if(!filename.equals("config.ini")){throw new FileNotFoundException("配置文件名字不對(duì)");}// 打開文件}public void readConfig(){}public static void main(String[] args) {Config config = new Config();try {config.openConfig("config.txt");System.out.println("文件打開成功");} catch (IOException e) {// 異常的處理方式//System.out.println(e.getMessage()); // 只打印異常信息//System.out.println(e); // 打印異常類型:異常信息e.printStackTrace(); // 打印信息最全面}// 一旦異常被捕獲處理了,此處的代碼會(huì)執(zhí)行System.out.println("異常如果被處理了,這里的代碼也可以執(zhí)行");}
}

注意:

  • ?try塊內(nèi)拋出異常位置之后的代碼將不會(huì)被執(zhí)行
  • ?如果拋出異常類型與catch時(shí)異常類型不匹配,即異常不會(huì)被成功捕獲,也就不會(huì)被處理,繼續(xù)往外拋,直到JVM收到后中斷程序----異常是按照類型來捕獲的
  • ?try中可能會(huì)拋出多個(gè)不同的異常對(duì)象,則必須用多個(gè)catch來捕獲----即多種異常,多次捕獲
  • 如果異常之間具有父子關(guān)系,一定是子類異常在前catch,父類異常在后catch,否則語法錯(cuò)誤

finally的作用

在寫程序時(shí),有些特定的代碼,不論程序是否發(fā)生異常,都需要執(zhí)行,比如程序中打開的資源:網(wǎng)絡(luò)連接、數(shù)據(jù)庫連接、IO流等,在程序正?;蛘弋惓M顺鰰r(shí),必須要對(duì)資源進(jìn)進(jìn)行回收。另外,因?yàn)楫惓?huì)引發(fā)程序的跳轉(zhuǎn),可能導(dǎo)致有些語句執(zhí)行不到,finally就是用來解決這個(gè)問題的。

關(guān)于異常的處理方式,異常的種類有很多,我們要根據(jù)不同的業(yè)務(wù)場(chǎng)景來決定

  • 對(duì)于比較嚴(yán)重的問題(例如和算錢相關(guān)的場(chǎng)景), 應(yīng)該讓程序直接崩潰, 防止造成更嚴(yán)重的后果
  • 對(duì)于不太嚴(yán)重的問題(大多數(shù)場(chǎng)景), 可以記錄錯(cuò)誤日志, 并通過監(jiān)控報(bào)警程序及時(shí)通知程序猿
  • 對(duì)于可能會(huì)恢復(fù)的問題(和網(wǎng)絡(luò)相關(guān)的場(chǎng)景), 可以嘗試進(jìn)行重試
  • 在我們當(dāng)前的代碼中采取的是經(jīng)過簡化的第二種方式. 我們記錄的錯(cuò)誤日志是出現(xiàn)異常的方法調(diào)用信息, 能很快速的讓我們找到出現(xiàn)異常的位置. 以后在實(shí)際工作中我們會(huì)采取更完備的方式來記錄異常信息

四.自定義異常類

Java中雖然已經(jīng)內(nèi)置了豐富的異常類, 但是并不能完全表示實(shí)際開發(fā)中所遇到的一些異常,此時(shí)就需要維護(hù)符合我們實(shí)際情況的異常結(jié)構(gòu),自定義異常通常會(huì)繼承自 ExceptionRunTimeException

  • 繼承自 Exception 的異常默認(rèn)是受查異常
  • 繼承自 RunTimeException 的異常默認(rèn)是非受查異常

具體方式:

  1. 自定義異常類,然后繼承自Exception 或者 RunTimeException
  2. 實(shí)現(xiàn)一個(gè)帶有String類型參數(shù)的構(gòu)造方法,參數(shù)含義:出現(xiàn)異常的原因

例如我們實(shí)現(xiàn)一個(gè)用戶登陸功能:?

class UserNameException extends Exception {public UserNameException(String message) {super(message);}
}
class PasswordException extends Exception {public PasswordException(String message) {super(message);}
}
class LogIn {private String userName = "admin";private String password = "123456";public static void loginInfo(String userName, String password)throws UserNameException,PasswordException{if (!userName.equals(userName)) {throw new UserNameException("用戶名錯(cuò)誤!");}if (!password.equals(password)) {throw new PasswordException("用戶名錯(cuò)誤!");}System.out.println("登陸成功");}public static void main(String[] args) {try {loginInfo("admin", "123456");} catch (UserNameException e) {e.printStackTrace();} catch (PasswordException e) {e.printStackTrace();}}
}



?本次的分享就到此為止了,希望我的分享能給您帶來幫助,也歡迎大家三連支持,你們的點(diǎn)贊就是博主更新最大的動(dòng)力!如有不同意見,歡迎評(píng)論區(qū)積極討論交流,讓我們一起學(xué)習(xí)進(jìn)步!有相關(guān)問題也可以私信博主,評(píng)論區(qū)和私信都會(huì)認(rèn)真查看的,我們下次再見

http://m.aloenet.com.cn/news/1231.html

相關(guān)文章:

  • 福清網(wǎng)站建設(shè)百度收錄批量提交入口
  • 海門做網(wǎng)站自動(dòng)優(yōu)化句子的軟件
  • 數(shù)據(jù)分析師簡歷襄陽網(wǎng)站推廣優(yōu)化技巧
  • 北京住房城鄉(xiāng)建設(shè)部網(wǎng)站八大員千萬不要去電商公司上班
  • 可以在哪些網(wǎng)站做翻譯兼職建立企業(yè)網(wǎng)站步驟
  • 天津平臺(tái)網(wǎng)站建設(shè)推薦廣告營銷平臺(tái)
  • 成都旅游景點(diǎn)攻略自由行攻略關(guān)鍵詞優(yōu)化seo公司
  • 西安微網(wǎng)站建設(shè)百度一下 你就知道官網(wǎng)
  • 網(wǎng)站開發(fā)需要考什么證網(wǎng)絡(luò)營銷渠道有哪三類
  • 南陽做網(wǎng)站的公怎樣進(jìn)行網(wǎng)絡(luò)營銷吸引顧客
  • 商標(biāo)被注冊(cè)了做網(wǎng)站國外網(wǎng)站推廣公司
  • 建筑工程外架安全網(wǎng)西安的網(wǎng)絡(luò)優(yōu)化公司
  • 做算法題的 網(wǎng)站成品網(wǎng)站貨源1
  • 網(wǎng)站建設(shè)策劃實(shí)訓(xùn)總結(jié)友情鏈接怎么連
  • 遵義新藍(lán)外國語學(xué)校網(wǎng)站建設(shè)臺(tái)州seo優(yōu)化
  • 郴州北湖區(qū)疫情最新消息網(wǎng)站優(yōu)化
  • 建設(shè)企業(yè)網(wǎng)站進(jìn)去無法顯示怎么在百度上免費(fèi)做廣告
  • 如何通過做網(wǎng)站月入上萬廣州seo公司品牌
  • 溫州建設(shè)網(wǎng)站百度上海總部
  • 天津企商網(wǎng)站建設(shè)公司關(guān)鍵詞優(yōu)化按天計(jì)費(fèi)
  • 網(wǎng)站如何做銀聯(lián)在線支付大連中小企業(yè)網(wǎng)絡(luò)營銷
  • 一般做外貿(mào)上什么網(wǎng)站熱狗網(wǎng)站排名優(yōu)化外包
  • 建設(shè)網(wǎng)站com艾滋病阻斷藥
  • 網(wǎng)站robots.txt檢測(cè)網(wǎng)站關(guān)鍵詞在線優(yōu)化
  • 用html5做的個(gè)人網(wǎng)站網(wǎng)絡(luò)營銷試卷及答案
  • python合適做網(wǎng)站嗎海外網(wǎng)絡(luò)推廣方案
  • 做網(wǎng)站圖片百度競價(jià)排名系統(tǒng)
  • 網(wǎng)站 默認(rèn)首頁濟(jì)南seo的排名優(yōu)化
  • 商城開發(fā)價(jià)格服務(wù)排名優(yōu)化百度
  • 和先鋒影音和做的網(wǎng)站百度關(guān)鍵詞排名推廣