Java: 异常处理机制

1. 如何捕获异常

try

{

可能会出现异常的代码段;

}

catch(异常类型名 处理该异常对象)

{

异常处理代码段;

}

 1 import java.io.*;
 2
 3 public class TryCatchTest {
 4
 5     public static void main(String[] args) {
 6         File file = new File("abc.txt");
 7         int a[] = {1, 2};
 8
 9         try
10         {
11             System.out.println(3/0);
12         }
13         catch(ArithmeticException e1)
14         {
15             System.out.println("3/0: ");
16             System.out.println("This is ArithmeticException");
17         }
18
19         try
20         {
21             System.out.println(a[2]);
22         }
23         catch(ArrayIndexOutOfBoundsException e2)
24         {
25             System.out.println("a[2] is out of Array: ");
26             System.out.println("This is ArrayIndexOutOfBoundsException");
27         }
28
29         try
30         {
31             BufferedReader input = new BufferedReader(new FileReader(file));
32         }
33         catch (FileNotFoundException e3)
34         {
35             System.out.println("abc.txt is not found: ");
36             System.out.println("This is FileNotFoundException");
37         }
38         catch(IOException e)
39         {
40             System.out.println("This is IOException");
41         }
42
43     }
44
45 }

3/0:
This is ArithmeticException
a[2] is out of Array:
This is ArrayIndexOutOfBoundsException
abc.txt is not found:
This is FileNotFoundException

2. 如何抛出异常

编写代码过程中,如果不想在这段代码中捕捉和处理一个可能出现的异常,那么就需要将这个异常传递出去,传递给调用它的方法去处理该异常。这个时候就需要使用throw 和throws

  • throws语句在方法声明中使用,抛出异常
  • throw语句在方法体内部使用,抛出异常

注意: 方法体中若使用了throw语句抛出异常,则必须在该方法声明中,采用throws语句来声明该方法体中抛出的异常,同时,throws语句声明抛出的异常,必须是方法体中throw语句抛出的异常或该异常的父类。

 1 import java.io.*;
 2
 3 public class ThrowTest {
 4
 5     public void throwTest1() throws ArithmeticException
 6     {
 7         System.out.println(3/0);
 8     }
 9
10     public void throwTest2() throws ArrayIndexOutOfBoundsException
11     {
12         int a[] ={1,2};
13         System.out.println(a[2]);
14     }
15
16     public void throwTest3() throws FileNotFoundException
17     {
18         File file=new File("abc.txt");
19         new BufferedReader(new FileReader(file));
20     }
21
22     public void throwTest4() throws FileNotFoundException
23     {
24         throw new FileNotFoundException("abc.txt");
25     }
26
27     public static void main(String[] args) {
28         ThrowTest throwTest=new ThrowTest();
29
30         try
31         {
32             throwTest.throwTest1();
33         }
34         catch (ArithmeticException e1)
35         {
36             System.out.println("3/0: ");
37             System.out.println("This is ArithmeticException");
38         }
39
40         try
41         {
42             throwTest.throwTest2();
43         }
44         catch(ArrayIndexOutOfBoundsException e2)
45         {
46             System.out.println("a[2] is out of Array: ");
47             System.out.println("This is ArrayIndexOutOfBoundsException");
48         }
49
50         try
51         {
52             throwTest.throwTest3();
53         }
54         catch (FileNotFoundException e3)
55         {
56             System.out.println("abc.txt is not found: ");
57             System.out.println("This is FileNotFoundException");
58         }
59
60         try
61         {
62             throwTest.throwTest4();
63         }
64         catch (FileNotFoundException e3)
65         {
66             System.out.println("abc.txt is not found: ");
67             System.out.println("This is FileNotFoundException");
68         }
69
70     }
71
72 }

3/0:
This is ArithmeticException
a[2] is out of Array:
This is ArrayIndexOutOfBoundsException
abc.txt is not found:
This is FileNotFoundException
abc.txt is not found:
This is FileNotFoundException

3. 自定义异常

建立自己的异常类,要做的只是根据需要,从Exception类或者从Exception类的子类中继承出需要的类。习惯上,会经常为每一个异常类,提供一个默认的和一个包含详细信息的构造器。需要注意的是,自定义异常类,必须由程序员使用throw语句抛出。

 1 public class MyException {
 2
 3     public static void main(String[] args) {
 4         String str="2abcde";
 5
 6         try
 7         {
 8             char c=str.charAt(0);
 9             if(c<‘a‘||c>‘z‘||c<‘A‘||c>‘Z‘)
10                 throw new FirstLetterException();
11         }
12         catch (FirstLetterException e)
13         {
14             System.out.println("This is FirstLetterException");
15         }
16
17     }
18
19 }
20
21 class FirstLetterException extends Exception{
22     public FirstLetterException()
23     {
24         super("The first char is not a letter");
25     }
26
27     public FirstLetterException(String str)
28     {
29         super(str);
30     }
31 }

This is FirstLetterException

 1 public class MyException {
 2
 3     public static void main(String[] args) throws FirstLetterException{
 4         throw new FirstLetterException();
 5     }
 6 }
 7
 8 class FirstLetterException extends Exception{
 9     public FirstLetterException()
10     {
11         super("The first char is not a letter");
12     }
13
14     public FirstLetterException(String str)
15     {
16         super(str);
17     }
18 }

