最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java異常學(xué)習(xí)之自定義異常詳解

 更新時(shí)間:2017年06月21日 09:39:36   作者:AlanLee(Java)  
你的程序總有一天會(huì)崩潰掉,在崩潰掉的時(shí)候我們要知道它在哪,為了什么而崩潰掉,數(shù)據(jù)的保存或者丟失情況如何等問題。下面這篇文章主要給大家介紹了關(guān)于Java異常學(xué)習(xí)之自定義異常的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

前言

哎呀,又出異常了!俗話說:“代碼虐我千百遍,我待代碼如初戀”。

小Alan最近一直在忙著工作,已經(jīng)很久沒有寫寫東西來(lái)加深自己的理解了,今天來(lái)跟大家聊聊Java異常。Java異常的體系什么的,理論知識(shí)啥的我就懶得去BB太多了,是個(gè)搞Java開發(fā)的都知道,只是可能理解的不深,這個(gè)大家可以自己多看看資料,我就簡(jiǎn)單的說說。

常說我們?nèi)说淖孀谑窃常惓xception的祖宗那就是Throwable類了,除了Exception類外,Throwable還有一個(gè)子類Error 。Error這玩意就不說了,你如果遇到了它你可以把電腦砸了,呼呼呼...跟大家開個(gè)玩笑,反正這玩意不是我們程序能處理的,它在程序處理的范疇之外。至于異常Exception又分為傻傻啥的,我就不BB了,再BB就B到這上面了。

給大家隨便列舉幾個(gè)異常:

RuntimeException:你不能跑得足夠快,可能因?yàn)槟闾至?。關(guān)掉你的電腦,出門鍛煉吧。

IndexOutOfBoundsException:你把食指放在了無(wú)法接收的地方,重新放置,再試一次。

FileNotFoundException:一名木匠應(yīng)該總是知道他的工具放在哪里。

NotSerializableException:你正試圖把一部電影改成電視劇。

這什么鬼?反正我是沒看懂。還好今天我要理解的對(duì)象不是上面的這些玩意,搞錯(cuò)對(duì)象就不好了,看看就好了,但是別亂搞,男人都懂的,嘖..嘖..嘖...。

自定義異常

今天我們要來(lái)理解的是什么是自定義異常,為什么要使用自定義異常,使用自定義異常有哪些好處,有哪些不好的地方?

要使用自定義異常就跟你和女朋友相處一樣的,首先你得知道你為什么要跟你女朋友在一起,你女朋友有哪些好處,有哪些不好的地方,再來(lái)和你女朋友談婚論嫁過一輩子,我們就先來(lái)說說這些問題,最后再來(lái)看怎么使用自定義異常,自定義異常的實(shí)現(xiàn)和使用非常簡(jiǎn)單,關(guān)鍵還是理解why的內(nèi)容。

為什么要使用自定義異常,有什么好處?

      1.我們?cè)诠ぷ鞯臅r(shí)候,項(xiàng)目是分模塊或者分功能開發(fā)的 ,基本不會(huì)你一個(gè)人開發(fā)一整個(gè)項(xiàng)目,使用自定義異常類就統(tǒng)一了對(duì)外異常展示的方式。

      2.有時(shí)候我們遇到某些校驗(yàn)或者問題時(shí),需要直接結(jié)束掉當(dāng)前的請(qǐng)求,這時(shí)便可以通過拋出自定義異常來(lái)結(jié)束,如果你項(xiàng)目中使用了SpringMVC比較新的版本的話有控制器增強(qiáng),可以通過@ControllerAdvice注解寫一個(gè)控制器增強(qiáng)類來(lái)攔截自定義的異常并響應(yīng)給前端相應(yīng)的信息(關(guān)于springMVC控制器增強(qiáng)的知識(shí)有空再和大家分享)。

      3.自定義異??梢栽谖覀冺?xiàng)目中某些特殊的業(yè)務(wù)邏輯時(shí)拋出異常,比如"中性".equals(sex),性別等于中性時(shí)我們要拋出異常,而Java是不會(huì)有這種異常的。系統(tǒng)中有些錯(cuò)誤是符合Java語(yǔ)法的,但不符合我們項(xiàng)目的業(yè)務(wù)邏輯。

      4.使用自定義異常繼承相關(guān)的異常來(lái)拋出處理后的異常信息可以隱藏底層的異常,這樣更安全,異常信息也更加的直觀。自定義異??梢話伋鑫覀冏约合胍獟伋龅男畔ⅲ梢酝ㄟ^拋出的信息區(qū)分異常發(fā)生的位置,根據(jù)異常名我們就可以知道哪里有異常,根據(jù)異常提示信息進(jìn)行程序修改。比如空指針異常NullPointException,我們可以拋出信息為“xxx為空”定位異常位置,而不用輸出堆棧信息。

說完了為什么要使用自定義異常,有什么好處,我們?cè)賮?lái)看看自定義異常的毛?。?/strong>

毋庸置疑,我們不可能期待JVM(Java虛擬機(jī))自動(dòng)拋出一個(gè)自定義異常,也不能夠期待JVM會(huì)自動(dòng)處理一個(gè)自定義異常。發(fā)現(xiàn)異常、拋出異常以及處理異常的工作必須靠編程人員在代碼中利用異常處理機(jī)制自己完成。這樣就相應(yīng)的增加了一些開發(fā)成本和工作量,所以項(xiàng)目沒必要的話,也不一定非得要用上自定義異常,要能夠自己去權(quán)衡。

最后,我們來(lái)看看怎么使用自定義異常:

在 Java 中你可以自定義異常。編寫自己的異常類時(shí)需要記住下面的幾點(diǎn)。

       •所有異常都必須是 Throwable 的子類。

       •如果希望寫一個(gè)檢查性異常類,則需要繼承 Exception 類。

       •如果你想寫一個(gè)運(yùn)行時(shí)異常類,那么需要繼承 RuntimeException 類。

可以像下面這樣定義自己的異常類:

class MyException extends Exception{ }

我們來(lái)看一個(gè)完整的實(shí)例:

package com.czgo.exception;

/**
 * 自定義異常類(繼承運(yùn)行時(shí)異常)
 * @author AlanLee
 * @version 2016/11/26
 */
public class MyException extends RuntimeException {

 private static final long serialVersionUID = 1L;

 /**
  * 錯(cuò)誤編碼
  */
 private String errorCode;

 /**
  * 消息是否為屬性文件中的Key
  */
 private boolean propertiesKey = true;

 /**
  * 構(gòu)造一個(gè)基本異常.
  *
  * @param message
  *   信息描述
  */
 public MyException(String message)
 {
  super(message);
 }

 /**
  * 構(gòu)造一個(gè)基本異常.
  *
  * @param errorCode
  *   錯(cuò)誤編碼
  * @param message
  *   信息描述
  */
 public MyException(String errorCode, String message)
 {
  this(errorCode, message, true);
 }

 /**
  * 構(gòu)造一個(gè)基本異常.
  *
  * @param errorCode
  *   錯(cuò)誤編碼
  * @param message
  *   信息描述
  */
 public MyException(String errorCode, String message, Throwable cause)
 {
  this(errorCode, message, cause, true);
 }

 /**
  * 構(gòu)造一個(gè)基本異常.
  *
  * @param errorCode
  *   錯(cuò)誤編碼
  * @param message
  *   信息描述
  * @param propertiesKey
  *   消息是否為屬性文件中的Key
  */
 public MyException(String errorCode, String message, boolean propertiesKey)
 {
  super(message);
  this.setErrorCode(errorCode);
  this.setPropertiesKey(propertiesKey);
 }

 /**
  * 構(gòu)造一個(gè)基本異常.
  *
  * @param errorCode
  *   錯(cuò)誤編碼
  * @param message
  *   信息描述
  */
 public MyException(String errorCode, String message, Throwable cause, boolean propertiesKey)
 {
  super(message, cause);
  this.setErrorCode(errorCode);
  this.setPropertiesKey(propertiesKey);
 }

 /**
  * 構(gòu)造一個(gè)基本異常.
  *
  * @param message
  *   信息描述
  * @param cause
  *   根異常類(可以存入任何異常)
  */
 public MyException(String message, Throwable cause)
 {
  super(message, cause);
 }
 
 public String getErrorCode()
 {
  return errorCode;
 }

 public void setErrorCode(String errorCode)
 {
  this.errorCode = errorCode;
 }

 public boolean isPropertiesKey()
 {
  return propertiesKey;
 }

 public void setPropertiesKey(boolean propertiesKey)
 {
  this.propertiesKey = propertiesKey;
 }
 
}

使用自定義異常拋出異常信息:

package com.czgo.exception;

public class MyExceptionTest {

 public static void main(String[] args) {
  
   String[] sexs = {"男性","女性","中性"};
   for(int i = 0; i < sexs.length; i++){
    if("中性".equals(sexs[i])){
     throw new MyException("你!");
    }else{
     System.out.println(sexs[i]);
    }
   } 
 }
}

運(yùn)行結(jié)果:

就是這么簡(jiǎn)單,我的話實(shí)現(xiàn)了很多構(gòu)造函數(shù),可以根據(jù)實(shí)際業(yè)務(wù)需求去拋出相應(yīng)的自定義異常。

結(jié)束語(yǔ)

