异常以异常处理机制

 public class try_catch {
    public static void main(String[] args) {

            int n1 = 10;
            int n2 = 0;
            int res = n1 / n2;

System.out.print("程序正在运行")
    }
}

这段代码会显示出异常,因为一个小问题,导致后面程序无法运行,程序的健壮性很差。java的设计者提供了一种异常处理机制来解决该问题。

异常介绍:

基本概念:
Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
执行过程中所发生的异常事件可分为两大类
1)Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情況。比如:StackOverflowError[栈溢出]和0OM(out ofmemory),Error是严重错误,程序会崩溃。
2)Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception分为两大类:运行时异常[程序运行时,发生的异常]和编译时异常[编程时,编译器检查出的异常]。

                                                                   异常体系图

Trowable 类是 Java 语言中所有错误或异常的超类,是对所有异常进行整合的一个普通类。它的作用就是能够提取保存在堆栈中的错误,Error和Exception继承Trowable。

常见的运行时异常:

1.NullpointerException -空指针异常(当应用程序指向null时,抛出该异常)

2.AritmeticException -数学运算异常(出现异常的运算情况时,抛出该异常)

3.ArraylndexOutOfBoudsException -数组下标越界异常(用非法索引访问数组时,抛出的异常。如果索引为负或者大雨或小于该数组大小则为非法索引)

4.ClassCastException -类型转换异常(当试图将对象强制转换为不是实例的子类时,抛出该异常。)

public class test02 {
    public static void main(String[] args) {
        AAA aa=new B();
        B b=(B)aa;
        C c=(C)aa;//ClassCastException
    }

}
class AAA{

}
class B extends AAA{}
class C extends AAA{}

5.NumberFormatException -数字格式不正确异常(String 类型)

    public static void main(String[] args) {
        String num="wsd";//如果是数字则不会报错
        int number=Integer.parseInt(num);
        System.out.println(number);
    }
}

异常的处理方式:

1.try-catch-finally(捕获发生的异常。自行处理)

2.throws

将发生的异常抛出,交给调用者处理,最顶级的调用者是jvm

3.try{

代码可能有异常

}catch(Excepction e){

捕获到异常时

当异常发生时,系统将异常封装到

Excepction 对象e,传递给catch.如果没有出现异常则不会执行catch代码块。

}fianlly{

不管try是否有异常都要执行finally代码块的内容。所以,通常将释放资源的代码放在finally

}

try{}catch(Excepction e){}finally{}可以有多个catch语句,捕获不同的异常,(进行不同的业务处理),并且要求父类异常在后,子类异常在前。如果发生异常只会匹配一个catch.

4.可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此代码会直接崩掉。应用场景,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑。

try{

//代码

}finally{

总是执行

}

小结:

1.如果没有出现异常,则只执行try里的语句(如果有finally一样执行)catch不执行

2.如果出现异常,则try块剩下的语句不执行,将执行catch的语句,然后看有没有finally,有就执行。

throws的基本介绍

如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。

在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

注意事项:

1.对编译异常,程序中必须处理,比如try -catch或者throws

2.对于运行时异常,程序没有处理,默认就是throws的方式处理。

3.子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型


4。在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必
throws


public class throws_  {
    public static void f1() throws Exception, FileNotFoundException {

            FileInputStream fis=new FileInputStream("d://aa.txt");


    }



    public static void main(String[] args) throws FileNotFoundException, Exception {

        f1();//调用f1方法,抛出了异常
    }
}

throw和throws的区别

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值