异常处理3

package c;
/*     异常处理
 *   Java内置的所有异常类都继承于java.lang.Throwable类,Throwable类包含Error和Exception类两个子类
 *   (1)Error类用于描述严重的系统错误,无法通过调节代码本身来解决问题
 *   (2)Exception类用于描述可以在程序中捕获并处理的异常,在平常的异常处理主要是针对该类。
 *   该类中的RuntimeException子类用来描述运行时的异常,这类异常通常事先无法预料发生,因此
 *   编译程序并不强制要求程序中对该类异常进行捕获或者处理
 *   除了RuntimeException,Exception还包的子类属于受检异常类。
 *   Java中利用try...catch语句来捕获异常
 */
 

//例一:
/*抛出异常
 * Exception in thread "main" java.lang.ArithmeticException: / by zero
    at c.Chu.division(Exceptions.java:14)
    at c.Exceptions.main(Exceptions.java:21)
 */
/*class Chu{
    void division(int p1,int p2){
        int result;
        result=p1/p2;
        System.out.println(result);
    }
}
public class Exceptions {
    public static void main(String args[]){
Chu s=new Chu();
s.division(2,0);
   }}*/


//修改后
/*class Chu{
    void division(int p1,int p2)
    {
        int result;
        try{
            result=p1/p2;
            System.out.println(result);
        }catch(ArithmeticException e){
            System.out.println("除数不可以为0");        
        }
        System.out.println("程序执行成功!");
    }
}
public class Exceptions {
    public static void main(String args[]){
     Chu s=new Chu();
     s.division(2,0);
            }   
       }*/


//例2 输入数据类型不符
/*import java.util.*;
public class Exceptions{
    public static void main(String args[]){
        Scanner read=new Scanner(System.in);
        int sum=0;
        int count=0;
        int number;
        while(count<3){
            try{
                number=read.nextInt();
                sum=sum+number;
                count++;
            }catch(InputMismatchException e){
                System.out.println("输入错误,请输入整数");
                read.next();//略过错误的数据
            }
        }
        System.out.println("sum="+sum);
    }
}
/* 注释:
 * (1)try语句表示可能出现异常的代码,catch语句后面指明要捕获的异常,catch语句块中是异常处理代码
   (2)若try语句块中的某行代码出现异常,程序流程将从产生异常的那行代码直接跳转到catch语句,
   如果与catch语句中要捕获的异常匹配,则执行catch语句块中的语句。否则的话,将异常交由JVM处理。
   (3)一个try语句后面可以跟多个catch语句,这主要因为try语句块中的代码可能抛出多个异常,可以
   使用每个catch语句捕获一个异常。但是catch捕获的异常之间有异常关系,必须子类异常在前,父类异常在后
 
 
 如果用于捕获不同异常的多个catch语句块中的异常处理语句块中的异常处理代码如果相同,在JDK7中提供了多重捕获
 语句,其一般的语法如下:
 try{
 可能出现异常代码}
 catch(异常类1|异常类2|异常类3...){
 }
 若多个异常之间有继承关系,必须保证子类在前
 例如:
 try{
 }
 catch(NumberFormatException|Exception e){
 }
*/

//异常处理大致分为三种
/*
 * (1)如果方法本身能够完成异常处理,则在catch语句块中编写异常处理代码,可以使用异常类中的方法
 * 来获取异常信息,如用printStackTrace()方法来获得异常堆栈跟踪信息,查看异常的根源;另外,
 * getMessage()方法可以提供异常的基本描述信息;
 * (2)如果方法本身无法处理异常,需要向上抛出异常,由方法的调用者来处理,方法内部就可以不用
 * try...catch语句捕获、处理异常。例子如下:
 */
public class Exceptions{
    void division(int p1,int p2)throws ArithmeticException{
        int result;
        if(p2==0)
        {
            throw new ArithmeticException("除数不可以为零");
        }
        result=p1/p2;
        System.out.println(result);
    }
    public static void main(String args[]){
        Exceptions s=new Exceptions();
        try{
            s.division(5, 0);
        }
        catch(ArithmeticException e){
            e.printStackTrace();//打印错误追踪信息
        }
    }
}

//如果方法本身需要处理或能够处理异常的部分内容,然后再向上抛出异常也可以,此时在方法内部
//内部使用try...catch语句捕获并处理异常,在catch语句块最后使用throw抛出异常即可。
/*
public class tt{
void division(int p1,int p2)throws ArithmeticException{
int result;
try{
result=p1/p2;
System.out.println(result);
}
catch(ArithmetException e)
{
System.out.println("本方法无法处理全部异常只能向上抛出");
throw e;
}
}
public static void main(String arg[]){
 tt s=new tt();
 try{
 s.division(5,0);
 }
 catch(ArithmeticException e)
 {
 e.printStackTrace();
 System.out.println("异常在主方法中解决");
 }
 }
 }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值