【Java】异常处理

@[异常处理]

异常的原因

  • 数组下标越界
  • 访问不存在文件

异常处理机制

异常处理分类

  • Throwable是所有异常类的父类(也是Object的子类),Java中只有Throwable类及其子类的对象才能由异常处理机制处理。

  • Error - 很难恢复的严重错误,一般不由程序处理

  • RuntimeException - 程序设计或实现的问题,处理方法是纠正错误,重新设计程序

  • 其他Exception通常由环境因素引起,通常由用户误操作引起

try catch()

异常处理方式
1.程序块中捕获并处理
try-catch-finally
代码
try
fianlly可有可无
代码

  • catch 先具体后抽象-父异常放于子异常后,否则可能报错(若有情况,最先捕获父类异常,子类对象被永远屏蔽)
  • 若没有继承关系,先后次序任意

throws

出现异常不加处理,直接上抛,若未处理椅子上抛,如果到main还未被处理,则非正常终止

例:输入三角形面积海伦公式
public class TestException
{
     public static double calculateArea(double a, double b, double c)
     {
     	double p = (a+b+c)/2;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
     }
     public static void main(String[] args)
     {
         /*if (args.length < 3)
        {
            System.out.println("输入的参数个数应至 少为3个,请重新执行本程序");
                 }*/
                 //try{
                                double a = Double.parseDouble(args[0]);
                                double b = Double.parseDouble(args[1]);
                                double c = Double.parseDouble(args[2]);
                                double s = calculateArea(a, b, c);
                                System.out.println("边长为"+a+","+b+","+c+"的三角形面积是"+s);
                       //}catch(ArrayIndexOutOfBoundsException e){
                               //System.out.println("数组访问越界,请至少输入3个参数");           
                      // }
      }
}

NumberFormatException

自定义异常

例:三角形三边关系
import java.util.*;
public class TestAllException
{
          public static double calculateArea(double a, double b, double c) throws TriangleMinusLengthException, TriangleUnequationException
         {
                   if (a<0 || b<0 || c<0)
                            throw new TriangleMinusLengthException("负边长异常");
                   if (a+b<c || a+c<b || b+c<a)
                            throw new TriangleUnequationException("不满足三角不等式异常");
                   double p = (a+b+c)/2;
                   return Math.sqrt(p*(p-a)*(p-b)*(p-c));
          }
         public static void main(String[] args)
        {
                   try{
                                 Scanner reader=new Scanner(System.in);
                                 System.out.println("请输入三角形的边长:");
                                 double a = reader.nextDouble();
                                 double b = reader.nextDouble();
                                 double c = reader.nextDouble();
                                 double s = calculateArea(a, b, c);
                                 System.out.println("边长为" + a + ","+ b + "," + c + "的三角形面积是" + s); 
                                 reader.close();
                      } catch(InputMismatchException e2){
                                 System.out.println("输入的参数必须是数字!");
                      } catch(TriangleMinusLengthException e3){
                                 System.out.println("边长不能是负数");
                      } catch(TriangleUnequationException e4){
                                 System.out.println("边长必须满足三角不等式");
                     }
      }
}

2.可能产生的异常抛出,调用方法的程序块处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值