Exception in thread "main" FirstLetterException: The first char is not a letter
at MyException.main(MyException.java:5)

4. 使用finally语句

在使用try...catch语句是,若try语句中的某一句出现异常情况,那么这部分try语句段中,从出现异常的语句开始,之后的所有语句都不会被执行,直到这部分try语句段结束。

但是在很多情况下,希望无论是否出现异常,某些语句都需要被执行。那么就可以把这部分代码放在finally语句段中,即使try或catch语句段中含有return语句,程序都会在异常抛出后先执行finally语句段,除非try或catch语句段中执行System.exit()方法,或者是出现Error错误,finally语句才不会被执行而退出程序。

 1 import java.io.*;
 2
 3 public class FinallyTest {
 4
 5     public static void main(String[] args) {
 6         File file=null;
 7         BufferedReader input=null;
 8         file=new File("abc.txt");
 9
10         try
11         {
12             input=new BufferedReader(new FileReader(file));
13         }
14         catch(FileNotFoundException e)
15         {
16             System.out.print("abc.txt is not found: ");
17             System.out.println("This is FileNotFoundException");
18         }
19         finally
20         {
21             System.out.println("This is finally code part.");
22         }
23
24     }
25
26 }

abc.txt is not found: This is FileNotFoundException
This is finally code part.

时间: 2024-10-09 21:12:30

Java: 异常处理机制的相关文章

Java异常处理机制的秘密

一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw2.finally中throw一定能抛回上一层,因为此时其后的return不会被执行到(throw中断了正常的顺序流)3.在try/catch中return并不会直接返回上一层,而是先执行finally再返回 二.一段小程序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Java异常处理机制 —— 深入理解与开发应用

本文为原创博文,严禁转载,侵权必究! Java异常处理机制在日常开发中应用频繁,其最主要的不外乎几个关键字:try.catch.finally.throw.throws,以及各种各样的Exception.本篇文章主要在基础的使用方法上,进一步分析在开发中如何使用异常机制更合理. try-catch-finally try-catch-finally块的用法比较简单,使用频次也最高.try块中包含可能出现异常的语句(当然这是人为决定的,try理论上可以包含任何代码),catch块负责捕获可能出现的

Java 异常处理机制和集合框架

课程  Java面向对象程序设计   实验名称  异常处理机制.集合框架 班级    13级计三          学号  10503                姓名 一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:try.catch.finally.throw.throws,请理解每个关键字的作用,并在编写程序,使用运用这5个关键字,观察效果

Java异常处理机制就是程序代码执行过程

我也是通过各种方式在进行验证是否可以满足我们的需求,今天我就发现了一个问题.现在我们来一起说明一下,这个可能不算是bug,而应该需要我们记住就可以了. 对于一副灰度图像I,她的每一个像素点I(x,y)都有一个灰度值,一般情况下可能的灰度取值有2^8=256个(0,1,...,255).如果我们统计出灰度值r在I中出现的次数n,并对其进行归一化(n/N,N是所有灰度值出现次数的总和),这样我们就可以得到像素r在I中出现的概率p(r).如果对每一个可能的灰度取值r都做同样的处理,我们可以得到如图1左

Java异常处理机制很有意思

前言:在网络上看到一篇<深入理解Java异常处理机制>,看完感觉自己也有一点小想法,的确在很多Java学者的眼里,异常处理机制不就是try catch finally吗,有啥好理解,很多时候,我也经常忽略这方面的内容,感觉没什么有意思的,那么我们来扎个小马步吧 1.经过对原作者的例子改造 package mwq; public class T1 { public static void main(String[] args) { boolean b = true; try { b = tb1(

【转】深入理解java异常处理机制

深入理解java异常处理机制 1. 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,"猜猜"它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦. <span style="background-color: rg

如何正确使用Java异常处理机制

第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构造方法 2.1.2 Throwable的所有成员方法 2.2 Error 2.3 Exception 2.4 RuntimeException 2.5 Checked Exception 2.6 Uncheck Exception 2.7 总结 第三节 Java异常处理执行流程探究 3.1 流程一 3.2 流程二 3.3 流程三 3.4 流程四 3.5 流程五 3.6 流程六 3.

java异常处理机制详解

java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我们还可以提供一定的应对预案.C语言中的异常处理是简单的通过函数返回值来实现的,但返回值代表的含义往往是由惯例决定的.程序员需要查询大量的资料,才可能找到一个模糊的原因.面向对象语言,比如C++, Java, Python往往有更加复杂的异常处理机制.这里讨论Java中的异常处理机制. 异常处理 Ja

Java异常处理机制:try...catch...的执行流程

Java异常处理机制:try...catch...的执行流程 在项目中遇到try...catch...语句,因为对Java异常处理机制的流程不是很清楚,导致对相关逻辑代码不理解.所以现在来总结Java异常处理机制的处理流程: 1.异常处理的机制如下: 在方法中用 try... catch... 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个不同类型的异常. 对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 声明异常,通过throw语句拋出异常,即由上层的调用方法

深入理解Java异常处理机制

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