Java异常

什么是异常

1.接下来我们用一段代码来引入什么叫做异常
public class Expectation01 {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 0;
        int rut = num1/num2;
        System.out.println(rut);
        System.out.println("我能编译出来");
    }
}

这样一段代码就可以将我们引入什么叫做异常,咱们看,代码出现异常ArithmeticException,然后后面的代码就没有编译出来,这就是异常

在以后的实际开发中,开发一个软件可能会有成百上千的文件,但是因为这种微不足道的异常就让系统奔溃,是不是非常不现实,所以就出现了Java设计者的想法,异常捕获机制,try-catch

我们来演示一下,还是那段代码,

也就是选中代码块,然后按住快捷键Ctrl-alt-T 然后选中6try--catch

2.他的好处

这样做有什么好处呢,就是保证了代码的健壮性,然后他不不会被轻易的异常所系统奔溃

3.异常和错误的区别

错误,也就是我们常说的error,也就是我们初学时经常发生的,比如说语法错误,逻辑错误等等,这些都被称之为error而不是异常。就比如说栈溢出,还有内存不足,就像人得了癌症晚期,没有办法用异常捕获机制

异常,它分为运行异常与编译异常,既然都说了他和错误不同,也就是它是因编程错误,与偶然因素导致的一般性问题,空指针,

就比如上面那个问题,他就是运行异常

异常体系图(重点)

在上面就是比较常见的异常,分为error和Expectation,error里面有栈溢出,内存不足,上面都有,然后再expection里面分为运行异常(RuntimeExpection),与编译异常。

然后来进行一个小节:

1.它分为两种异常运行异常与编译异常

2.在运行异常,这种比较常见我们可以不做处理,因为假如我们在写程序时,有100行代码,如果每个运行异常都要处理的化,可能会有五六十行代码都是try--catch;

3.在编译异常中,这是编译器出现的异常我们必须处理;

五大异常
1.空指针异常

这比较简单,就看上面的例子,在上面有两个字符串,一个name一个age一个是null另一个有内容,然后打印的时候就出现空指针异常比较简单;

2.数学运算异常

上面也讲过了就是那个分母为0,时的异常

3.数组下标越界异常

在这段程序中,我们设计了一个数组,然后在下面的遍历中,我们使i=arr.length;就出现了数组下标越界异常

4.类型转换异常

因类型转换而抛出异常

5.数字格式不正确异常

看这样的程序他是正确的,而如果把他变一下,把字符串类型中的1234变为小王,小红,你该怎么办,他就会抛出异常

就是这个样子

异常处理机制运行图

咱知道的异常处理记住有两个一个是try-catch-finally,另一个是throw

try-catch-finally

咱先来解释一下try-catch-finally;

咱们前面说了如果你觉得这个代码块可能有问题,

咱就用try包起来,将这个异常,封装到Expection e中传递给catch

然后再catch{

如果有异常,由程序员自己决定,想干什么干什么}

finally{不管有没有异常,都会经过finally

}

这就是try-catch-finally得机制图

throw

然后是throw,这个就比较有意思,我先说明最后是thorw给jvm然后给你举个例子

当你家丢了一头牛时,你是不是找村长,村长说办不了啊,然后村长上报给县里,然后县里说我也不行啊,然后给省里,省里大手一挥给了你几万块钱这个是过去了,throw得机制就是这个样子

try-catch-finally的注意事项

1.就是他的使用方法

在前面讲过我们就不在过多叙述了

2.就是如果发生异常,异常后面的代码块将不会执行,直接进入到catch中进行捕获,用代码来解释一下

这是没有异常的情况

下面是有异常的情况

他就不执行后面我最帅的语句了

3.如果没有异常发生就不会进入到catch中了

这个很简单,不用过多介绍了

4.若有多个异常,我们可以用多个catch来捕获异常,但是要子类异常在前父类异常在后

像这样有多个异常,如果我们用一个catch来捕获异常,那样当捕获了第一个异常之后,下面的语句就不会执行了,也就是下一个异常就不会捕获了,所以我们要用多个catch来进行捕获,并且子类在前,父类在后

这样就是上面的解释,

如果你把父类放在前面,咱来试一下

就会报错

5.还可以直接用try-finally,就是相当于没有捕获异常,直接finally,程序会直接崩掉
练习题

一开始i被初始化为1;然后进入到try中i++,i变为2,然后下面很明显是空指针异常,然后捕获到catch中,有个return i++,i变为3;这里需要注意的是,要看finally中有没有return,虽然catch有return但是一但finally有return,要在return中执行返回,这里没有然后进入到finally i变为4

你是不是要说输出i= 4;这你就错了,别忘了catch还有个return,他在那里创建了个临时变量temp = 3,所以返回的是i=4,3

练习题 设计一个程序,如果输入的不是整数,就让他一直输入

程序如下

public class test {
    public static void main(String[] args) {
        int num = 0;
        String str = "";
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入一个整数:");
            str = sc.next();
            try {
                num = Integer.parseInt(str);
                break;
            } catch (NumberFormatException e) {
                System.out.println("您输入的不是整数:");
            }

        }

    }

一个比较好理解的例子

throws

在上面我们已经介绍过了,throws的工作原理,也举了他的比较好懂得例子

然后我们就是来介绍一下他的使用方法

thorws后面得异常类型可以是他方法中的异常类型也可以是他的父类

可以看到这两个都可以

throws异常处理

自定义异常

见名知义,就自己定义一个异常类,也就是当出现得异常,expction子类中没有时,可以自己创建一个异常类

他的步骤就是:

1.首先我们先来定义一个类,类名我们自己订就可以,然后这个类,我们要继承Exception或RuntimeExpectation

2.当你定义得是编译异常就是继承Exception

3.要是运行异常就是继承RuntimeExpectation

thorw与throws的区别

thorws他是异常处理的一种方式,与try-catch一样,位置他就是在方法声明处后面加异常类型

thorw他是手动生成异常对象的关键字,他在方法体中,后面加异常对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值