JavaSE_day37(异常介绍,异常处理方式2种,确定相对路径的技巧两种,如何处理多个异常,Throwable的常用方法,Fianlly关键字)

news/2024/10/17 10:24:37/

1 A.java

/*异常(机制)介绍


 * Exception in thread "main" java.lang.ArithmeticException: / by zero
    at com.itjinling_01.ExceptionDemo.main(ExceptionDemo.java:5)
    
    我们在写代码的时候,经常的出现一些小问题,那么为了方便我们处理这些问题,java为我们提供了异常机制
    
    异常包含了错误的类型、原因以及位置
    
    异常:不正常,我们在代码的时候出现的编译或者运行时的错误
    
    异常的体系结构:
            Throwable(最顶层)
                    Error:出现的不能够处理的严重问题
                    Exception:可以处理的问题
                    
    电脑坏了:
        系统中毒:重装系统就可以了   exception
        主板坏了:买一台新的             error
 * 
 */

public class A {public static void main(String[] args) {/*int a = 10 / 0;//编译正常System.out.println(a);  //运行异常  :Exception in thread "main" java.lang.ArithmeticException: / by zeroat com.itjinling_01.ExceptionDemo.main(ExceptionDemo.java:5)*/
//		FileWriter fw = new FileWriter("a.txt"); //编译错误 , 需要在方法中抛出异常}
}

2 B.java 

 *     异常的处理方式:
        捕获处理:见C.java
            try...catch语句
        抛出去   :见D.java
            throws
 *         
 * 
 *  jvm处理异常的方式:
 *      如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行
 *      并且还终止了程序,异常后面的代码将不在执行


public class B {public static void main(String[] args) throws Exception {System.out.println(2/0);System.out.println("hello");}
}

3 C.java

 *     异常的处理方式:
 *             捕获处理
 *                 try...catch语句
 * 
 *                 try {
 *                     有可能出现问题的代码;
 *                 } catch(ArithmeticException ae) {
 *                     处理异常;
 *                 }
 * 
 *                 try...catch的执行顺序:
 *                     首先执行try语句
 *                         如果发现异常,异常下面的代码不在执行直接跳入catch语句中,catch语句结束后,整个try...catch结束
 *                         如果没有发现异常,try语句执行结束后,try...catch直接结束, 不在执行catch语句
 * 

 *  jvm处理异常的方式:
 *      如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行
 *      并且还终止了程序,异常后面的代码将不在执行
 */
 

public class C {public static void main(String[] args) throws Exception {try {System.out.println(1);System.out.println(2 / 0);//这段报错的代码后面的代码不会执行!System.out.println(2);} catch (ArithmeticException ae) {System.out.println("除数不能为0");}System.out.println(3);}}

4 D.java

 *     异常的处理方式:
 *             捕获处理
 *                 try...catch语句
 * 
 *                 try {
 *                     有可能出现问题的代码;
 *                 } catch(ArithmeticException ae) {
 *                     处理异常;
 *                 }
 * 
 *                 try...catch的执行顺序:
 *                     首先执行try语句
 *                         如果发现异常,异常下面的代码不在执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束
 *                         如果没有发现异常,try语句执行结束后,try...catch直接结束, 不在执行catch语句
 * 
 * 
 *             抛出去throws
 *                 当我们不想处理异常,或者没有能力处理的时候,我们可以选择抛出异常,谁调用方法谁处理异常
 *                 使用关键字throws在方法的声明出抛出异常

 *         
 * 
 *  jvm处理异常的方式:
 *      如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行
 *      并且还终止了程序,异常后面的代码将不在执行

public class D {public static void main(String[] args) throws IOException {method();function();}public static void function() throws IOException {FileWriter fw = new FileWriter("src/day37/a.txt");fw.write("aSA");fw.flush();fw.close();}private static void method() {try {System.out.println(1);//System.out.println(2 / 0);System.out.println(2);} catch(ArithmeticException ae) {System.out.println("除数不能为0");}System.out.println(3);}
}

补充题外话,确定相对路径的小技巧:

eclipse软件的相对路径在java项目根目录下开始,vscode的会有提示比较方便)

①new FileWriter(a.txt)看生成在哪里

②File f2 = new File("a.txt"); 与

 System.out.println(f2.getAbsolutePath()); or

 System.out.println(f2.getAbsoluteFile());输出绝对路径。

5 E.java

 *     如何处理多个异常:
 *         可以使用多个try...catch语句
 *         使用一个try和多个catch
 * 
 * 多个catch之间的顺序:
 *             多个catch之间可以有子父类,如果有子父类,父类异常必须放在后面  ,Exception就是最大的父类,,需要放在最后面的catch
 *             平级之间没有顺序关系:  NullPointerException,ArrayIndexOutOfBoundsException
 *             
 *         

public class E {public static void main(String[] args) {method();System.out.println("---------");metho2();}private static void metho2() {try {String s = null;System.out.println(s.length());int[] arr = new int[5];System.out.println(arr[8]);System.out.println(2 / 0);} catch(NullPointerException e) {System.out.println("出现空指针了");}catch(ArrayIndexOutOfBoundsException e) {System.out.println("出现数组越界了");} catch(Exception e) {System.out.println("出现异常了");}try {} catch(ArrayIndexOutOfBoundsException e) {System.out.println("出现数组越界了");}}private static void method() {try{String s = null;System.out.println(s.length());} catch(NullPointerException e) {System.out.println("出现空指针了");}try {int[] arr = new int[5];System.out.println(arr[8]);} catch(ArrayIndexOutOfBoundsException e) {System.out.println("出现数组越界了");}}}

6 F.java

