异常处理----使用 try…catch…finally 处理异常

使用 try…catch…finally 处理异常

异常处理是通过try-catch-finally语句实现的。
  try {
    ...... //可能产生异常的代码
  } catch( ExceptionName1 e ) {
    ...... //当产生ExceptionName1型异常时的处置措施
  } catch( ExceptionName2 e ) {
    ...... //当产生ExceptionName2型异常时的处置措施
  } [finally {
    ...... //无条件执行的语句
  } ]

异常处理举例
public class Test8_2 {
  public static void main(String[] args) {
    String friends[]={"lisa","bily","kessy"};
    try {
      for(int i=0;i<5;i++) {
        System.out.println(friends[i]);
      }
    } catch(ArrayIndexOutOfBoundsException e) {
      System.out.println("index err");
    }
    System.out.println("\nthis is the end");
  }
}

运行结果:
  lisa
  bily
  kessy
  index err

  this is the end

public class DivideZero1{
  int x;
  public static void main(String[] args) {
    int y;
    DivideZero1 c=new DivideZero1();
    try{
      y=3/c.x;
    } catch(ArithmeticException e){
      System.out.println("divide by zero error!");
    }
    System.out.println("program ends ok!");
  }
}

运行结果:
  divide by zero error!
  program ends ok!


 1 public class TestTryCatchFinally {
 2     public static void main(String[] args) {
 3
 4         try {
 5             int i = 10;
 6             int j = i / 0;
 7         }catch (NullPointerException e) {
 8             System.out.println(e.getMessage());
 9         }catch(ClassCastException e) {
10             System.out.println(e.getMessage());
11         }catch(Exception e) {
12             System.out.println(e.getMessage());
13         } finally{
14              System.out.println("finally...");
15          }
16
17         //不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行。
18
19         System.out.println("end...");
20
21         //示例编译时异常, IO 异常属于编译时异常.
22
23         try {
24             InputStream is = new FileInputStream("abc.txt");
25         } catch (FileNotFoundException e) {
26             e.printStackTrace();
27         }
28     }
29 }

捕获异常

try
捕获异常的第一步是用try{…}语句块选定捕获异常的范围,将可能出现异常的代码放在try语句块中。
catch (Exceptiontype e)
在catch语句块中是对异常对象进行处理的代码。每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

如果明确知道产生的是何种异常,可以用该异常类作为catch的参数;也可以用其父类作为catch的参数
可以用ArithmeticException类作为参数,也可以用RuntimeException类作为参数,或者用所有异常的父类Exception类作为参数。但不能是与ArithmeticException类无关的异常,如NullPointerException,那么,catch中的语句将不会执行。

捕获异常的有关信息:
与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。
getMessage( ) 方法,用来得到有关异常事件的信息
printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。

finally
捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try、catch代码块中是否发生了异常事件,finally块中的语句都会被执行
finally语句是可选的

运行时异常和编译时异常

前面但使用的异常都是RuntimeException类或是它的子类,这些类的异常的特点是:即使没有使用try和catch捕获,Java自己也能捕获,并且编译通过 ( 但运行时会发生异常使得程序运行终止 )。

如果抛出的异常是IOException类的异常,则必须捕获,否则编译错误。

IOException 异常处理举例

public class Test8_3{
  public static void main(String[] args) {
    FileInputStream in=new FileInputStream("myfile.txt");
    int b;
    b = in.read();
    while(b!= -1) {
      System.out.print((char)b);
     b = in.read();
    }
    in.close();
  }
}

public class Test8_3 {
  public static void main(String[] args) {
    try{
      FileInputStream in=new FileInputStream("myfile.txt");
      int b;
      b = in.read();
      while(b!= -1) {
        System.out.print((char)b);
        b = in.read();
      }
      in.close();
    }catch (IOException e) {
      System.out.println(e);
    }finally {
      System.out.println(" It’s ok!");
    }
  }
}

时间: 2025-01-15 00:55:25

异常处理----使用 try…catch…finally 处理异常的相关文章

22 C#中的异常处理入门 try catch throw

软件运行过程中,如果出现了软件正常运行不应该出现的情况,软件就出现了异常.这时候我们需要去处理这些异常.或者让程序终止,避免出现更严重的错误.或者提示用户进行某些更改让程序可以继续运行下去. C#编程语言本身就为我们提供了这种异常处理机制. C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零.或者试图将一个字符串"aaa"转换成整数. 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式.C# 异常处理时建立在四个关键词之上的:try.catch.finally

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

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

结构化异常处理(二):配置异常的状态

一.TargetSite属性(public MethodBase TargetSite { get; }) System.Exception.TargetSite属性帮助我们了解引发某个异常的方法的各种信息.输出TargetSite的值将显示返回值类型.方法名称.引发异常方法的参数. 它不是只返回字符串,而是返回一个强类型的System.Reflection.MethodBase对象. 1 Console.WriteLine("Member name: {0}", e.TargetSi

结构化异常处理(三)系统级异常和应用程序级异常

一.系统级异常 1.准去的说,.NET平台引发的一场应被称为系统异常.这些异常被认为是无法修复的致命错误. 2.系统异常直接派生自名为System.SystemException的基类,该基类派生自System.Exception. SystemException除了一组自定义的构造函数不添加任何功能. public class SystemException :  Exception { //各种构造函数 } 3.当一个异常类型派生自System.SystemException时,我们就能够判

try~Catch语句中异常的处理过程

[2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 下面的例子介绍了try~catch语句中出现异常时语句的执行顺序: package month10; import java.lang.*; public class TryCatch{ /* * 函数产生一个ArithmeticException异常 */ public static void First(){ System.out.println("第一个异常处理的例子"); try{ //double

JAVA异常处理原则和log4j输出详细异常分析

1.多用try,catch;不要一个try,catch包含所有内容 好处:不同模块抓取不同异常,某一模块异常挂了,不影响其他模块的程序的进行 2.多写几个catche:尽量不要使用Exception这个大异常去包容所有异常 不要为了追求代码的简练,try,catch只写一个,使用Exception去抓取所有可能的异常,这只是理想状态,程序出错不是直接打印出来异常就完事了,应该在catche抓取异常的同时一方面给程序员输出错误日志,一方面做些处理反馈给用户,比如一些提示错误框或者错误页面,不能让用

如何创建一个可以使用try.....catch.......捕获的异常

代码很简单,大家一看基本上就能明白(有一定的java基础,熟悉try......catch.....finally的使用方法) 1 package com.nokia.test1; 2 3 4 public class test { 5 6 7 public static void main(String[] args) { 8 9 NumberTest n = new NumberTest(); 10 11 //捕获异常 12 try{ 13 System.out.println("商=&qu

SpringBoot学习14:springboot异常处理方式4(使用SimpleMappingExceptionResolver处理异常)

修改异常处理方法3中的全局异常处理Controller即可 package bjsxt.exception; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.bind.annotation.ControllerAdvice; import org.spring

异常处理方法 try catch finally

try catch finally的用法 package com.异常; import java.util.InputMismatchException; import java.util.Scanner; /** * 异常 * @author Administrator * try catch finally用法 */ public class Test1 { public static void main(String[] args) { Scanner sc =new Scanner(Sy