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


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

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

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

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

    1. import java.util.*;
    2. public class testdemo {
    3. public static void main(String argu[]){
    4. Scanner scanner=new Scanner(System.in);
    5. int a=10;
    6. int b=0;
    7. int result=0;
    8. result = a / b;
    9. System.out.println("result="+result);
    10. }
    11. }

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

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

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

    然后我们介绍一下异常类

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

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

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

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

    1. import java.util.*;
    2. public class testdemo {
    3. public static void main(String argu[]){
    4. Scanner scanner=new Scanner(System.in);
    5. int a=10;
    6. int b=0;
    7. int result=0;
    8. try {
    9. System.out.println("这句话是try内部的代码1,位于出错代码前面");
    10. result = a / b;
    11. System.out.println("这句话是try内部的代码2,位于出错代码后面");
    12. }
    13. catch (Exception shit) {
    14. System.out.println("进入catch内的代码,可以调用Exception a了");
    15. System.out.println("开始调用a的成员方法");
    16. System.out.println(shit.getMessage());
    17. System.out.println(shit.toString());
    18. }
    19. finally {
    20. System.out.println("这是finally方法部分,无论发生什么都会执行这个部分");
    21. }
    22. }
    23. }

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

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

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

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

    1. package homwork4;
    2. import java.util.*;
    3. public class testdemo {
    4. public static void main(String argu[]){
    5. Scanner scanner=new Scanner(System.in);
    6. int a=10;
    7. int b=0;
    8. int result=0;
    9. try {
    10. result = a / b;/*注意看这个地方,这个地方会发生错误
    11. 系统会自动生成一个Exception类的变量,但是你不知道,因为他是隐藏起来的
    12. 你要写一个变量去接受它。这就是我们下一行代码catch哪个代码做的事情*/
    13. }
    14. catch (Exception shit) /*
    15. 你可以随便给这个Exception起名字,你可以像我一样叫他shit,
    16. 你也可以叫他boy,girl,反正变量名是什么都可以
    17. 但记得下面调用的时候,也要记得一起改名字*/
    18. {
    19. System.out.println(shit.getMessage());//有同学不理解,比如我,这个getMessage是哪里来的?这个系统Exception类自动带的方法,就像Random,Scanner,一样都是自带的。
    20. System.out.println(shit.toString());//toString也是Exception类自带的成员方法
    21. }
    22. finally {
    23. System.out.println("这是finally方法部分,无论发生什么都会执行这个部分");
    24. }
    25. }
    26. }

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

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

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

     上面是People类和MyExtension的定义

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

    1. package homwork4;
    2. import java.util.*;
    3. public class testdemo {
    4. public static void main(String argu[]){
    5. int result=0;
    6. People Patrick=new People();
    7. People Edison=new People();
    8. try
    9. {
    10. Patrick.setAge(180);
    11. }
    12. catch (MyException shit) //此时的shit在People里面已经被有参构造好了
    13. {
    14. System.out.println(shit.toString());
    15. }
    16. System.out.println("-----------------------------------");
    17. try
    18. {
    19. Edison.setAge(87);
    20. }
    21. catch(MyException damn){
    22. System.out.println(damn.toString());//如果成功这一行就不会执行
    23. }
    24. System.out.println("-----------------------------------");
    25. }
    26. }

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

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

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

  • 相关阅读:
    Linux系统中,如果您遇到“系统资源不足,无法创建新的管道“的错误
    Python Opencv实践 - 模板匹配(Template Matching)
    找不到模块“./App.vue”或其相应的类型声明。ts(2307)
    Linux系统移植一:移植U-BOOT 添加自己的板子并编译(非petalinux版)
    VR家居为什么盛行?可以解决哪些传统家居的痛点?
    Redis 异常三连环
    cocos 2.4*版本的基础使用笔记分享(一)
    tvm在linux环境下的安装与编译及vscode如何配置tvm的远程连接调试环境
    Flutter组件--TabBar使用详情(分段控制器)
    RabbitMQ实战
  • 原文地址:https://blog.csdn.net/Ultravioletrays/article/details/127640192