 * Throwable的常用方法:
        String getMessage()        原因
        String toString()               类型和原因
        void printStackTrace()     类型原因和位置

public class F {public static void main(String[] args) {//		method();System.out.println("----------");}private static void method() {try {System.out.println(2 / 0);} catch(ArithmeticException e) {//String getMessage() : 原因System.out.println(e.getMessage());  /// by zero//String toString()  类型和原因System.out.println(e.toString());  //java.lang.ArithmeticException: / by zero//void printStackTrace():类型原因和位置e.printStackTrace();/*报错如下:java.lang.ArithmeticException: / by zerohello----------at day37.F.method(F.java:30)at day37.F.main(F.java:13)*/}System.out.println("hello");//注意是在try那边如果有报错才会停止下面的代码,不是catch}}

7 G.java

 *  finally:组合try...catch使用,用于释放资源等收尾工作,无论try...catch语句如何执行,finally的代码一定会执行
 *  
 *  try {
 *      有可能出现问题的代码;
 *  
 *  } catch(异常对象) {
 *      处理异常;
 *  } finally {
 *      释放资源;
 *      清理垃圾;

public class G {public static void main(String[] args) throws IOException {
//		method();
//		System.out.println("--------------");FileWriter fw = null;try {fw = new FileWriter("src/day37/a.txt");fw.write("hello");fw.write("world");fw.flush();System.out.println(2 / 0);//  ,Exception in thread "main" java.lang.ArithmeticException: / by zero
//			下面代码运行不了 所以关闭不了资源,所以在finally里面关闭fw.write("java");fw.flush();fw.close();} catch (IOException e) {e.printStackTrace();} finally {//释放资源fw.write("11aa11");fw.close();
//			fw.write("abc");   会报错 说资源已关闭}}private static void method() {try {System.out.println(2 / 0);} catch(ArithmeticException e) {System.out.println("除数不能为0");} finally {System.out.println("清理垃圾");}}
}


http://www.ppmy.cn/news/86691.html

相关文章

【云原生|Kubernetes】05-Pod的存储卷(Volume)

【云原生Kubernetes】05-Pod的存储卷(Volume) 文章目录 【云原生Kubernetes】05-Pod的存储卷(Volume)简介Volume类型解析emptyDirHostPathgcePersistentDiskNFSiscsiglusterfsceph其他volume 简介 Volume 是Pod 中能够被多个容器访问的共享目录。 Kubern…

MAAS搭建

要求 https://maas.io/docs/installation-requirements 安装maas sudo snap install --channel=3.3 maas安装postgres sudo apt update -y sudo apt install -y postgresql设置数据库 sudo -i -u postgres psql -c "CREATE USER \"$MAAS_DBUSER\" WITH E…

2021-2023外包生涯的遗憾屈辱过错总结

遗憾 最大的遗憾是: 做的项目并发量、用户量不大。背锅,被人甩锅的时候,没有进行明确的反击。 屈辱 项目:2021-2022 打印日志的时候,如果实体重写了toString(),即使使用Map类型,也不需要使…

DJ5-4 链路层交换机

目录 一、链路层交换机 二、交换机:支持多节点同时传输 三、交换机:转发表或称交换表 四、交互机:自学习 1. 单个交换机自学习/转发的例子 2. 多个交换机自学习/转发的例子 五、交换机:数据帧的过滤/转发 六、交换机的交换…

java矢量切片实现

概述 可通过多种方式实现矢量切片的制作&#xff0c;前面讲到了基于postgis数据库、tippecanoe、Qgis等方式&#xff0c;本文讲述基于spring Boot框架下java的实现。 实现效果 实现代码 后端代码 引入依赖 <dependency><artifactId>giscat-vector-mvt</art…

【Unity】实现无缝地图

无缝地图是沙盒游戏的标配&#xff0c;可以极大提升玩家体验和沉浸感。 无缝地图的实现过程还是比较复杂的&#xff0c;在这里做一下实现笔记 1、地图分块&#xff1a; 将地图划分为较小的块&#xff0c;例如瓦片或区块。每个块可以是一个独立的游戏对象或地形块。确定每个块…

全国第六届研究生数学建模竞赛-110 警车配置及巡逻方案

目录 摘 要: 1 问题重述 2 问题分析 3 模型假设 4 符号定义与说明 4.1 符号表定义

vim的使用、vim入门的三种常用模式、以及vim中常用的命令(超详细)

vim 入门的三种常用模式&#xff1a;分别是 1. 命令模式、2. 插入/编辑模式、3. 底行模式 1. 命令模式 控制屏幕光标的移动&#xff0c;字符、字或行的删除&#xff0c;移动复制某区段及进入Insert mode下&#xff0c;或者到 last line mode 如下&#xff0c;这个就是命令模式…