java学习之异常二

news2024/9/27 9:29:37

目录

一、异常处理机制

 一、try-catch-finally

 二、throws

二、try-catch 异常处理使用细节

 三、try-catch-finally练习

第一题

第二题

第三题

第四题


一、异常处理机制

共有两种异常处理机制

 一、try-catch-finally

处理机制图示

 二、throws

 关于第二点,如Exception01.java中所示,就算没有用try-catch处理,直接运行,也是会报错的,因为有默认的 throws Exception

package com.hspedu.exception_;

/**
 * @author GQQ
 * @version 1.0
 */
public class Exception01 {
    public static void main(String[] args) throws Exception{
        int num1 = 10;
        int num2 = 0;
       
        int res = num1 / num2;
                
         System.out.println("程序继续运行....");
    }
}

二、try-catch 异常处理使用细节

 

package com.hspedu.exception_;

/**
 * @author GQQ
 * @version 1.0
 */
public class TryCatchDetail {
    public static void main(String[] args) {
        //1. 如果异常发生了, 则异常发生后面的代码不会执行, 直接进入到 catch 块
        //2. 如果异常没有发生, 则顺序执行 try 的代码块, 不会进入到 catch
        //3. 如果希望不管是否发生异常, 都执行某段代码(比如关闭连接, 释放资源等)则使用如下代码- finally
        try {
            String str = "java学习";
            //String str = "123";
            int a = Integer.parseInt(str);
            System.out.println("数字" + a);//发生异常后,就不会再执行此输出语句
        } catch (NumberFormatException e) {
            System.out.println("异常信息=" + e.getMessage());
        }finally{
            System.out.println("代码块被执行...");
        }
        System.out.println("程序继续...");
    }
}

 

package com.hspedu.exception_;

/**
 * @author GQQ
 * @version 1.0
 */
