首页 > 编程语言 >java基础-异常Exception-day10

java基础-异常Exception-day10

时间:2023-09-17 12:00:32浏览次数:43  
标签:Exception java msb01 System day10 println com public out

目录

1. 练习

package com.msb01;

import java.util.Scanner;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 10:58
 * @Description: com.msb01
 * @version: 1.0
 */
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int num1 = sc.nextInt();

        System.out.println("请输入第二个数:");
        int num2 = sc.nextInt();

        System.out.println(num1/num2);
    }
}


通过 if-else堵住异常 可读性 差

2. 异常三联 try-catch-finally

package com.msb01;

import java.util.Scanner;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 10:58
 * @Description: com.msb01
 * @version: 1.0
 */
public class Test {
    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            int num1 = sc.nextInt();

            System.out.println("请输入第二个数:");
            int num2 = sc.nextInt();

            System.out.println(num1/num2);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println(1111);
        System.out.println(222);
        System.out.println(333);
    }
}

异常被打印 后续代码正常执行

如果catch中异常的类型不匹配 不会走catch的逻辑 相当于 没捕获

异常捕获后如何处理

  1. 不处理
  2. 自定义输出
  3. 打印异常
  4. 抛出异常
![](/i/l/?n=23&i=blog/1422290/202309/1422290-20230917110918461-828857373.png)

什么情况下 try-catch 后面的逻辑(谢谢使用计算器)不会执行

  1. throw抛出异常
  2. catch 没有捕获住异常
  3. try中遇到return 方法里面将返回值返回调用方

怎样才能 无论如何都执行try-catch 后面的逻辑
将逻辑放入 finally

reuturn与finally的先后顺序
先finally后return (记忆方法 f排序在r的前面)

哪些逻辑会放入finally
关系数据源 关闭io 关闭socket

有一句代码很厉害可以不让finally里面的逻辑执行
System.exit(0); jvm虚拟机退出

package com.msb01;

import java.util.Scanner;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 10:58
 * @Description: com.msb01
 * @version: 1.0
 */
public class Test {
    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            int num1 = sc.nextInt();

            System.out.println("请输入第二个数:");
            int num2 = sc.nextInt();

            System.out.println(num1/num2);

//            System.exit(0);
            return;
        } catch (Exception e) {
            System.out.println("对不起输出有误 无法计算");

            System.out.println(e.toString());
            System.out.println(e.getMessage());
            e.printStackTrace();

//            throw e;
        } finally {
            System.out.println("谢谢使用计算器");
        }
    }
}

并列符| 连接多个异常

package com.msb01;

import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 10:58
 * @Description: com.msb01
 * @version: 1.0
 */
public class Test {
    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第一个数:");
            int num1 = sc.nextInt();

            System.out.println("请输入第二个数:");
            int num2 = sc.nextInt();

            System.out.println(num1/num2);

//            System.exit(0);
            return;
        } catch (ArithmeticException |InputMismatchException |Exception) {
            System.out.println("对不起输出有误 无法计算");
        } finally {
            System.out.println("谢谢使用计算器");
        }
    }
}

3.异常的分类

检查异常:防范于未然 写代码的时候就要对代码的异常进行处理
运行异常:写代码的会后不用特意对异常进行处理 运行过程中没法执行 才会抛出异常

package com.msb01;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 11:38
 * @Description: com.msb01
 * @version: 1.0
 */
public class TestException01 {

    public static void main(String[] args) {
        int[] a1 = {1, 2,3};
        System.out.println(a1[10]);
    }
}

public class TestException01 {

    public static void main(String[] args) {
        int[] a1 = {1, 2,3};
//        System.out.println(a1[10]);
        int[] a2 = null;
        System.out.println(a2.length);
    }
}

package com.msb01;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 11:41
 * @Description: com.msb01
 * @version: 1.0
 */
public class TestException02 {

    public static void main(String[] args) {
        Class.forName("com.msb01.Test").newInstance();
    }
}
![](/i/l/?n=23&i=blog/1422290/202309/1422290-20230917114307186-307719948.png)

package com.msb01;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 11:41
 * @Description: com.msb01
 * @version: 1.0
 */
public class TestException02 {

    public static void main(String[] args) {
        try {
            Class.forName("com.msb01.Test").newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

package com.msb01;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 11:41
 * @Description: com.msb01
 * @version: 1.0
 */
public class TestException02 {

    public static void main(String[] args) {
        try {
            Class.forName("com.msb01.Test").newInstance();
        } catch (InstantiationException|IllegalAccessException|ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}


alt+enter快捷键
提示两种处理方式 一个是 throws 一个是 try/catch


package com.msb01;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 11:41
 * @Description: com.msb01
 * @version: 1.0
 */
public class TestException02 {

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        Class.forName("com.msb01.Test").newInstance();

    }
}

3. 子类throws的异常 小于等于父类的异常

package com.msb01;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 11:47
 * @Description: com.msb01
 * @version: 1.0
 */
public class Person {
    
    public void eat() throws RuntimeException{
        System.out.println("eat");
        
    }
}

4.自定义异常

package com.msb01;

/**
 * @Auther: jack.chen
 * @Date: 2023/9/17 - 09 - 17 - 11:51
 * @Description: com.msb01
 * @version: 1.0
 */
public class MyException extends RuntimeException {
    static final long serialVersionUID = -70348971907L;

    public MyException() {
    }


    public MyException(String message) {
        super(message);
    }
}


检查异常 需要使用try-catch捕获 或者throws

标签:Exception,java,msb01,System,day10,println,com,public,out
From: https://www.cnblogs.com/cavalier-chen/p/17708189.html

相关文章

  • Java(day16):do-while循环语句
    前言循环是编程中的重要概念,可以让程序执行特定的代码块多次。Java语言提供了多种循环语句,其中最常用的是for和while循环语句。本文将介绍for和while循环语句的基本用法,并提供代码示例和测试用例。摘要本文将涵盖以下内容:for循环语句的语法和用法while循环语句的语法和用法......
  • 基于JavaWeb的校园社团平台设计与开发-计算机毕业设计源码+LW文档
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于JavaWeb的校园社团平台的开发全过程。通过分析基于JavaWeb的校园社团平台管理的不足,创建了一个计算机管理基于JavaWeb的校园社团平台的方案。文章介绍了基于JavaWeb的校园社......
  • RocketMQ 入门实战(4)--Java 操作 RocketMQ
    本文主要介绍使用 Java 来操作RocketMQ,文中所使用到的软件版本:Java1.8.0_341、RocketMQ5.1.3、rocketmq-client-java5.0.5。1、引入依赖<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client-java</artifactId><versio......
  • 2023 JavaScript想进 BAT 的必须要面对的面试题
    2023JavaScript面试题以及答案在本文中,您将学习面试中最常见的JavaScript面试问题和答案。在继续学习JavaScript面试问题和答案之前,我们首先学习完整的JavaScript教程。JavaScript(JS)是使用最广泛的轻量级脚本和编译编程语言,具有一流的功能,由BrendenEich于1995年开发。众所周......
  • 一文读懂Java缓存池:从基础到高级应用
    什么是缓存池Java缓存池是一种用于管理缓存数据的机制,它提供了一种高效的方式来存储和获取数据。缓存池的作用是减少对外部资源的访问次数,提高系统的性能和响应速度。实例说明newInteger(123)与Integer.valueOf(123)的区别在于:newInteger(123)每次都会新建一个对象Integer.v......
  • 马士兵JAVA自学之路
    为了就业,不少同学参加各种各样的培训。决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机、嵌入式、游戏、3G、测试等。那么究竟应该选择什么方向呢?我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自......
  • JAVA17/JAVA21方法精讲
    day05_java基础课程目标1.【理解】什么是方法2.【掌握】方法的格式3.【理解】方法的执行流程4.【掌握】方法的案例5.【理解】方法的重载6.【理解】方法参数的传递方法概述什么是方法方法(method)完成某一个特定功能的代码块方法基本使用将资料中给大家提供的打......
  • windows path及java path
    原理:在cmd敲击下的命令直接从path中去找,找不到的设置path即可1执行命令2直接将路径敲全3环境变量path是由系统和用户变量的path叠加的,如果一个执行的命令路径在系统用户和用户变量中均存在,以系统变量为准......
  • 无涯教程-JavaScript - CEILING.MATH函数
    描述CEILING.MATH函数将数字四舍五入到最接近的整数或最接近的有效倍数。ExcelCEILING.MATH函数是Excel中的十五个舍入函数之一。语法CEILING.MATH(number,[significance],[mode])争论Argument描述Required/OptionalNumberNumbermustbelessthan9.99E+307an......
  • mybatis jdbc java 字段类型转换
    在springmvc+mybatis+mysql数据表CREATETABLE`test_jdbc_java_type`(`id`int(11)NOTNULL,`_char`char(50)DEFAULTNULL,`_varchar`varchar(200)DEFAULTNULL,`_numeric`decimal(10,2)DEFAULTNULL,`_decimal`decimal(10,2)DEFAULTNULL,`_b......