Java之异常处理

异常: 用于处理程序中错误的一种机制

1. 捕获和处理异常:

try...catch...finally

我们直接上代码:

 1 package com.learn.chap04.sec02;
 2
 3 public class Demo1 {
 4     public static void main(String[] args) {
 5         String str = "123q";
 6         // 捕获和处理异常
 7         try{
 8             int a = Integer.parseInt(str);
 9         }catch(NumberFormatException e){
10             //e.getMessage(); // 打印日志
11             e.printStackTrace();
12         }catch(Exception e){ // catch中 范围依次从小到大,NumberFormatException和Exception交换位置后,将报错
13             e.printStackTrace();
14         }
15
16         System.out.println("aa"); // 由于上面代码做了异常捕捉和处理,并且没有return,所以此处将被打印出来
17
18     }
19 }

运行结果

aa
java.lang.NumberFormatException: For input string: "123q"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.learn.chap04.sec02.Demo1.main(Demo1.java:8)

 1 package com.learn.chap04.sec02;
 2
 3 public class Demo2 {
 4
 5     public static void testFinally(){
 6         String str = "123a";
 7         try {
 8             int a = Integer.parseInt(str);
 9             System.out.println(a);
10         } catch (Exception e) {
11             e.printStackTrace();
12             System.out.println("exception");
13             return; // 下面的代码System.out.println("end");将不执行
14         }finally{ // 无论有没有异常,try...catch中有没有return,finally里的代码 都会被执行;这就是finally的作用。这个作用比喻:可在程序运行后关闭文件,不管运行结果如何都关闭文件,就可以用这一条语句。但可以用exit函数退出再不执行finally语句。比喻将return换成System.exit(0);就可以不执行
15             System.out.println("finally end");
16         }
17         System.out.println("end"); // 由于上面代码出现return,所以此处将无法被打印出来
18     }
19
20     public static void main(String[] args) {
21         testFinally();
22     }
23 }

运行结果

java.lang.NumberFormatException: For input string: "123a"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.learn.chap04.sec02.Demo2.testFinally(Demo2.java:8)
at com.learn.chap04.sec02.Demo2.main(Demo2.java:21)
exception
finally end

2.throws和throw关键字:

throws 表示当前方法不处理异常,而是交给方法的调用处去处理;

throw 表示直接抛出一个异常

我们直接上代码:

 1 package com.learn.chap04.sec03;
 2
 3 public class Demo1 {
 4
 5     /**
 6      * 把异常向外面抛
 7      * @throws Exception
 8      */
 9     public static void testThrows() throws Exception{
10         String str = "123a";
11         int a = Integer.parseInt(str);
12         System.out.println(a);
13     }
14
15     /*public static void main(String[] args) {
16         testThrows();
17     }*/
18     public static void main(String[] args) {
19         try {
20             testThrows();
21             System.out.println("here");
22         } catch (Exception e) {
23             System.out.println("我们在这里抛出了异常");
24             e.printStackTrace();
25         }
26         System.out.println("输出内容");
27     }
28
29 }

运行结果