public class TryCatchDetail02 {
    public static void main(String[] args) {
        //1.如果 try 代码块有可能有多个异常
        //2.可以使用多个 catch 分别捕获不同的异常, 相应处理
        //3.要求子类异常写在前面, 父类异常写在后面,如果子类写在后面,会提示 这些异常已经被捕获了
        try {
            Person person = new Person();
            person = null;
            System.out.println(person.getName());//NullPointerException
            int num1 = 10;
            int num2 = 0;
            int res = num1 / num2;//ArithmeticException
            //分别处理两种异常
        } catch (NullPointerException e) {
            System.out.println(e.getMessage());
        } catch (ArithmeticException e) {
            System.out.println(e.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {

        }
        System.out.println(123);

    }
}

class Person {
    private String name = "jack";

    public String getName() {
        return name;
    }
}

package com.hspedu.exception_;

/**
 * @author GQQ
 * @version 1.0
 */
public class TryCatchDetail03 {
    public static void main(String[] args) {
        try{
            int n1 = 10;
            int n2 = 0;
            System.out.println(n1 / n2);
        }finally {
            //没有捕捉异常,其实是用了 throws Exception,还是会执行finally里的语句
            System.out.println("执行了finally...");
        }
        System.out.println("程序继续执行...");//当出现异常的时候此语句不会被执行
    }
}

 三、try-catch-finally练习

第一题

package com.hspedu.exception_;

/**
 * @author GQQ
 * @version 1.0
 */
public class ExceptionExercise01 {
    public static int method() {
        try {
            String[] names = new String[3];
            //names[1]的默认值为null,把null和tom比较会直接报空指针异常
            if (names[1].equals("tom")) {
                System.out.println(names[1]);
            } else {
                names[3] = "hspedu";
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;
        } catch (NullPointerException e) {
            //空指针异常后会直接return 3,然后跳出整个method方法,但是finally里的语句必须被执行
            //所以这里的3不return
            return 3;
        } finally {
            //最后是return 4,也就是说结果是输出4
            return 4;
        }
    }

    public static void main(String[] args) {
        System.out.println(method());//4
    }

}



涉及知识点:

1.String型变量的默认值为null ,当用null进行运算时就会报空指针异常

 2.return表示跳出/结束这个方法,但是finally中的语句必须要执行,此时finally的优先级大于return

第二题

package com.hspedu.exception_;

/**
 * @author GQQ
 * @version 1.0
 */
public class ExceptionExercise02 {
    public static int method() {
        int i = 1;
        try {
            i++;
            String[] names = new String[3];
            if (names[1].equals("tom")) {//names[1]的默认值为null,把null和tom比较会直接报空指针异常
                System.out.println(names[1]);
            } else {
                names[3] = "hspedu";
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;
        } catch (NullPointerException e) {
            //空指针异常后会执行return ++i,然后跳出整个method方法,但是finally里的语句必须被执行
            //所以这里只是完成 i的自增,并不会return
            return ++i;
        } finally {
            //最后是return 4,也就是说结果是输出4
            return ++i;
        }
    }

    public static void main(String[] args) {
        System.out.println(method());//4
    }
}

知识点:在捕捉到空指针异常的

catch (NullPointerException e) {
    //空指针异常后会执行return ++i,然后跳出整个method方法,但是finally里的语句必须被执行
    //所以这里只是完成 i的自增,并不会return
    return ++i;
}

由于finally的存在,此处虽然不会返回,但是++i的运算还是会执行

第三题

package com.hspedu.exception_;

/**
 * @author GQQ
 * @version 1.0
 */
public class ExceptionExercise03 {
    public static int method() {
        int i = 1;
        try {
            i++;
            String[] names = new String[3];
            if (names[1].equals("tom")) {//names[1]的默认值为null,把null和tom比较会直接报空指针异常
                System.out.println(names[1]);
            } else {
                names[3] = "hspedu";
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;
        } catch (NullPointerException e) {
            //空指针异常后会执行return ++i,然后跳出整个method方法,但是finally里的语句必须被执行
            //所以这里只是 return 2, 然后2被临时变量temp保存起来 temp = 2
            //然后完成i++, i = 3
            return i++;
        } finally {
            //++i, i = 4;
            ++i;
            System.out.println("i=" + i);
        }
    }
    public static void main(String[] args) {
        System.out.println(method());//2和4
    }

}

第四题

 

package com.hspedu.exception_;

import java.util.Scanner;

/**
 * @author GQQ
 * @version 1.0
 */
public class ExceptionExercise04 {
    public static void main(String[] args) {
        while(true){
            System.out.print("请输入要判断的数字:");
            Scanner scanner = new Scanner(System.in);
            try {
                String str = scanner.next();
                int num = Integer.parseInt(str);
                System.out.println("输入的整数为:" + num);
                break;//如果上述输出语句能够执行,说明没有捕捉到异常,结束循环
            } catch (NumberFormatException e) {
                System.out.println("你输入的不是整数,请重新输入");
            }

        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/497039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux性能分析工具perf和火焰图使用方法

简介 perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些数据来对程序性能进行分析。 perf可以统计或采样的event有…

JVM学习随笔02——虚拟机内存区组成与内存溢出异常

一、Java虚拟机内存区组成图 1、程序计数器: 每个线程独占一个计数器,用来指示该线程下一条要执行的指令的地址。这一部分不会导致内存异常。PS:如果一个线程进入的是一般的Java方法,计数器指示的是下一条指令地址;如果…

taro小程序中如何引入css_moudle?配置后不生效的解决方法

1.根据文档Taro配置 编译配置存放于项目根目录下的 config 目录中,包含三个文件: index.js 是通用配置dev.js 是项目预览时的配置prod.js 是项目打包时的配置 参考Taro官网,我们要做的是:找到项目根文件夹下的 config 文件&…

【Android车载系列】第12章 车载渲染-SurfaceFlinger单独绘制到界面

1 SurfaceFlinger渲染方案 车载的倒车影像同学们知道是怎么实现的吗?等待Android设备开机再打开倒车影像App?车子挂到R档倒车如果等待这个流程实在太久,是否还有其它办法可以让车子挂R档直接展示倒车影像呢?大家思考一下。 我们从…

opencv_c++学习(四)

图像在opencv中的存储方式 在上图中可以看出,在opencv中采用的是像素值来代表每一个像素三通道颜色的深浅。 Mat对象 Mat对象是在OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分&#xff0…

Graph—随机游走

Random Walk Approaches for Node Embeddings 一、随机游走基本概念 想象一个醉汉在图中随机的行走,其中走过的节点路径就是一个随机游走序列。 随机行走可以采取不同的策略,如行走的方向、每次行走的长度等。 二、图机器学习与NLP的关系 从图与NLP的…

《计算机网络—自顶向下方法》 第二章Wireshark实验:HTTP协议分析

HTTP 协议工作于客户端-服务端架构上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。 WEB 服务器有:Apache服务器,IIS服务器(Internet Information Services)等。URL:即统一资源定位符(…

手写自己的Springboot-1-整合tomcat

文章目录 创建自己的Springboot创建项目注册、启动Spring容器启动tomcat 引用测试 创建自己的Springboot 首先明确本文章想要达到的目的,就是引入我们自己写的Springboot项目的依赖,无需配置,就可以达到处理普通请求的效果. 这里有一个非常简单的Springboot项目,项目里面就只…

将 Segment Anything 扩展到医学图像领域

文章目录 前言技术交流SAM 拆解分析从医学角度理解 SAM 的效用MedSAM实验总结 前言 SAM 是一种在自然图像分割方面取得成功的模型,但在医学图像分割方面表现不佳。MedSAM 首次尝试将 SAM 的成功扩展到医学图像,并成为用于分割各种医学图像的通用工具。为…

22.网络爬虫—APP数据抓取详讲

网络爬虫—APP数据抓取详讲 Fiddler工作原理安装完成Fiddler后的配置前提条件工具配置 手机数据抓取Fiddler手机端配置手机端操作 实战演示后记 前言: 🏘️🏘️个人简介:以山河作礼。 🎖️🎖️:Python领域新…

springboot+mybatis搭建maven多模块工程

最近看了一篇博客,选定springbootmybatis作为框架,在idea中搭建maven的多模块工程,下面也再温习一下,并将搭建过程分享出来,供小伙伴们参考。 1、开发工具及系统环境 Idea 2020.3系统环境为win10mysql5.7springboot2.…

GNN学习/GCN学习/GNN环境配置cuda安装/GCN代码展示

参考: A Gentle Introduction to Graph Neural Networks https://distill.pub/2021/gnn-intro/Understanding Convolutions on Graphs https://distill.pub/2021/understanding-gnns/Graph neural networks: A review of methods and applications https://arxiv.org/pdf/1812…

【Java】认识异常

目录 1.异常概念和分类 2.异常的抛出 3.异常的捕获 3.1异常声明throws 3.2异常捕获try-catch 3.3finally 3.4.异常的处理流程 4.自定义异常类 1.异常概念和分类 public class Test {public static void test() {test();}public static void main(String[] args) {Sy…

详解数据集safety-pilot-model-deployment-data

safety-pilot-model-deployment-data这个数据集是由美国交通部的联邦航空管理局(FAA)和交通运输部(DOT)主导的“安全试点”(Safety Pilot Model Deployment)项目所提供的。该项目旨在研究汽车与飞机之间的通…

Vue电商项目--开发Search模块与mockjs模拟数据

Search模块中商品分类与过度动画 现在完成了在/home路由下实现三级导航组件的显示隐藏 通过this.$route.path!/home在搜索页面显示,通过方法鼠标移入移出从而又控制在search路由下的显示隐藏 过渡动画:前提组件|元素必要又v-if| v-show指令才可以进行…

Linux进程状态及优先级

本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 进程状态及优先级 前言正文进程状态就绪运行状态R阻塞睡眠状态 S休眠状态D挂起 暂停状态T前台与后台进程待追踪暂停状态t 死亡状态 X僵尸状态 Z 孤儿进程进程优先级查…

nginx(七十三)nginx与Location响应头细节探讨

一 nginx与Location响应头细节探讨 ① 重定向和Location回顾 多种重定向跳转方式的差异 nginx之absolute_redirect、server_name_in_redirect、port_in_redirect 共同控制Location响应头 ② STS响应头导致307重定向 "第一次访问 http://www.baidu.com" 观察…

基于Qt、C++的毕业设计课设数学绘图工具(平面图、图表、立体图绘制-附下载链接)

基于Qt、C的毕业设计课设数学绘图工具(平面图、图表、立体图绘制) 介绍 这是我的毕业设计,基于Qt Creator 4.11.1,c语言。 效果图如下 点我下载项目源码(含打包软件) 使用说明 1. 二维函数绘制 开始界面…

python 系列 07 - 基于easyocr的ocr识别

OCR,光学文字识别,对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。本示例通过easyocr库来演示。easyocr是一个比较流行的库,支持超过80种语言。安装的时候注意会附带安装torch库(一个深度学…

将ROS1和ROS2安装到同一个ubuntu系统中,ROS2安装??????????????

1. 本文测试环境: ubuntu:20.04,虚拟机 ROS1:noetic ROS2:foxy 2. 先说结论 ROS1 与 ROS2 共存,需要考虑三个问题: 1) 不同Ubuntu版本,有不同版本的ROS1和ROS2推荐,尽量不要任性地乱装; 2)ROS1和ROS2安装过程中,是否会出现文件“删改”的问题?目前使用下来,并…