JavaÖеÄÒì³£´¦Àí»úÖÆÒѾ±È½Ï³ÉÊ죬ÎÒÃǵÄJava³ÌÐòµ½´¦³äÂúÁËÒì³£µÄ¿ÉÄÜ£¬Èç¹û¶ÔÕâЩÒì³£²»×öÔ¤ÏȵĴ¦Àí£¬ÄÇô½«À´³ÌÐò±ÀÀ£¾ÍÎÞ´Óµ÷ÊÔ£¬ºÜÄÑÕÒµ½Òì³£ËùÔÚµÄλÖᣱ¾ÎĽ«Ì½ÌÖÒ»ÏÂJavaÖÐÒì³£Óë´íÎóµÄ´¦Àí·½·¨£¬Ò»ÆðÀ´¿´¿´¡£
Òì³£Óë´íÎó£º
Òì³££º
ÔÚJavaÖгÌÐòµÄ´íÎóÖ÷ÒªÊÇÓï·¨´íÎóºÍÓïÒå´íÎó£¬Ò»¸ö³ÌÐòÔÚ±àÒëºÍÔËÐÐʱ³öÏֵĴíÎóÎÒÃÇͳһ³ÆÖ®ÎªÒì³££¬ËüÊÇVM(ÐéÄâ»ú)֪ͨÄãµÄÒ»ÖÖ·½Ê½£¬Í¨¹ýÕâÖÖ·½Ê½£¬VMÈÃÄãÖªµÀ£¬Äã(¿ª·¢ÈËÔ±)ÒѾ·¸Á˸ö´íÎó£¬ÏÖÔÚÓÐÒ»¸ö»ú»áÀ´ÐÞ¸ÄËü¡£JavaÖÐʹÓÃÒì³£ÀàÀ´±íʾÒì³££¬²»Í¬µÄÒì³£Àà´ú±íÁ˲»Í¬µÄÒì³£¡£µ«ÊÇÔÚJavaÖÐËùÓеÄÒì³£¶¼ÓÐÒ»¸ö»ùÀ࣬½Ð×öException¡£
´íÎó£º
ËüÖ¸µÄÊÇÒ»¸öºÏÀíµÄÓ¦ÓóÌÐò²»ÄܽػñµÄÑÏÖØµÄÎÊÌâ¡£´ó¶àÊý¶¼ÊÇ·´³£µÄÇé¿ö¡£´íÎóÊÇVMµÄÒ»¸ö¹ÊÕÏ(ËäÈ»Ëü¿ÉÒÔÊÇÈκÎϵͳ¼¶µÄ·þÎñ)¡£ËùÒÔ£¬´íÎóÊǺÜÄÑ´¦ÀíµÄ£¬Ò»°ãµÄ¿ª·¢ÈËÔ±(µ±È»²»ÊÇÄã)ÊÇÎÞ·¨´¦ÀíÕâЩ´íÎóµÄ£¬±ÈÈçÄÚ´æÒç³ö¡£
ºÍÒì³£Ò»Ñù£¬ÔÚJavaÖÐÓôíÎóÀàÀ´±íʾ´íÎ󣬲»Í¬µÄ´íÎóÀà´ú±íÁ˲»Í¬µÄ´íÎó¡£ µ«ÊÇÔÚJavaÖÐËùÓеĴíÎó¶¼ÓÐÒ»¸ö»ùÀ࣬½Ð×öError¡£
×ÛÉÏ£¬ÎÒÃÇ¿ÉÒÔÖªµÀÒì³£ºÍ´íÎó×î±¾ÖʵÄÇø±ð¾ÍÊÇÒì³£Äܱ»¿ª·¢ÈËÔ±´¦Àí¶ø´íÎóʱϵͳ±¾À´×Ô´øµÄ£¬Ò»°ãÎÞ·¨´¦ÀíÒ²²»ÐèÒªÎÒÃdzÌÐòÔ±À´´¦Àí¡£
1.Ò»¸öÒì³£ÊÇÔÚÒ»¸ö³ÌÐòÖ´Ðйý³ÌÖгöÏÖµÄÒ»¸öʼþ£¬ËüÖжÏÁËÕý³£Ö¸ÁîµÄÔËÐÐ
2.´íÎ󣬯«ÀëÁ˿ɽÓÊܵĴúÂëÐÐΪµÄÒ»¸ö¶¯×÷»òʵÀý
Òì³£µÄ½á¹¹·ÖÀࣺ
1¡¢ÔËÐÐʱÒì³£(δ¼ì²éÒì³£)
2¡¢±àÒëʱÒì³£(ÒѼì²éÒì³£)
ÔËÐÐÒì³£¼´ÊÇRuntimeException;ÆäÓàµÄÈ«²¿Îª±àÒëÒì³£
ÔÚJavaÖÐÒì³£ExceptionºÍ´íÎóErrorÓиö¹²Í¬µÄ¸¸ÀàThrowable¡£
Error Exception
runtimeException¼¸¸ö×ÓÀà
1¡¢ java.lang.ArrayIndexOutOfBoundsException
Êý×éË÷ÒýÔ½½çÒì³£¡£µ±¶ÔÊý×éµÄË÷ÒýֵΪ¸ºÊý»ò´óÓÚµÈÓÚÊý×é´óСʱÅ׳ö¡£
2¡¢java.lang.ArithmeticException
ËãÊõÌõ¼þÒì³£¡£Æ©È磺ÕûÊý³ýÁãµÈ¡£
3¡¢java.lang.NullPointerException
¿ÕÖ¸ÕëÒì³£¡£µ±Ó¦ÓÃÊÔͼÔÚÒªÇóʹÓöÔÏóµÄµØ·½Ê¹ÓÃÁËnullʱ£¬Å׳ö¸ÃÒì³£¡£Æ©È磺µ÷ÓÃnull¶ÔÏóµÄʵÀý·½·¨¡¢·ÃÎÊnull¶ÔÏóµÄÊôÐÔ¡¢¼ÆËãnull¶ÔÏóµÄ³¤¶È¡¢Ê¹ÓÃthrowÓï¾äÅ׳önullµÈµÈ
4¡¢java.lang.ClassNotFoundException
ÕÒ²»µ½ÀàÒì³£¡£µ±Ó¦ÓÃÊÔͼ¸ù¾Ý×Ö·û´®ÐÎʽµÄÀàÃû¹¹ÔìÀ࣬¶øÔÚ±éÀúCLASSPAHÖ®ºóÕÒ²»µ½¶ÔÓ¦Ãû³ÆµÄclassÎļþʱ£¬Å׳ö¸ÃÒì³£¡£
¶ÔÒì³£µÄ´¦Àí£º
try{}catch{} try{}catch{}finally{}ÎÞÂÛÓÐÎÞÒì³£finally´úÂë¿é¶¼»á±»Ö´ÐÐ try{}finally{}Ò²ÊÇ¿ÉÒÔ×éºÏʹÓõĵ«ÊÇcatch{}finally{}²»¿ÉÒÔ |
×¢Ò⣺Ôڼ̳йØÏµÖУ¬×ÓÀา¸Ç¸¸ÀàµÄ·½·¨£¬Å׳öÒì³£µÄ·¶Î§²»Äܱȸ¸Àà¸ü¿í·º
Òì³£µÄʹÓÃ
ÔÚÒì³£µÄʹÓÃÕâÒ»²¿·ÖÖ÷ÒªÊÇÑÝʾ´úÂ룬¶¼ÊÇÎÒÃÇÆ½³£Ð´´úÂëµÄ¹ý³ÌÖлáÓöµ½µÄ(µ±È»Ö»ÊÇһС²¿·Ö)£¬Å×שÒýÓñÂð!
Àý1. Õâ¸öÀý×ÓÖ÷Ҫͨ¹ýÁ½¸ö·½·¨¶Ô±ÈÀ´ÑÝʾһÏÂÓÐÁËÒì³£ÒÔºó´úÂëµÄÖ´ÐÐÁ÷³Ì¡£
public static void testException1() { int[] ints = new int[] { 1, 2, 3, 4 }; System.out.println("Òì³£³öÏÖǰ"); try { System.out.println(ints[4]); System.out.println("ÎÒ»¹ÓÐÐÒÖ´Ðе½Âð");// ·¢ÉúÒì³£ÒԺ󣬺óÃæµÄ´úÂë²»Äܱ»Ö´ÐÐ } catch (IndexOutOfBoundsException e) { System.out.println("Êý×éÔ½½ç´íÎó"); } System.out.println("Òì³£³öÏÖºó"); } |
/*output:
Òì³£³öÏÖǰ
Êý×éÔ½½ç´íÎó
³£³öÏÖºó
*/
public static void testException2() { int[] ints = new int[] { 1, 2, 3, 4 }; System.out.println("Òì³£³öÏÖǰ"); System.out.println(ints[4]); System.out.println("ÎÒ»¹ÓÐÐÒÖ´Ðе½Âð");// ·¢ÉúÒì³£ÒÔºó£¬ËûºóÃæµÄ´úÂë²»Äܱ»Ö´ÐÐ } |
Ê×ÏÈÖ¸³öÀý×ÓÖеIJ»×ãÖ®´¦£¬IndexOutofBoundsExceptionÊÇÒ»¸ö·ÇÊܼìÒì³££¬ËùÒÔ²»ÓÃtry¡catch¡ÏÔʾ²¶×½£¬µ«ÊÇÎÒµÄÄ¿µÄÊǶÔͬһ¸öÒì³£Óò»Í¬µÄ´¦Àí·½Ê½£¬¿´Ëü»áÓÐʲô²»Í¬µÄ¶ø½á¹û(ÕâÀïÒ²¾ÍÖ»ÄÜÓÃËü½«¾ÍÒ»ÏÂÁË)¡£Òì³£³öÏÖʱµÚÒ»¸ö·½·¨Ö»ÊÇÌø³öÁËtry¿é£¬µ«ÊÇËüºóÃæµÄ´úÂë»áÕÕÑùÖ´Ðеġ£µ«ÊǵڶþÖ־Ͳ»Ò»ÑùÁËÖ±½ÓÌø³öÁË·½·¨£¬±È½ÏǿӲ¡£´ÓµÚÒ»¸ö·½·¨ÖÐÎÒÃÇ¿´µ½£¬try¡catch¡ÊÇÒ»ÖÖ¡±ÊÂÎñÐÔ¡±µÄ±£ÕÏ£¬ËüµÄÄ¿µÄÊDZ£Ö¤³ÌÐòÔÚÒì³£µÄÇé¿öÏÂÔËÐÐÍê±Ï£¬Í¬Ê±Ëü»¹»á¸æÖª³ÌÐòÔ±³ÌÐòÖгö´íµÄÏêϸÐÅÏ¢(ÕâÖÖÏêϸÐÅÏ¢ÓÐʱҪÒÀÀµÓÚ³ÌÐòÔ±Éè¼Æ)¡£
Àý2. ÖØÐÂÅ׳öÒì³£
public class Rethrow { public static void readFile(String file) throws FileNotFoundException { try { BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); } catch (FileNotFoundException e) { e.printStackTrace(); System.err.println("²»ÖªµÀÈçºÎ´¦Àí¸ÃÒì³£»òÕ߸ù±¾²»Ïë´¦ÀíËü£¬
µ«ÊDz»×ö´¦ÀíÓÖ²»ºÏÊÊ£¬ÕâÊÇÖØÐÂÅ׳öÒì³£½»¸øÉÏÒ»¼¶´¦Àí"); //ÖØÐÂÅ׳öÒì³£ throw e; } } public static void printFile(String file) { try { readFile(file); } catch (FileNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) { printFile("D:/file"); } } |
Òì³£µÄ±¾ÒâÊǺõģ¬ÈÃÎÒÃÇÊÔͼÐÞ¸´³ÌÐò£¬µ«ÊÇÏÖʵÖÐÎÒÃÇÐÞ¸´µÄ¼¸ÂʺÜС£¬ÎÒÃǺܶàʱºò¾ÍÊÇÓÃËüÀ´¼Ç¼³ö´íµÄÐÅÏ¢¡£Èç¹ûÄãÑá¾ëÁ˲»Í£µÄ´¦ÀíÒì³££¬ÖØÐÂÅ׳öÒì³£¶ÔÄãÀ´Ëµ¿ÉÄÜÊÇÒ»¸öºÜºÃµÄ½âÍÑ¡£Ô·â²»¶¯µÄ°ÑÕâ¸öÒì³£Å׸øÉÏÒ»¼¶£¬Å׸øµ÷ÓÃÕâ¸ö·½·¨µÄÈË£¬ÈÃËûÀ´·ÑÄÔ½î°É¡£ÕâÑù¿´À´£¬javaÒì³£(µ±È»Ö¸µÄÊÇÊܼìÒì³£)ÓÖ¸øÎÒÃÇÆ½ÌíºÜ¶àÂé·³£¬¾¡¹ÜËüµÄ³ö·¢µãÊǺõġ£
Àý3. Òì³£Á´µÄʹÓü°Òì³£¶ªÊ§
ExceptionA,ExceptionB,ExceptionC public class ExceptionA extends Exception { public ExceptionA(String str) { super(); } } public class ExceptionB extends ExceptionA { public ExceptionB(String str) { super(str); } } public class ExceptionC extends ExceptionA { public ExceptionC(String str) { super(str); } } |
Òì³£¶ªÊ§µÄÇé¿ö£º
public class NeverCaught { static void f() throws ExceptionB{ throw new ExceptionB("exception b"); } static void g() throws ExceptionC { try { f(); } catch (ExceptionB e) { ExceptionC c = new ExceptionC("exception a"); throw c; } } public static void main(String[] args) { try { g(); } catch (ExceptionC e) { e.printStackTrace(); } } } /* exception.ExceptionC at exception.NeverCaught.g(NeverCaught.java:12) at exception.NeverCaught.main(NeverCaught.java:19) */ |
ΪʲôֻÊÇ´òÓ¡³öÀ´ÁËExceptionC¶øÃ»ÓдòÓ¡³öExceptionBÄØ?Õâ¸ö»¹ÊÇ×Ô¼º·ÖÎöһϰÉ!
ÉÏÃæµÄÇé¿öÏ൱ÓÚÉÙÁËÒ»ÖÖÒì³££¬ÕâÔÚÎÒÃÇÅÅ´íµÄ¹ý³ÌÖзdz£µÄ²»Àû¡£ÄÇÎÒÃÇÓöµ½ÉÏÃæµÄÇé¿öÓ¦¸ÃÔõô°ìÄØ?Õâ¾ÍÊÇÒì³£Á´µÄÓÃÎäÖ®µØ£º±£´æÒì³£ÐÅÏ¢£¬ÔÚÅ׳öÁíÍâÒ»¸öÒì³£µÄͬʱ²»¶ªÊ§ÔÀ´µÄÒì³£¡£
public class NeverCaught { static void f() throws ExceptionB{ throw new ExceptionB("exception b"); } static void g() throws ExceptionC { try { f(); } catch (ExceptionB e) { ExceptionC c = new ExceptionC("exception a"); //Òì³£Á¬ c.initCause(e); throw c; } } public static void main(String[] args) { try { g(); } catch (ExceptionC e) { e.printStackTrace(); } } } /* exception.ExceptionC at exception.NeverCaught.g(NeverCaught.java:12) at exception.NeverCaught.main(NeverCaught.java:21) Caused by: exception.ExceptionB at exception.NeverCaught.f(NeverCaught.java:5) at exception.NeverCaught.g(NeverCaught.java:10) ... 1 more */ |
Õâ¸öÒì³£Á´µÄÌØÐÔÊÇËùÓÐÒì³£¾ù¾ß±¸µÄ£¬ÒòΪÕâ¸öinitCause()·½·¨ÊÇ´ÓThrowable¼Ì³ÐµÄ¡£
Àý4. ÇåÀí¹¤×÷
ÇåÀí¹¤×÷¶ÔÓÚÎÒÃÇÀ´ËµÊDZز»¿ÉÉٵģ¬ÒòΪÈç¹ûһЩÏûºÄ×ÊÔ´µÄ²Ù×÷£¬±ÈÈçIO,JDBC¡£Èç¹ûÎÒÃÇÓÃÍêÒÔºóûÓм°Ê±ÕýÈ·µÄ¹Ø±Õ£¬ÄǺó¹û»áºÜÑÏÖØ£¬ÕâÒâζ×ÅÄÚ´æÐ¹Â¶¡£Òì³£µÄ³öÏÖÒªÇóÎÒÃDZØÐëÉè¼ÆÒ»ÖÖ»úÖÆ²»ÂÛʲôÇé¿öÏ£¬×ÊÔ´¶¼Äܼ°Ê±ÕýÈ·µÄÇåÀí¡£Õâ¾ÍÊÇfinally¡£
public void readFile(String file) { BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader( new FileInputStream(file))); // do some other work } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } |
Àý×ӷdz£µÄ¼òµ¥£¬ÊÇÒ»¸ö¶ÁÈ¡ÎļþµÄÀý×Ó¡£ÕâÑùµÄÀý×ÓÔÚJDBC²Ù×÷ÖÐÒ²·Ç³£µÄ³£¼û¡£(ËùÒÔ£¬ÎÒ¾õµÃ¶ÔÓÚ×ÊÔ´µÄ¼°Ê±ÕýÈ·ÇåÀíÊÇÒ»¸ö³ÌÐòÔ±µÄ»ù±¾ËØÖÊÖ®Ò»¡£)
Try¡finally½á¹¹Ò²ÊDZ£Ö¤×ÊÔ´ÕýÈ·¹Ø±ÕµÄÒ»¸öÊֶΡ£Èç¹ûÄã²»Çå³þ´úÂëÖ´Ðйý³ÌÖлᷢÉúʲôÒì³£Çé¿ö»áµ¼ÖÂ×ÊÔ´²»Äܵõ½ÇåÀí£¬ÄÇôÄã¾ÍÓÃtry¶ÔÕâ¶Î¡±¿ÉÒÉ¡±´úÂë½øÐаü×°£¬È»ºóÔÚfinallyÖнøÐÐ×ÊÔ´µÄÇåÀí¡£¾ÙÒ»¸öÀý×Ó£º
public void readFile() { BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader( new FileInputStream("file"))); // do some other work //close reader reader.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } |
ÎÒÃÇ×¢ÒâÒ»ÏÂÕâ¸ö·½·¨ºÍÉÏÒ»¸ö·½·¨µÄÇø±ð£¬ÏÂÒ»¸öÈË¿ÉÄÜϰ¹ß¸üºÃÒ»µã£¬¼°ÔçµÄ¹Ø±Õreader¡£µ«ÊÇÍùÍùÊÂÓëԸΥ£¬ÒòΪÔÚreader.close()ÒÔǰÒì³£ËæÊ±¿ÉÄÜ·¢Éú£¬ÕâÑùµÄ´úÂë½á¹¹²»ÄÜÔ¤·ÀÈκÎÒì³£µÄ³öÏÖ¡£ÒòΪ³ÌÐò»áÔÚÒì³£³öÏֵĵط½Ìø³ö£¬ºóÃæµÄ´úÂë²»ÄÜÖ´ÐÐ(ÕâÔÚÉÏÃæÓ¦¾ÓÃʵÀýÖ¤Ã÷¹ý)¡£ÕâʱÎÒÃǾͿÉÒÔÓÃtry¡finallyÀ´¸ÄÔ죺
public void readFile() { BufferedReader reader = null; try { try { reader = new BufferedReader(new InputStreamReader( new FileInputStream("file"))); // do some other work // close reader } finally { reader.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } |
¼°ÔçµÄ¹Ø±Õ×ÊÔ´ÊÇÒ»ÖÖÁ¼ºÃµÄÐÐΪ£¬ÒòΪʱ¼äÔ½³¤ÄãÍü¼Ç¹Ø±ÕµÄ¿ÉÄÜÐÔÔ½´ó¡£ÕâÑùÔÚÅäºÏÉÏtry¡finally¾Í±£Ö¤ÍòÎÞһʧÁË(²»ÒªÏÓÂé·³£¬java¾ÍÊÇÕâôÖйæÖоØ)¡£
ÔÙ˵һÖÖÇé¿ö£¬¼ÙÈçÎÒÏëÔÚ¹¹Ôì·½·¨Öдò¿ªÒ»¸öÎļþ»òÕß´´½¨Ò»¸öJDBCÁ¬½Ó£¬ÒòΪÎÒÃÇÒªÔÚÆäËûµÄ·½·¨ÖÐʹÓÃÕâ¸ö×ÊÔ´£¬ËùÒÔ²»ÄÜÔÚ¹¹Ôì·½·¨Öм°ÔçµÄ½«Õâ¸ö×ÊÔ´¹Ø±Õ¡£ÄÇÎÒÃÇÊDz»ÊǾÍûÕÞÁËÄØ?´ð°¸ÊÇ·ñ¶¨µÄ¡£¿´Ò»ÏÂÏÂÃæµÄÀý×Ó£º
public class ResourceInConstructor { BufferedReader reader = null; public ResourceInConstructor() { try { reader = new BufferedReader(new InputStreamReader(new FileInputStream(""))); } catch (FileNotFoundException e) { e.printStackTrace(); } } public void readFile() { try { while(reader.readLine()!=null) { //do some work } } catch (IOException e) { e.printStackTrace(); } } public void dispose() { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } |
ÕâÒ»²¿·Ö½²µÄ¶àÁËÒ»µã£¬µ«ÊÇÒ쳣ȷʵÊÇ¿´ÆðÀ´ÈÝÒ×ÓÃÆðÀ´ÄѵĶ«Î÷ѽ£¬javaÖл¹ÊÇÓкöàµÄ¶«Î÷ÐèÒªÉîÍڵġ£
|