JavaSE基础(8)——异常处理

1、异常概述

程序在运行都有可能发生异常(逻辑问题)。

捕获错误最理想的是在编译期间(编译器提示),但有的也发生在运行期间。

异常处理方式:

        1、不处理

        2、程序开发时对有可能出现的错误进行处理

异常的分类:

        1、Error :错误,JVM内部的错误——内存不足,栈、堆异常等

        2、Exception : 异常,因程序逻辑导致——空指针异常,数组索引越界,类型转换异常等

常见异常:

        1、空指针异常:NullPointerException

        2、数组索引越界异常:ArrayIndexOfException

        3、类型转换异常:ClassCastExecption

        4、运算异常:ArithmeticExecption

异常类Throwable的层次结构:

2、异常处理机制

1、抓抛模型

如果程序在运行的时候出现异常,jvm会自动的创建一个异常对象,并对外抛出异常。

程序员可以通过程序设计来对异常进行捕获,并进行处理

try {
    // 可能出现错误的代码
    // 1.只要产生了异常,当前try代码中剩余的代码就不会执行了
    // 2.一个try块,可以对应多个catch块,每一个catch对一种异常进行捕获
    // 3.我们try块中,如果有多个不同的异常,我们可以使用异常的父类Exception

} catch (Exception e) {            
    // 捕获异常的代码
    // 1.catch可以有0个或多个
    // 2.如果有多个catch的时候,需要我们注意 异常要从小到大进行捕获,平级之间顺序无所谓
    e.printStackTrace();
} finally {
    // 程序一定会执行的地方,一般放置一些必须要执行的代码,例如:JDBC中关闭资源连接的代码
    // 特殊情况: 虚拟机(JVM),意外终止——System.exit(0),那么finally中的将不会执行!!

}

catch块中常见的方法:

1.void printStackTrace():  向控制台去输出信息
2.String getMessage():     返回一个字符串,用来表示你异常的信息
 

public class Main {
    public static void main(String[] args) {
        //'catch' or 'finally' expected
        try {
            String s=null;
            System.out.println("Hello world!1");
            //System.exit(0);
            System.out.println("====>"+(s.length()));
            System.out.println("====>"+(3/0));
            System.out.println("Hello world!2");
        }catch (NullPointerException e){
            System.out.println("进入了处理====>NullPointerException");
            String message = e.getMessage();
            System.out.println("message===>"+message);
            e.printStackTrace();
        }catch (Exception e){
            //Exception 'java.lang.NullPointerException' has already been caught
            System.out.println("进入了处理===>NullPointerException");
            e.printStackTrace();
        }finally {
            System.out.println("Hello world!3");
            System.out.println("Hello world!4");
        }
    }
}

2、声明模型 throws—只能在方法名后面使用

public 返回值类型 方法名 throws 异常类名称(参数列表){
    //我们执行的代码
}

public void  test() throws Exception{
    int a=3;
    int b=0;
    System.out.println(a/b); 
}

        1.如果方法能正常运行,会返回一个结果
        2.不能正常运行,会抛出对应异常

throw:配合throws一起使用

public class Person {
    public void test() throws Exception{
        int a=3;
        int b=0;
        if(b==0){
            throw  new Exception("b不能为0");
        }
        System.out.println(a/b);
    }
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.test();
    }
}

3、throwsthrow的区别

1.throws 
    1.声明一个方法的可能产生的所有的异常
    2.方法声明的后面,跟的是异常类的名称,可以后面跟多个异常类名称,使用‘,’隔开
    3.表示是抛出异常,谁用谁处理    
    4.可能会出现异常,并不一定会发生异常!!!
2.throw---手动抛出一个异常对象---为我们下面学习自定义异常准备的!!!!
    1.抛出一个具体的异常
    2.在方法的内部使用,跟的是异常对象
    3.执行表示一定会抛出某个具体的异常对象(不需要别人处理)

4、自定义异常类

    1.创建一个类
    2.让这个类继承Execption或Execption的子类
    3.编写一个构造方法,为ThrowAble中的属性 detailMessage 进行赋值

public class MyExecption extends Exception{
    public MyExecption(String s) {
        super(s);
    }
}

public class MyTest {
    public void test() throws Exception{
        int a = 3;
        String str = "";
        if(str==null){
            throw  new MyExecption("str 是null了 ");//我们自己定义的异常类
        }
    }

    public static void main(String[] args) throws Exception {
        MyTest myTest =new MyTest();
        myTest.test();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值