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. 抛出异常
![](https://img2023.cnblogs.com/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();
}
}
![](https://img2023.cnblogs.com/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

java基础-异常Exception-day10的更多相关文章

  1. Java基础-异常(Exception)处理

    Java基础-异常(Exception)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.异常的概述 什么是异常?Java代码在运行时期发生的问题就是异常.在Java中,把异 ...

  2. 《Java基础——异常的捕获与抛出》

    Java基础--异常的捕获与抛出     '  前言: Error类(错误)和Exception类(异常)是Throwable类的子类. 异常分为CheckedException类(编译时异常)和Ru ...

  3. Atitit java的异常exception 结构Throwable类

    Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...

  4. Java基础 - 异常详解

    异常的层次结构 Throwable Throwable 是 Java 语言中所有错误与异常的超类. Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示 ...

  5. Java基础(55):Exception类详解(转)

    Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...

  6. Java基础——异常体系

    在Java中,异常对象都是派生于Throwable类的一个实例,Java的异常体系如下图所示: 所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,Error和Exception. ...

  7. JAVA基础——异常详解

    JAVA异常与异常处理详解 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1 ...

  8. Java常见异常:Exception in thread "main" java.lang.NoClassDefFoundError

    在某一路径下执行编译好的class文件出错. 异常如下: E:\liwy>java Test98 Exception in thread "main" java.lang.N ...

  9. Java基础——异常

    一.什么是异常  异常的英文单词是exception,字面翻译就是“意外.例外”的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误.比如使用空的引用.数组下标越界. ...

  10. Java基础——异常机制

    [捕获异常] 硬件的错误.输入错误.物理限制等问题,都可能导致程序运行时的异常出现. 1.异常的分类层次 在java中,异常对象都是由Throwable类继承而来的,主要分为两大类: Error和Ex ...

随机推荐

  1. C++ Qt开发:TreeWidget 树形选择组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWid ...

  2. 数字孪生与GIS结合,为智慧交通带来的改变

    在当代社会,交通问题已经成为城市发展中的一个重要挑战.交通拥堵.安全隐患.环境污染等问题给人们的出行带来了许多不便和困扰.然而,随着数字孪生技术与地理信息系统(GIS)的融合,我们迎来了智慧交通的新时 ...

  3. 香橙派5plus从ssd启动Ubuntu

    官方接口图 我实际会用到的就几个接口,背面的话就一个M.2固态的位置: 其中WIFI模块的接口应该也可以插2230的固态,不过是pcie2.0的速度,背面的接口则是pcie3.0*4的速度,差距还是挺 ...

  4. Python 实现 PDF 到 Word 文档的高效转换(DOC、DOCX)

    PDF(Portable Document Format)已成为一种广泛使用的电子文档格式.PDF的主要优势是跨平台,可以在不同设备上呈现一致的外观.然而,当我们需要对文件内容进行编辑或修改,直接编辑 ...

  5. Python——第五章:time模块、datetime模块

    time模块 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍. 我们写程序时对时间 ...

  6. 利用腾讯快捷登录协议截取 QQ ClientKey / QQKey 实战课程

    本文主要通过利用腾讯网页快捷登录协议来模拟访问并截取已登录 QQ 客户端的Token.Uin.ClientKey.Skey.P_skey等. Step 1. https://ssl.xui.ptlog ...

  7. 标注工具合集(点云&图片)

    有什么问题欢迎留言交流,发现好用的会持续更新-- 图片类 1. labelimg:https://github.com/tzutalin/labelImg --- 只能拉框 2. labelme:ht ...

  8. 使用XDT提高开发效率

    使用XDT提高开发效率 XDT介绍 XDT(XML Document Transformation)技术是一种用于对XML文档进行转换的技术.它通常用于在部署或配置过程中,根据不同的环境或条件自动修改 ...

  9. C#数据结构与算法系列(十三):递归——迷宫问题

    1.示例 2.代码实现 public class Maze { public static void Test() { int[][] map = new int[8][]; for (int i = ...

  10. LeetCode LRU缓存机制

    146. LRU缓存机制 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - ...