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. 神经网络优化篇:详解正则化(Regularization)

    正则化 深度学习可能存在过拟合问题--高方差,有两个解决方法,一个是正则化,另一个是准备更多的数据,这是非常可靠的方法,但可能无法时时刻刻准备足够多的训练数据或者获取更多数据的成本很高,但正则化通常有 ...

  2. Educational Codeforces Round 160 (Rated for Div. 2) 题解A~D

    Educational Codeforces Round 160 (Rated for Div. 2) A. Rating Increase 纯暴力,分割字符串,如果n1<n2就输出,如果遍历完 ...

  3. Docker的安装、镜像加速配置

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce. ...

  4. NC65二开经验总结

    公式相关 1.显示公式没执行 列表界面显示,卡片界面不显示: Handler的onBoCard执行: getBillCardPanel().execHeadLoadFormulas(); Contro ...

  5. OpenEuler22.03安装PostgreSQL15.5并配置一主二从

    环境准备 序号 IP 标识(hostname) CPU/内存配置 系统盘 数据盘 1 192.168.8.190 pg01 8C+16G 80G 500G 2 192.168.8.191 pg02 8 ...

  6. 从零玩转SpringSecurity+JWT整合前后端分离-从零玩转springsecurityjwt整合前后端分离

    title: 从零玩转SpringSecurity+JWT整合前后端分离 date: 2021-05-06 14:56:57.699 updated: 2021-12-26 17:43:19.478 ...

  7. python3发送Gratuitous ARP更新vip绑定关系

    操作系统 :CentOS 7.6_x64 Python版本:3.9.12 FreeSWITCH版本 :1.10.9 高可用场景下,vip切换完成后需要发送arp广播更新ip和mac地址的绑定关系,如果 ...

  8. MySQL运维实战(1.3)安装部署:源码编译安装

    作者:俊达 引言 在大多数情况下,我们不需要自己编译MySQL源码,因为编译的MySQL和二进制包的内容基本一致.然而,有些特殊情况可能需要我们采用源码编译的方式安装MySQL: 安装非标准版本的My ...

  9. Quartz.Net系列(八):Trigger之CalendarIntervalScheduleBuilder详解

    所有方法图 CalendarIntervalScheduleBuilder方法 在SimpleScheduleBuilder基础上实现了日.周.月.年 WithInterval:指定要生成触发器的时间 ...

  10. Linux神器strace的使用方法及实践

    在Linux系统中,strace命令是一个集诊断.调试.统计与一体的工具,可用来追踪调试程序,能够与其他命令搭配使用,接下来就Linux系统调用工具strace的使用方法和实践给大家做个详细介绍,一起 ...