我们在这里抛出了异常
java.lang.NumberFormatException: For input string: "123a"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.learn.chap04.sec03.Demo1.testThrows(Demo1.java:11)
at com.learn.chap04.sec03.Demo1.main(Demo1.java:20)
输出内容

 1 package com.learn.chap04.sec03;
 2
 3 public class Demo2 {
 4
 5     public static void testThrow(int a) throws Exception{
 6         if(a==1){
 7             throw new Exception(a+"有异常");
 8         }
 9         System.out.println(a+"无异常");
10     }
11
12     public static void main(String[] args) {
13         try {
14             testThrow(1);
15         } catch (Exception e) {
16             e.printStackTrace();
17         }
18
19         try {
20             testThrow(0);
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }
25 }

运行结果

java.lang.Exception: 1有异常
at com.learn.chap04.sec03.Demo2.testThrow(Demo2.java:7)
at com.learn.chap04.sec03.Demo2.main(Demo2.java:14)
0无异常

3.Exception与RuntimeException的区别:

我们直接上代码

 1 package com.learn.chap04.sec04;
 2
 3 public class Demo1 {
 4
 5     /**
 6      * 运行时异常,编译时不检查,可以不使用try..catch捕获
 7      */
 8     public static void testRuntimeException() throws RuntimeException{
 9         throw new RuntimeException("运行时异常");
10     }
11
12     /**
13      * Exception异常,编译时会检查,必须使用使用try..catch捕获
14      */
15     public static void testException() throws Exception{
16         throw new Exception("Exception异常");
17     }
18
19     public static void main(String[] args) {
20         //testRuntimeException();
21         try {
22             testRuntimeException();
23         } catch (Exception e) {
24             // TODO: handle exception
25             e.printStackTrace();
26         }// 此处若不加try...catch 由于出现异常,下面代码将不执行
27
28         try {
29             testException();
30         } catch (Exception e) {
31             // TODO Auto-generated catch block
32             e.printStackTrace();
33         }
34     }
35 }

运行结果

java.lang.RuntimeException: 运行时异常
at com.learn.chap04.sec04.Demo1.testRuntimeException(Demo1.java:9)
at com.learn.chap04.sec04.Demo1.main(Demo1.java:22)
java.lang.Exception: Exception异常
at com.learn.chap04.sec04.Demo1.testException(Demo1.java:16)
at com.learn.chap04.sec04.Demo1.main(Demo1.java:29)

4. 自定义异常类

直接上代码

 1 package com.learn.chap04.sec05;
 2 /**
 3  * 自定义异常 继承Exception
 4  * @author eagle
 5  *
 6  */
 7 public class CustomException extends Exception {
 8     public CustomException(String message){
 9         super(message);
10     }
11 }
 1 package com.learn.chap04.sec05;
 2
 3 public class TestCustomException {
 4     public static void test() throws CustomException{
 5         throw new CustomException("自定义异常");
 6     }
 7
 8     public static void main(String[] args) {
 9         try {
10             test();
11         } catch (Exception e) {
12             // TODO: handle exception
13             e.printStackTrace();
14         }
15     }
16 }

运行结果

com.learn.chap04.sec05.CustomException: 自定义异常
at com.learn.chap04.sec05.TestCustomException.test(TestCustomException.java:5)
at com.learn.chap04.sec05.TestCustomException.main(TestCustomException.java:10)

时间: 2024-12-21 18:09:41

Java之异常处理的相关文章

Java学习--异常处理及其应用类

异常是运行时在代码序列中引起的非正常状况,换句话说,异常是运行时错误.在不支持异常处理的计算机语言中,必须手动检查和处理错误----通常是通过使用错误代码,等等.这种方式既笨拙又麻烦.Java的异常处理避免了这些问题,并且在处理过程中采用面向对象的方式管理运行时错误. 1.异常处理的基础概念 Java异常是用来描述在一段代码中发生的异常情况(也就是错误)的对象.当出现引起异常的情况时,就会创建用来表示异常的对象,并在引起错误的方法中抛出异常的对象.方法可以选择自己处理异常,也可以继续传递异常.无

java的异常处理

架构:java的异常处理是一种你丢我捡的架构 处理方法:在该方法加上异常处理语句来处理,另外一种是把异常交给另外的方法来处理 异常的实例对象throwble类: error和exception 前者无法处理,程序直接终止运行,后者异常可以采取措施处理 exception类:arithmeticexception 数学运算产生的错误,例如除以0  :arrayindexoutofboundsexception 数组索引小于0或者是超出数组边界产生的异常:arraystoreexception 保存

二:Java之异常处理

一.异常的概念 异常,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误.错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了.假若程序在运行期间出现了错误,如果置之不理,程序便会终止或直接导致系统崩溃,显然这不是我们希望看到的结果.因此,如何对运行期间出现的错误进行处理和补救呢?Java提供了异常机制来进行处理,通过异常机制来处理程序运行期间出现的错误.通过异常机制

java:异常处理

异常:编译正常,但运行出错,会中断正常指令流 RuntimeException:运行时异常 分为:uncheck exception.和check exception(除了RuntimeException以及子类以外的) uncheck exception class Test { public static void main(String args[]){ System.out.println("1"); int i = 1/0; System.out.println("

Java IO: 异常处理

原文链接 作者:Jakob Jenkov 译者: 李璟([email protected]) 流与Reader和Writer在结束使用的时候,需要正确地关闭它们.通过调用close()方法可以达到这一点.不过这需要一些思考.请看下边的代码: 01 InputStream input = new FileInputStream("c:\\data\\input-text.txt"); 02   03 int data = input.read(); 04   05 while(data

Java入门 异常处理

Java入门 异常处理 1.处理异常(try-catch以及try-catch-finally): a)try会抛出很多种类型的异常-多重catch块的处理 eg:try{ //一些会抛出异常的方法 }catch(Exception e){ //处理该异常的代码块 }catch(Exception2 e){ //处理Exception2的代码块 }..(n个catch块)..{ }finally{ //最终将要执行的代码 } 注意:顺序问题-按照从小到大,先子类后父类的顺序 e.g:InputM

【java读书笔记】——java的异常处理

程序在实际环境的运行过程中,安全成为需要首先考虑的重要因素之一,这也是用户和程序员最关心的问题.同时,Java语言健壮性也体现在了能够及时有效地处理程序中的错误,准确的说是Java的异常处理机制为解决安全问题提交了一份满意的答卷. 先从整体上看一下本文要介绍的内容,然后进行详细的分析: 1.异常的概念 异常又称为例外,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制. 上面的概念是书本上说的,下面我谈一下自己的看法 其实异常处理机制提供了统一的机制来识别和响应程序错误,异常可以为我

java的异常处理机制(try…catch…finally)

1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,“猜猜”它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦.public class TestException{    public TestException()    {    }    boolean

java之八 异常处理

异常处理基础 Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被引发(throw).该方法可以选择自己处理异常或传递该异常.两种情况下,该异常被捕获(catch)并处理.异常可能是由Java运行时系统产生,或者是由你的手工代码产生.被Java引发的异常与违反语言规范或超出Java执行环境限制的基本错误有关.手工编码产生的异常基本上用于报告方法调用程序的出错状况. Java异常处理通过5个关键字控制:try.ca

Java 六种异常处理的陋习(转)

Java 六种异常处理的陋习 原文链接: http://www.cnblogs.com/Android-and-android/archive/2013/05/02/3054469.html 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4 Statem