Java系列 超简单说人话的 异常类详细讲解 Exception MyExcepyion try catch语句

上这个课的时候我脑子很乱,我不理解try catch语句是要写哪里,还有throw throws的用法 

throw要放在哪里,反正就是很多东西没有理解到位。

现在我们来从头到尾来梳理一遍

首先我们看一下下面这个代码

import java.util.*;
public class testdemo {
    public static void main(String argu[]){
        Scanner scanner=new Scanner(System.in);

        int a=10;
        int b=0;
        int result=0;
            result = a / b;
        System.out.println("result="+result);

    }
}

我执行这段代码 会发现出错

 因为0不能做除数,报错如下,我们发现最后一句System.out.println("result")那句是输出不出来的

说明在result=a/b那一句直接发生断层了,后面直接不执行了。因为发生了异常。

然后我们介绍一下异常类

我们一般用系统已经给出来的异常类Exception,但是这个Exception应该放在哪里呢?

首先我们的Exception是不用自己写的,如果发生了错误,我们会直接产生Exception,那这个Exception要怎么用呢?怎么调用呢,他会产生在哪里呢?

我们来举一个简单的例子。

但首先我们要知道try catch 还有final语句

import java.util.*;
public class testdemo {
    public static void main(String argu[]){
        Scanner scanner=new Scanner(System.in);

        int a=10;
        int b=0;
        int result=0;
           try {
               System.out.println("这句话是try内部的代码1,位于出错代码前面");
               result = a / b;
               System.out.println("这句话是try内部的代码2,位于出错代码后面");
           }
           catch (Exception shit) {
               System.out.println("进入catch内的代码,可以调用Exception a了");
               System.out.println("开始调用a的成员方法");
               System.out.println(shit.getMessage());
               System.out.println(shit.toString());
           }
           finally {
               System.out.println("这是finally方法部分,无论发生什么都会执行这个部分");
        }


    }
    }

这个是执行结果,你可以复制我的代码 自己去编程软件里面看一看,是不是一样的结果。

我们参照这样的输出结果,然后自己和我的代码一行一行的去对照,这个过程你一定要做。

不要让我给你解释 因为你记不住。

有同学看到这段代码就有点懵逼了,有点看不懂,我来给你解释一下。

package homwork4;
import java.util.*;
public class testdemo {
    public static void main(String argu[]){
        Scanner scanner=new Scanner(System.in);

        int a=10;
        int b=0;
        int result=0;
           try {
             
               result = a / b;/*注意看这个地方,这个地方会发生错误
系统会自动生成一个Exception类的变量,但是你不知道,因为他是隐藏起来的
你要写一个变量去接受它。这就是我们下一行代码catch哪个代码做的事情*/
               
           }
           catch (Exception shit) /*
你可以随便给这个Exception起名字,你可以像我一样叫他shit,
你也可以叫他boy,girl,反正变量名是什么都可以
但记得下面调用的时候,也要记得一起改名字*/
            {
               
               System.out.println(shit.getMessage());//有同学不理解,比如我,这个getMessage是哪里来的?这个系统Exception类自动带的方法,就像Random,Scanner,一样都是自带的。
               System.out.println(shit.toString());//toString也是Exception类自带的成员方法
           }
           finally {
               System.out.println("这是finally方法部分,无论发生什么都会执行这个部分");
        }


    }
    }

注意注意!!try catch finally这些语句都要写要执行的主函数里面,就是String Argu[]里面,不要把它揉到其他类里面。

讲完了系统自带的Exception类,我们现在要讲一讲自定义异常类(也就是自己写一个类,但这个类是通过继承系统自带的Exception类来的,所以肯定是Exception的子类

package homwork4;//这个看不明白先不管 学了包再来看
class MyException extends Exception{
String message;//用来记录自己想要返回的信息
public MyException(int age)//
{
    System.out.println("myexception的构造函数用来给成员变量message赋值");
    message="message为记录age的值"+age;
}
public String toString(){
    return message;
}
}
public class People {
    private int age=1;
    public int getAge(){
        System.out.println("这是自己写的getAge函数,功能是返回age的数值");
        return age;
    }
    public void setAge (int a)throws MyException//throws后面是你这个方法可能用到的自定义异常类 throws和throw相互呼应缺一不可
    {
        System.out.println("这是自己写的setAge函数,功能是改变age的数值");
        if(a<=0||a>=100){
            System.out.println("这是setage内部,同时当你看见现在这段文字的时候,说明已经超出范围了,我们要手动暂停程序,然后代替系统执行生成EXception类的行为");
            throw new MyException(age);//你写throw的时候函数setAge后面必须要写throws
        }
        else{
            this.age=a;
        }
    }
}

 上面是People类和MyExtension的定义

下面是String主函数的执行代码

package homwork4;
import java.util.*;
public class testdemo {
    public static void main(String argu[]){

        int result=0;
        People Patrick=new People();
        People Edison=new People();
           try
           {
                   Patrick.setAge(180);
           }
           catch (MyException shit) //此时的shit在People里面已经被有参构造好了
         {
               System.out.println(shit.toString());
         }
           System.out.println("-----------------------------------");

           try
        {
            Edison.setAge(87);
        }
           catch(MyException damn){
               System.out.println(damn.toString());//如果成功这一行就不会执行
           }

           System.out.println("-----------------------------------");

    }
}


同学们自己参照一下 一行行的对比。

大部分的注释我都写在代码里面的注意看看。

还听不懂就看这个视频Java 异常类基础知识_哔哩哔哩_bilibili

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨骅麟(Patrick Young)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值