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. 27、Type关键字

    1.是什么? type是go语法里额重要而且常用的关键字,type绝不只是对应于C/C++中的typeof.搞清楚type的使用,就容易理解Go语言中的核心概念struct.interface.函数等 ...

  2. python学习笔记:python的字符串拼接效率分析

    问题的起因是因为在做LeetCode5714题的时候,对于字符串拼接使用了 ans = ans+s[i] 提交后超时了,改成 ans+=s[i] 就可以通过了,而且用c++好像也有这个问题,在此记录一 ...

  3. 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)

    引言 哈喽.大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.net mvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery ...

  4. 解决C#连接MySQL数据库报错 MySqlConnector

    如果主机不支持 SSL 连接,则不会使用 SSL 连接. 连接不上. 解决方案:在连接字符串后添加 sslmode = none. <add key="connstring" ...

  5. Windows 7更新失败的解决方法

    你好,1.在开始菜单中点击运行,→输入"services.msc"→找到"windows update"右击选择"停止":2.进入C:\wi ...

  6. Python笔记三之闭包与装饰器

    本文首发于公众号:Hunter后端 原文链接:Python笔记三之闭包与装饰器 这一篇笔记介绍 Python 里面的装饰器. 在介绍装饰器前,首先提出这样一个需求,我想统计某个函数的执行时间,假设这个 ...

  7. 初探Git:理解和使用版本控制的魔法

    遥远的古代,有一位美丽的仙女叫做嫦娥.她的丈夫后羿获得了令人长生不老的鹿骨露.一天,嫦娥在好奇心的驱使下,独自偷喝了这瓶仙药. 喝下仙药的瞬间,嫦娥发现自己开始飘起,越飘越高,最后飘向了月亮.嫦娥惊慌 ...

  8. 拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、用户使用手册)

    @ 目录 前言 1. 需求分析 2. 可行性分析 2.1 简介 2.2 技术可行性分析 2.2.1 技术实现方案 2.2.2 开发人员技能要求 2.2.3 可行性 2.3 操作可行性分析 2.4 结论 ...

  9. ElasticSearch-1

    原文链接:https://gaoyubo.cn/blogs/52ef5bf7.html 一.Elasticsearch 架构设计 Elasticsearch 架构层: Elasticsearch 五层 ...

  10. Blazor技术入门

    曾写过点儿前后端分离的项目(Vue+.NET Core Web API).WPF和WinForm.因为Blazor不支持小程序的原因(相对于uniapp),所以只是大概知道Blazor可以写Web.P ...