# Java ä¸çå¼å¸¸æºå¶ > å é®å¤§å®¶ä¸ªé¢è¯é¢ï¼å¨ Java ä¸ï¼ä¸ºä»ä¹æäºå¼å¸¸ï¼æä»¬å¿ é¡»æåºæè `try/catch`ï¼å `Thread.sleep(1000);` è¿ç§å¿ é¡»å¤ç InterruptedExceptionï¼å¦åç¼è¯é½éè¿ä¸äºï¼è NullPointerException è¿ç±»å¼å¸¸å´âæ æè°âï¼  ## æ¦è¿° å¼å¸¸ï¼å°±æ¯æä»¬ **å代ç ** æè **ç¼è¯ãè¿è¡ä»£ç ** æ¶åéå°çåç§ç¶åµï¼æ¯å¦ï¼åæ°ä¸åæ³ãæ¾ä¸å°è¯¥ç±»æè¯¥æ¹æ³ãæ°ç»ä¸æ è¶çã空æéå¼å¸¸ççã ä½ä¸ºä¸ååæ ¼çç¨åºåï¼æä»¬è¯å®è¦é¢è§å¼å¸¸ãå¤çå¼å¸¸ã Java éè¿ Throwable ç±»çä¼å¤åç±»æè¿°åç§ä¸åçå¼å¸¸ãæä»¥ï¼**Java å¼å¸¸é½æ¯å¯¹è±¡ï¼æ¯ Throwable åç±»çå®ä¾ï¼æè¿°äºåºç°å¨ä¸æ®µç¼ç ä¸çé误æ¡ä»¶**ã彿¡ä»¶çææ¶ï¼é误å°å¼åå¼å¸¸ã Throwable ç±»æ¯æä»¥å¼å¸¸çâç¥å âï¼ä»æä¸¤ä¸ªâ女å¿âï¼Exceptionï¼å¼å¸¸ï¼å Errorï¼é误ï¼ï¼å¥¹ä¸¤åæå¥½å¤âååâã  ## Error å è¯´å¤§å¥³å¿ Errorï¼é误ï¼ï¼å¥¹æ¯è¾å害ï¼ä»ååå°±è½çåºï¼å¥¹é½ä¸ç®âå¼å¸¸âï¼æ¯âé误âãæ¯ç¨åºæ æ³å¤ççé误ï¼è¡¨ç¤ºè¿è¡åºç¨ç¨åºä¸è¾ä¸¥éé®é¢ã 她代表ç大夿°é误åæä»¬è¿äº Coder æ§è¡çæä½å ³ç³»ä¸å¤§ï¼èæ¯æä»£ç è¿è¡æ¶ JVM åºç°çé®é¢ãæ¯å¦ä¸å¾ä¸çèææºé误ãå åæº¢åºãçº¿ç¨æ»éè¿äºï¼è¿äºé误æ¯ä¸å¯æ¥çï¼æä»¬åä»£ç æ¶åå¯ä¸å¥½ææ§ã å½éå°è¿ç±»éè¯¯çæ¶åï¼JVM ä¸è¬ä¼éæ©ç»æ¢çº¿ç¨ãå¯ä»¥è¯´è¿ä¸ªå¯¹è±¡å¾æ¯æ£æã > 对äºè®¾è®¡åççåºç¨ç¨åºæ¥è¯´ï¼å³ä½¿ç¡®å®åçäºéè¯¯ï¼æ¬è´¨ä¸ä¹ä¸åºè¯¥è¯å¾å»å¤ç宿å¼èµ·çå¼å¸¸ç¶åµã ## Exception æ¥ç说äºå¥³å¿ Exceptionï¼Exceptionï¼å¼å¸¸ï¼çâå女âåå两大éµè¥ï¼**è¿è¡æ¶å¼å¸¸ï¼RuntimeExceptionï¼åå«éæ£æ¥å¼å¸¸)**å**éè¿è¡æ¶å¼å¸¸**(ç¼è¯å¼å¸¸ï¼ä¹å«æ£æ¥å¼å¸¸)ã ç¨åºä¸åºå½å°½å¯è½å»å¤çè¿äºå¼å¸¸ã ### è¿è¡æ¶å¼å¸¸ è¿è¡æ¶å¼å¸¸é½æ¯ RuntimeException ç±»åå ¶åç±»ï¼æ¯å¦ NullPointerExceptionãIndexOutOfBoundsException ç è¿äºå¼å¸¸æ¯ä¸æ£æ¥å¼å¸¸ï¼ç¨åºä¸å¯ä»¥éæ©æè·å¤çï¼ä¹å¯ä»¥ä¸å¤çãæ¯å¦éå°è¿äºéè¯¯ï¼æä»¬å IDEA ä¸ä¹ä¸ä¼æ¥éï¼è¿ç±»é误ä¸è¬é½æ¯ç±äºæä»¬ç¨åºé»è¾éè¯¯é æçï¼æ¯å¦æ°ç»é¿åº¦ææåªæ 10ï¼ä½ å´è¦è·åç´¢å¼æ¯ 11 çå ç´ ï¼è¿ç±»é误åºè¯¥å¨ Coding çæ¶åå°±é¿å æã è¿è¡æ¶å¼å¸¸çç¹ç¹æ¯ Java ç¼è¯å¨ä¸ä¼æ£æ¥å®ï¼ä¹å°±æ¯è¯´ï¼å½ç¨åºä¸å¯è½åºç°è¿ç±»å¼å¸¸ï¼å³ä½¿æ²¡æç¨ try-catch è¯å¥æè·å®ï¼ä¹æ²¡æç¨ throws åå¥å£°ææåºå®ï¼ä¹ä¼ç¼è¯éè¿ã ### éè¿è¡æ¶å¼å¸¸ ï¼ç¼è¯å¼å¸¸ãæ£æ¥å¼å¸¸ï¼ RuuntimeException 以å¤çå¼å¸¸ï¼é½å±äºæ£æ¥å¼å¸¸ãä¹å°±æ¯å¿ é¡»å¤ççå¼å¸¸ï¼å¦åç¨åºæ æ³æ£å¸¸ç¼è¯ãè¿ä¸ªæä»¬ä»£ç ä¸å°±éå¤å¯è§äºï¼æ¯å¦ IOExceptionãClassNotFoundException è¿ç±»å¿ é¡»æåºæå¤ççç±»å¼å¸¸ã å½ç¶ï¼æä»¬å代ç ä¸è¬éè¿ IDEAï¼è¿ç±»æ£æ¥å¼å¸¸ï¼é½ä¼å¨ç¼è¯å¨ä¸æ¥éï¼æä»¥ä¹å¾å¥½è¯å«ã æåéä¸å¼ 宿´çå¾ï¼  ## å¼å¸¸å¤çæä½³å®è·µ #### ä¸è¦å¿½ç¥ææçå¼å¸¸ ```java catch (NoSuchMethodException e) { return null; } ``` è½ç¶ææäºå¼å¸¸ä½æ¯å´æ²¡æåä»»ä½å¤çï¼é¤éä½ ç¡®ä¿¡è¿ä¸ªå¼å¸¸å¯ä»¥å¿½ç¥ï¼ä¸ç¶ä¸åºè¯¥è¿æ ·åãè¿æ ·ä¼å¯¼è´å¤é¢æ æ³ç¥æè¯¥æ¹æ³åçäºéè¯¯ï¼æ æ³ç¡®å®å®ä½é误åå ã #### å¨ä½ çæ¹æ³éæåºå®ä¹å ·ä½çæ£æ¥æ§å¼å¸¸ ```java public void foo() throws Exception { //é误æ¹å¼ } ``` ä¸å®è¦é¿å åºç°ä¸é¢ç代ç 示ä¾ï¼å®ç ´åäºæ£æ¥æ§å¼å¸¸çç®çã 声æä½ çæ¹æ³å¯è½æåºçå ·ä½æ£æ¥æ§å¼å¸¸ï¼å¦æåªæå¤ªå¤è¿æ ·çæ£æ¥æ§å¼å¸¸ï¼ä½ åºè¯¥æå®ä»¬å è£ å¨ä½ èªå·±çå¼å¸¸ä¸ï¼å¹¶å¨å¼å¸¸æ¶æ¯ä¸æ·»å ä¿¡æ¯ã 妿å¯è½çè¯ï¼ä½ ä¹å¯ä»¥èè代ç éæã ```java public void foo() throws SpecificException1, SpecificException2 { //æ£ç¡®æ¹å¼ } ``` #### æè·å ·ä½çåç±»è䏿¯æè· Exception ç±» ```java try { someMethod(); } catch (Exception e) { //é误æ¹å¼ LOGGER.error("method has failed", e); } ``` æè·å¼å¸¸çé®é¢æ¯ï¼å¦æç¨åè°ç¨çæ¹æ³ä¸ºå ¶æ¹æ³å£°ææ·»å äºæ°çæ£æ¥æ§å¼å¸¸ï¼åå¼å人åçæå¾æ¯åºè¯¥å¤çå ·ä½çæ°å¼å¸¸ãå¦æä½ ç代ç åªæ¯æè·å¼å¸¸ï¼æ Throwableï¼ï¼æ°¸è¿ä¸ä¼ç¥éè¿ä¸ªååï¼ä»¥åä½ ç代ç ç°å¨æ¯é误çï¼å¹¶ä¸å¯è½ä¼å¨è¿è¡æ¶ç任使¶å䏿ã #### æ°¸è¿ä¸è¦æè· Throwable ç±» è¿æ¯ä¸ä¸ªæ´ä¸¥éç麻ç¦ï¼å 为 Java Error 乿¯ Throwable çåç±»ï¼Error æ¯ JVM æ¬èº«æ æ³å¤ççä¸å¯éè½¬çæ¡ä»¶ï¼å¯¹äºæäº JVM çå®ç°ï¼JVM å¯è½å®é ä¸çè³ä¸ä¼å¨ Error ä¸è°ç¨ catch åå¥ã #### å§ç»æ£ç¡®å è£ èªå®ä¹å¼å¸¸ä¸çå¼å¸¸ï¼ä»¥ä¾¿å æ è·è¸ªä¸ä¼ä¸¢å¤± ```java catch (NoSuchMethodException e) { throw new MyServiceException("Some information: " + e.getMessage()); //é误æ¹å¼ } ``` è¿ç ´åäºåå§å¼å¸¸çå æ è·è¸ªï¼å¹¶ä¸å§ç»æ¯é误çï¼æ£ç¡®çåæ³æ¯ï¼ ```java catch (NoSuchMethodException e) { throw new MyServiceException("Some information: " , e); //æ£ç¡®æ¹å¼ }å¤ ``` #### è¦ä¹è®°å½å¼å¸¸è¦ä¹æåºå¼å¸¸ï¼ä½ä¸è¦ä¸èµ·æ§è¡ ```java catch (NoSuchMethodException e) { //é误æ¹å¼ LOGGER.error("Some information", e); throw e; } ``` æ£å¦ä¸é¢ç代ç ä¸ï¼è®°å½åæåºå¼å¸¸ä¼å¨æ¥å¿æä»¶ä¸äº§ç夿¡æ¥å¿æ¶æ¯ï¼ä»£ç ä¸åå¨å个é®é¢ï¼å¹¶ä¸å¯¹å°è¯åææ¥å¿çåäºå¾ä¸å好ã #### finally å䏿°¸è¿ä¸è¦æåºä»»ä½å¼å¸¸ ```java try { someMethod(); //Throws exceptionOne } finally { cleanUp(); //妿finallyè¿æåºå¼å¸¸ï¼é£ä¹exceptionOneå°æ°¸è¿ä¸¢å¤± } ``` åªè¦ cleanUp() æ°¸è¿ä¸ä¼æåºä»»ä½å¼å¸¸ï¼ä¸é¢çä»£ç æ²¡æé®é¢ï¼ä½æ¯å¦æ someMethod() æåºä¸ä¸ªå¼å¸¸ï¼å¹¶ä¸å¨ finally åä¸ï¼cleanUp() 乿åºå¦ä¸ä¸ªå¼å¸¸ï¼é£ä¹ç¨åºåªä¼æç¬¬äºä¸ªå¼å¸¸æåºæ¥ï¼åæ¥ç第ä¸ä¸ªå¼å¸¸ï¼æ£ç¡®çåå ï¼å°æ°¸è¿ä¸¢å¤±ãå¦æå¨ finally åä¸è°ç¨ç代ç å¯è½ä¼å¼åå¼å¸¸ï¼è¯·ç¡®ä¿è¦ä¹å¤çå®ï¼è¦ä¹å°å ¶è®°å½ä¸æ¥ãæ°¸è¿ä¸è¦è®©å®ä» finally åä¸æåºæ¥ã #### å§ç»åªæè·å®é å¯å¤ççå¼å¸¸ ```java catch (NoSuchMethodException e) { throw e; //é¿å è¿ç§æ åµï¼å ä¸ºå®æ²¡æä»»ä½å¸®å© } ``` è¿æ¯æéè¦çæ¦å¿µï¼ä¸è¦ä¸ºäºææå¼å¸¸èææï¼åªæå¨æ³è¦å¤çå¼å¸¸æ¶æææå¼å¸¸ï¼æè 叿å¨è¯¥å¼å¸¸ä¸æä¾å ¶ä»ä¸ä¸æä¿¡æ¯ãå¦æä½ ä¸è½å¨ catch åä¸å¤çå®ï¼é£ä¹æå¥½ç建议就æ¯ä¸è¦åªä¸ºäºéæ°æåºå®èæè·å®ã #### ä¸è¦ä½¿ç¨ printStackTrace() è¯å¥æç±»ä¼¼çæ¹æ³ 宿代ç åï¼åå¿å¿½ç¥ printStackTrace()ï¼æç»å«äººå¯è½ä¼å¾å°è¿äºå æ ï¼å¹¶ä¸å¯¹äºå¦ä½å¤çå®å®å ¨æ²¡æä»»ä½æ¹æ³ï¼å 为å®ä¸ä¼éå ä»»ä½ä¸ä¸æä¿¡æ¯ã #### 对äºä¸æç®å¤ççå¼å¸¸ï¼ç´æ¥ä½¿ç¨ finally ```java try { someMethod(); //Method 2 } finally { cleanUp(); //do cleanup here } ``` è¿æ¯ä¸ä¸ªå¾å¥½çåæ³ï¼å¦æå¨ä½ çæ¹æ³ä¸ä½ æ£å¨è®¿é® Method 2ï¼è Method 2 æåºä¸äºä½ 䏿³å¨ Method 1 ä¸å¤ççå¼å¸¸ï¼ä½æ¯ä»ç¶å¸æå¨åçå¼å¸¸æ¶è¿è¡ä¸äºæ¸ çï¼ç¶åå¨ finally åä¸è¿è¡æ¸ çï¼ä¸è¦ä½¿ç¨ catch åã #### è®°ä½æ© throw æ catch åå è¿å¯è½æ¯å ³äºå¼å¸¸å¤çæèåçååï¼ç®å说ï¼åºè¯¥å°½å¿«æåº(throw)å¼å¸¸ï¼å¹¶å°½å¯è½æå°æè·(catch)å®ãåºè¯¥çå°æè¶³å¤çä¿¡æ¯æ¥å¦¥åå¤çå®ã è¿ä¸ªååéå«å°è¯´ï¼ä½ å°æ´æå¯è½æå®æ¾å¨ä½çº§æ¹æ³ä¸ï¼å¨é£éä½ å°æ£æ¥åä¸ªå¼æ¯å¦ä¸ºç©ºæä¸éåãèä¸ä½ ä¼è®©å¼å¸¸å æ è·è¸ªä¸å好å 个级å«ï¼ç´å°è¾¾å°è¶³å¤çæ½è±¡çº§å«æè½å¤çé®é¢ã #### å¨å¼å¸¸å¤ç忏 çèµæº å¦æä½ æ£å¨ä½¿ç¨æ°æ®åºè¿æ¥æç½ç»è¿æ¥çèµæºï¼è¯·ç¡®ä¿æ¸ é¤å®ä»¬ãå¦æä½ æ£å¨è°ç¨ç API ä» ä½¿ç¨éæ£æ¥æ§å¼å¸¸ï¼åä»åºä½¿ç¨ try-finally åæ¥æ¸ çèµæºã å¨ try 模åéé¢è®¿é®èµæºï¼å¨ finally é颿åå ³éèµæºãå³ä½¿å¨è®¿é®èµæºæ¶åçä»»ä½å¼å¸¸ï¼èµæºä¹ä¼ä¼é å°å ³éã #### åªæåºåæ¹æ³ç¸å ³çå¼å¸¸ ç¸å ³æ§å¯¹äºä¿æåºç¨ç¨åºæ¸ æ´é常éè¦ãä¸ç§å°è¯è¯»åæä»¶çæ¹æ³ï¼å¦ææåº NullPointerExceptionï¼é£ä¹å®ä¸ä¼ç»ç¨æ·ä»»ä½ç¸å ³çä¿¡æ¯ãç¸åï¼å¦æè¿ç§å¼å¸¸è¢«å 裹å¨èªå®ä¹å¼å¸¸ä¸ï¼å伿´å¥½ãNoSuchFileFoundException åå¯¹è¯¥æ¹æ³çç¨æ·æ´æç¨ã #### åå¿å¨ç¨åºä¸ä½¿ç¨å¼å¸¸æ¥è¿è¡æµç¨æ§å¶ ä¸è¦å¨é¡¹ç®ä¸åºç°ä½¿ç¨å¼å¸¸æ¥å¤çåºç¨ç¨åºé»è¾ãæ°¸è¿ä¸è¦è¿æ ·åï¼å®ä¼ä½¿ä»£ç å¾é¾é 读åçè§£ã #### å°½æ©éªè¯ç¨æ·è¾å ¥ä»¥å¨è¯·æ±å¤ççæ©ææè·å¼å¸¸ å§ç»è¦å¨é常æ©çé¶æ®µéªè¯ç¨æ·è¾å ¥ï¼çè³å¨è¾¾å° controller ä¹åï¼å®å°å¸®å©ä½ ææ ¸å¿åºç¨ç¨åºé»è¾ä¸çå¼å¸¸å¤ç代ç ééå°æä½ãå¦æç¨æ·è¾å ¥åºç°é误ï¼è¿å¯ä»¥ä¿è¯ä¸åºç¨ç¨åºä¸è´ã ä¾å¦ï¼å¦æå¨ç¨æ·æ³¨ååºç¨ç¨åºä¸ï¼éµå¾ªä»¥ä¸é»è¾ï¼ 1. éªè¯ç¨æ· 2. æå ¥ç¨æ· 3. éªè¯å°å 4. æå ¥å°å 5. 妿åºé®é¢åæ»ä¸å è¿æ¯ä¸æ£ç¡®çåæ³ï¼å®ä¼ä½¿æ°æ®åºå¨åç§æ åµä¸å¤äºä¸ä¸è´çç¶æï¼åºè¯¥é¦å éªè¯ææå 容ï¼ç¶åå°ç¨æ·æ°æ®ç½®äº dao å±å¹¶è¿è¡æ°æ®åºæ´æ°ãæ£ç¡®çåæ³æ¯ï¼ 1. éªè¯ç¨æ· 2. éªè¯å°å 3. æå ¥ç¨æ· 4. æå ¥å°å 5. 妿é®é¢åæ»ä¸å #### ä¸ä¸ªå¼å¸¸åªè½å å«å¨ä¸ä¸ªæ¥å¿ä¸ ```java LOGGER.debug("Using cache sector A"); LOGGER.debug("Using retry sector B");å¤å¶ä»£ç ``` ä¸è¦åä¸é¢è¿æ ·åï¼å¯¹å¤ä¸ª `LOGGER.debug()` è°ç¨ä½¿ç¨å¤è¡æ¥å¿æ¶æ¯å¯è½å¨ä½ çæµè¯ç¨ä¾ä¸çèµ·æ¥ä¸éï¼ä½æ¯å½å®å¨å ·æ 100 个并è¡è¿è¡ç线ç¨çåºç¨ç¨åºæå¡å¨çæ¥å¿æä»¶ä¸æ¾ç¤ºæ¶ï¼ææä¿¡æ¯é½è¾åºå°ç¸åçæ¥å¿æä»¶ï¼å³ä½¿å®ä»¬å¨å®é 代ç ä¸ä¸ºååè¡ï¼ä½æ¯å¨æ¥å¿æä»¶ä¸è¿ä¸¤ä¸ªæ¥å¿æ¶æ¯å¯è½ä¼é´é 100 å¤è¡ãåºè¯¥è¿æ ·åï¼ ```java LOGGER.debug("Using cache sector A, using retry sector B");å¤å¶ä»£ç ``` #### å°ææç¸å ³ä¿¡æ¯å°½å¯è½å°ä¼ éç»å¼å¸¸ æç¨çå¼å¸¸æ¶æ¯åå æ è·è¸ªé常éè¦ï¼å¦æä½ çæ¥å¿ä¸è½å®ä½å¼å¸¸ä½ç½®ï¼é£è¦æ¥å¿æä»ä¹ç¨å¢ï¼ #### ç»æ¢æè¢«ä¸æçº¿ç¨ ```java while (true) { try { Thread.sleep(100000); } catch (InterruptedException e) {} //å«è¿æ ·å doSomethingCool(); } ``` InterruptedException å¼å¸¸æç¤ºåºè¯¥åæ¢ç¨åºæ£å¨åçäºæ ï¼æ¯å¦äºå¡è¶ æ¶æçº¿ç¨æ± è¢«å ³éçã åºè¯¥å°½æå¤§åªå宿æ£å¨åçäºæ ï¼å¹¶å®æå½åæ§è¡ç线ç¨ï¼è䏿¯å¿½ç¥ InterruptedExceptionãä¿®æ¹åçç¨åºå¦ä¸ï¼ ```java while (true) { try { Thread.sleep(100000); } catch (InterruptedException e) { break; } } doSomethingCool(); ``` #### 对äºéå¤ç try-catchï¼ä½¿ç¨æ¨¡æ¿æ¹æ³ å¨ä»£ç ä¸æè®¸å¤ç±»ä¼¼ç catch 忝æ ç¨çï¼åªä¼å¢å 代ç çé夿§ï¼éå¯¹è¿æ ·çé®é¢å¯ä»¥ä½¿ç¨æ¨¡æ¿æ¹æ³ã ä¾å¦ï¼å¨å°è¯å ³éæ°æ®åºè¿æ¥æ¶çå¼å¸¸å¤çã ```java class DBUtil{ public static void closeConnection(Connection conn){ try{ conn.close(); } catch(Exception ex){ //Log Exception - Cannot close connection } } } ``` è¿ç±»çæ¹æ³å°å¨åºç¨ç¨åºå¾å¤å°æ¹ä½¿ç¨ãä¸è¦æè¿åä»£ç æ¾çå°å¤é½æ¯ï¼èæ¯å®ä¹ä¸é¢çæ¹æ³ï¼ç¶ååä¸é¢è¿æ ·ä½¿ç¨å®ï¼ ```java public void dataAccessCode() { Connection conn = null; try{ conn = getConnection(); .... } finally{ DBUtil.closeConnection(conn); } } ``` #### ä½¿ç¨ JavaDoc ä¸è®°å½åºç¨ç¨åºä¸çææå¼å¸¸ æç¨ JavaDoc è®°å½è¿è¡æ¶å¯è½æåºçææå¼å¸¸ä½ä¸ºä¸ç§ä¹ æ¯ï¼å ¶ä¸ä¹å°½éå æ¬ç¨æ·åºè¯¥éµå¾ªçæä½ï¼ä»¥é²è¿äºå¼å¸¸åçã ### åè䏿¥æºï¼ https://blog.csdn.net/fuzhongmin05/article/details/77600410 https://juejin.im/post/6844903981299433479