現(xiàn)在搞軟件開發(fā)的人越來(lái)越多了,高手?jǐn)?shù)不勝數(shù),菜鳥也數(shù)不勝數(shù),把這行的行情攪的比較混亂。所以初入這行的哥們一定要有危機(jī)意識(shí)。公司都想要工資開的不高,又能做一大把事情的人,搞開發(fā)很累,但是在當(dāng)前的環(huán)境下,一定要不斷的去提高自己。到了洗牌的時(shí)候,可能被淘汰的人里面就有你,除非你去做別的,不然就硬著頭皮干幾年把技術(shù)搞扎實(shí),該復(fù)習(xí)的知識(shí)就多多復(fù)習(xí),該學(xué)習(xí)的知識(shí)就多多學(xué)習(xí),基礎(chǔ)扎實(shí)了就去看看底層的東西,比如理解理解Java虛擬機(jī),研究研究Spring源碼。多關(guān)注關(guān)注前沿技術(shù)的發(fā)展,因?yàn)槟悻F(xiàn)在所用的東西或許某一天大部分公司就不用了,或者根本滿足不了項(xiàng)目的需求,這都是有可能的。希望大家都能混出自己的一片天地,小Alan現(xiàn)在也還在吃土中,所以大家都在一起前行,這世界終究是屬于年輕人的,別氣餒。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 新手入門Jvm--Jvm垃圾回收

    新手入門Jvm--Jvm垃圾回收

    JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的
    2021-06-06
  • JavaWeb實(shí)現(xiàn)文件上傳功能詳解

    JavaWeb實(shí)現(xiàn)文件上傳功能詳解

    這篇文章主要介紹了JavaWeb實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SpringBoot2.X整合Spring-Cache緩存開發(fā)的實(shí)現(xiàn)

    SpringBoot2.X整合Spring-Cache緩存開發(fā)的實(shí)現(xiàn)

    本文主要介紹了SpringBoot2.X整合Spring-Cache緩存開發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 淺談java中集合的由來(lái),以及集合和數(shù)組的區(qū)別詳解

    淺談java中集合的由來(lái),以及集合和數(shù)組的區(qū)別詳解

    下面小編就為大家?guī)?lái)一篇淺談java中集合的由來(lái),以及集合和數(shù)組的區(qū)別詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-10-10
  • 通過Java實(shí)現(xiàn)對(duì)PDF頁(yè)面的詳細(xì)設(shè)置

    通過Java實(shí)現(xiàn)對(duì)PDF頁(yè)面的詳細(xì)設(shè)置

    這篇文章主要介紹了通過Java實(shí)現(xiàn)對(duì)PDF頁(yè)面的詳細(xì)設(shè)置,下面的示例將介紹通過Java編程來(lái)對(duì)PDF頁(yè)面進(jìn)行個(gè)性化設(shè)置的方法,包括設(shè)置頁(yè)面大小、頁(yè)邊距、紙張方向、頁(yè)面旋轉(zhuǎn)等,需要的朋友可以參考下
    2019-07-07
  • 如何使用MybatisPlus的SQL注入器提升批量插入性能

    如何使用MybatisPlus的SQL注入器提升批量插入性能

    本文給大家介紹如何使用MybatisPlus的SQL注入器提升批量插入性能,以實(shí)戰(zhàn)視角講述如何利用該特性提升MybatisPlus?的批量插入性能,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例解析

    SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例解析

    這篇文章主要介紹了SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例,在寫SpringCloud搭建微服務(wù)之前,先搭建一個(gè)不通過springcloud只通過SpringBoot和Mybatis進(jìn)行模塊之間通訊,通過一個(gè)案例給大家詳細(xì)說明,需要的朋友可以參考下
    2022-05-05
  • 基于MyBatis的簡(jiǎn)單使用(推薦)

    基于MyBatis的簡(jiǎn)單使用(推薦)

    下面小編就為大家?guī)?lái)一篇基于MyBatis的簡(jiǎn)單使用(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-10-10
  • spring整合redis以及使用RedisTemplate的方法

    spring整合redis以及使用RedisTemplate的方法

    本篇文章主要介紹了spring整合redis以及使用RedisTemplate的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 詳解Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀

    詳解Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀

    這篇文章主要介紹了Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

综艺| 临洮县| 平阳县| 肥西县| 柘城县| 凤城市| 潮州市| 阳曲县| 灵武市| 天长市| 巴彦县| 马尔康县| 咸阳市| 托克托县| 长顺县| 崇信县| 扎兰屯市| 武鸣县| 成都市| 甘泉县| 玛纳斯县| 阳东县| 新民市| 鸡西市| 肇东市| 顺义区| 石屏县| 勃利县| 科尔| 三台县| 永兴县| 崇礼县| 老河口市| 宁化县| 姚安县| 闸北区| 吉隆县| 胶州市| 纳雍县| 浦东新区| 南召县|