【Java寒假打卡】Java基础-异常

news2024/12/26 23:52:09

【Java寒假打卡】Java基础-异常

    • 异常概述
    • throws声明异常
    • throw抛出异常
    • try-catch 抛出异常
    • throwable的成员方法

异常概述

在这里插入图片描述
Exception:称之为异常类,他表示程序本身可以处理的问题

  • RuntimeException及其子类:运行时异常。(空指针异常,数组索引越界异常)
  • 除了RuntimeException之外的所有异常:编译期间必须处理的,否则程序不能通过编译(日期格式化异常)

在这里插入图片描述

异常:就是程序出现了不正常的情况。程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止

注意:语法错误不算在异常体系中

JVM的默认处理方案

如果程序出现了问题,我们没有做任何处理,最终JVM会做默认的处理,如果自己写出异常处理的代码,将执行自己写的异常处理语句

  • 将异常的名称,异常的原因以及异常出现的位置等信息输出在控制台
  • 程序停止执行

throws声明异常

格式: throws 异常类名

注意:这个格式是写在方法的定义处,表示声明一个异常。

  • 出现空指针异常
package com.hfut.edu.test3;

public class test7 {
    public static void main(String[] args) {
        method1();
    }

    private static void method1() throws  NullPointerException{
        int[] arr = null;// 爆出空指针异常
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }


}
  • 出现了解析异常
package com.hfut.edu.test3;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class test7 {
    public static void main(String[] args) throws ParseException {
        method1();
        method2();
    }

    private static void method1() throws  NullPointerException{
        int[] arr = null;// 爆出空指针异常
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    // 告诉调用者 可能会出现异常
    // 如果方法中没有出现异常 那么正常执行
    // 如果方法中真的出现了异常 其实也是将这个异常交给了调用者处理
    private static void method2() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Date parse = sdf.parse("2048年10月10日");// 将指定的时间字符串按照指定格式解析成Date对象
    }
}

注意: 声明的异常是一个运行时的异常,那么声明的代码可以省略,如果声明的异常是一个编译时的异常,那么声明异常的代码必须手动写出

package com.hfut.edu.test3;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class test7 {
    public static void main(String[] args) throws ParseException {
        method1();
        method2();
    }
    
    // 运行时异常 声明异常的代码不需要写出
    private static void method1() throws  NullPointerException{
        int[] arr = null;// 爆出空指针异常
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    // 告诉调用者 可能会出现异常
    // 如果方法中没有出现异常 那么正常执行
    // 如果方法中真的出现了异常 其实也是将这个异常交给了调用者处理
    // 编译时异常 声明异常的代码必须手动写出
    private static  void method2() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        Date parse = sdf.parse("2048年10月10日");// 将指定的时间字符串按照指定格式解析成Date对象
    }
}

throw抛出异常

throws:

  • 用在方法声明后面,跟的是异常类名
  • 表示声明异常,调用该方法有可能会出现这样的异常

throw:

  • 用在方法体内部,跟的是异常对象名
  • 表示手动抛出异常对象,由方法体内的语句处理

在这里插入图片描述

package com.hfut.edu.test3;

public class test8 {
    public static void main(String[] args) {
        int[] arr= null;
        printArr(arr);// 接收到异常 将异常丢给JVM虚拟机
    }

    private static void printArr(int[] arr) {

        if(arr == null){
            // 手动 创建异常对象 抛给调用者  让该方法停止
            throw new NullPointerException();// 抛出空指针异常
        }
        else{
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
}


try-catch 抛出异常

在这里插入图片描述

好处:为了能让代码继续运行下去

package com.hfut.edu.test3;

public class test8 {
    public static void main(String[] args) {
        int[] arr= null;
//        printArr(arr);// 接收到异常 将异常丢给JVM虚拟机

        // 使用try-catch 可以让代码继续运行下去
        try{
            printArr(arr);
        }catch(NullPointerException e){
            // 捕获到空指针异常 进行的操作
            System.out.println("参数不能是NULL");
        }

        System.out.println("代码可以正常执行下去");
    }

    private static void printArr(int[] arr) {

        if(arr == null){
            // 手动 创建异常对象 抛给调用者  让该方法停止
            throw new NullPointerException();// 抛出空指针异常
        }
        else{
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
}

package com.hfut.edu.test3;

import java.util.Scanner;

public class test9 {
    public static void main(String[] args) {

        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你的年龄");
            String line = sc.nextLine();// 输入字符串
            // 将字符串转换成整数
            int age = Integer.parseInt(line);// 将整数字符串转换成Integer对象 然后自动拆箱成int整数

            System.out.println(age);
            System.out.println("测试123");
        } catch (NumberFormatException e) {
            // 捕获到异常
//            throw new RuntimeException(e);
            System.out.println("出现了异常 但是代码正常执行下去");
        }

        System.out.println("代码正常执行下去");
    }
}

注意:

  • 如果try中没有遇到异常,指定try中的代码
  • 如果try中遇到问题,执行catch中的代码
  • 如果出现的问题没有被捕获,程序报错,默认交给JVM处理
  • 出现多个异常 写出多个catch进行捕获即可,如果多个异常之间存在子父类关系,那么父类一定要写在下面
package com.hfut.edu.test3;

import java.util.Scanner;

public class test9 {
    public static void main(String[] args) {

        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你的年龄");
            String line = sc.nextLine();// 输入字符串
            // 将字符串转换成整数
            int age = Integer.parseInt(line);// 将整数字符串转换成Integer对象 然后自动拆箱成int整数
            System.out.println(age);
            System.out.println("测试123");
            System.out.println(2 / 0);
        } catch (NumberFormatException e) {
            // 捕获到异常
//            throw new RuntimeException(e);
            System.out.println("出现了异常 但是代码正常执行下去");
        }catch(ArithmeticException e){
            System.out.println("数学运算异常 捕获多个异常");
        }

        System.out.println("代码正常执行下去");
    }
}

throwable的成员方法

  • getMessage():返回此throwable的详细消息字符串
  • toString():返回此可抛出的简短描述
  • printStackTrace():将异常的错误信息输出在控制台
package com.hfut.edu.test3;

public class test10 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,45};

        try {
            System.out.println(arr[11]);
        } catch (ArrayIndexOutOfBoundsException e) {
            // 数组越界异常
            e.getMessage();
            e.toString();
            e.printStackTrace();// 将异常的错误信息输出在控制台中
        }

        System.out.println("xxxxxxxxxxxx");
    }
}

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

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

相关文章

JUC总结系列篇 (二) : 对线程的理解和使用总结

文章内容&#xff1a; 一.为什么需要多线程 二.线程的创建 三.线程的方法sleep(),run(),wait(),yeid(),join(),interrupt()等方法归纳总结 四.线程的状态及其转换 五.线程的交替执行案例 六.多个线程依次执行案例 七.多线程并发带来的线程安全问题 一.为什么需要多线程&#x…

Linux项目自动化构建工具-make/Makefile

一、前言 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件…

前端入门笔记 04 —— Web(html CSS)布局

响应式布局 屏幕尺寸变化&#xff0c;需要响应式网页设计RWD web页面适应不同屏幕宽度因素 液态站点&#xff0c;拉伸充满浏览器窗口 小屏幕挤成一团&#xff0c;大屏幕空白间隙过大固定宽度 像素为单位固定尺寸 小屏幕滚动&#xff0c;大屏幕空白 实现 设置meta标签媒体查…

数据结构入门5-1(数和二叉树)

目录 注 树和二叉树的定义 树的定义 树的基本术语 二叉树的定义 树和二叉树的抽象数据类型定义 二叉树的性质和存储结构 二叉树的性质 二叉树的存储结构 1. 顺序存储结构 2. 链式存储结构 遍历二叉树和线索二叉树 遍历二叉树&#xff08;traversing binary tree&a…

加密与安全

目录 一、编码算法 1.1、ASCII 1.1.1、ASCII简介 1.1.2、ASCII产生原因 1.1.3、表达方式 1.1.4、标准表 1.1.5、大小规则 1.2、Unicode 1.2.1简介 1.2.2编码和实现 1.3、汉字编码 1.3.1、GB2312-80 标准 1.3.2、GBK 编码标准 1.3.3、GB18030编码标准 1.4、URL编…

【Node】中Express框架连接Mysql实现用户注册接口

Node.js中Express框架连接Mysql实现用户注册接口 处理用户注册接口简单分为三步&#xff1a; 1、注册校验 2、完善逻辑 3、拆分模块 拆分模块能够使部分功能能够复用&#xff0c;封装好各个模块使得模块间只能通过有限的接口互相访问&#xff0c;从而降低耦合&#xff0c;拆分模…

LeetCode[1046]最后一块石头的重量

难度&#xff1a;简单 题目&#xff1a; 有一堆石头&#xff0c;每块石头的重量都是正整数。每一回合&#xff0c;从中选出两块最重的 石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a;如果 x …

『年度总结』时光如梭 | 再见 2022 | 你好 2023

⭐创作时间2022年12月31日⭐ ✨结果一直到现在才发&#xff0c;说真的写年度总结还是第一次写比较不熟练&#xff0c;去年有这个活动也有佬叫我参加&#xff0c;不过没参加。今年想着有时间来写下的&#xff0c;结果写到现在才发&#xff0c;这东西说真的挺难写的&#…

机器视觉(九):图像配准

目录&#xff1a; 机器视觉&#xff08;一&#xff09;&#xff1a;概述 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 机器视觉&#xff08;四&#xff09;&#xff1a;空域图像增强 …

python简单爬虫

爬虫真是一件有意思的事儿啊&#xff0c;之前写过爬虫&#xff0c;用的是urllib2、BeautifulSoup实现简单爬虫&#xff0c;scrapy也有实现过。最近想更好的学习爬虫&#xff0c;那么就尽可能的做记录吧。这篇博客就我今天的一个学习过程写写吧。 一 正则表达式 正则表达式是一…

格式化电脑重装系统怎么操作

​电脑一但中毒的电脑必须重装系统&#xff0c;而且需要格式化后重装系统&#xff0c;才能将病毒铲除&#xff0c;那么如何将电脑格式化后重装系统呢&#xff1f;能够实现电脑格式化重装系统的方法是U盘重装和光盘重装&#xff0c;由于部分电脑没有光驱&#xff0c;建议用U盘&a…

Redis常见集群方案

Redis常见集群方案 Redis集群方案目前主流的有三种&#xff0c;分别是Twemproxy、Codis和Redis Cluster。 Redis Cluster Redis Cluster 集群是去中心化通过客户端分片的结构&#xff0c;集群元数据信息分布在每个节点上&#xff0c;主备切换依赖于多个节点协商选主。 Red…

C++11之lambda表达式

文章目录一、引入原因二、lambda 表达式的语法1. lambda 表达式各部分说明2.捕捉列表说明三、lambda 表达式的本质一、引入原因 如果待排序元素为自定义类型&#xff0c;需要用户定义排序时的比较规则。 比如&#xff1a; struct Goods {string _name; // 名字double _pr…

idea调试npm、tomcat远程服务(包括docker部署方式)

前言 idea调试npm、tomcat远程服务&#xff1a;包括docker部署方式及非docker部署方式 博客地址&#xff1a;芒果橙的个人博客 【http://mangocheng.com】 调试npm项目 1. 新增一个npm项目 2. 配置package.json及启动脚本 3. debug模式启动 远程调试docker部署的项目 1. 配置…

XMLTomcatHttp协议

XML&Tomcat&Http协议 学习目标 了解配置文件的作用了解常见的配置文件类型掌握properties文件的编写规范掌握xml文件的编写了解xml文件的约束掌握xml文件的解析掌握Tomcat的安装掌握Tomcat的使用掌握Tomcat在IDEA中的使用了解HTTP协议的发展历程了解HTTP1.0和HTTP1.1…

ConcurrentHashMap源码阅读笔记:initTable()方法

一、非常重要的sizeCtl属性 initTable()方法的作用是初始化哈希表&#xff0c;初始化哈希表就要有确定哈希表容量、创建哈希表并将哈希表的引用赋值、修改哈希表的阈值等步骤。initTable()方法里面采用了不加锁方式来确保在高并发的环境下创建哈希表的全部步骤都只能由一个线程…

Android入门第57天-使用OKHttp多线程制作像迅雷一样的断点续传功能

简介今天我们将继续使用OkHttp组件并制作一个基于多线程的可断点续传的下载器来结束Android OkHttp组件的所有知识内容。在这一课里我们会在上一次课程的基础上增加SQLite的使用以便于我们的App可以暂存下载时的实时进度&#xff0c;每次下载开始都会判断是覆盖式还是续传式下载…

(3)go-micro微服务项目搭建

文章目录一 微服务项目介绍二 go-micro安装1.拉取micro镜像2.生成项目目录三 项目搭建使用DDD模式开发项目&#xff1a;四 最后一 微服务项目介绍 账户功能是每一个系统都绕不开的一部分&#xff0c;所以本次搭建的微服务项目就是账户微服务项目&#xff0c;其中向外暴露的功能…

【C语言航路】第十站:指针进阶(一)

目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.数组名和&数组名 3.数组指针的使用 四、数组参数、指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 总结 一、字符指针 我们知道指针有一种类型叫做字符…

Vue3新特性

文章目录一 新特性之组合API1.1 ref&reactive1.2 methods1.3 props和context1.4 完整代码&效果演示二 Vue3新特性之生命周期函数(在setup中)三 父子级组件间数据传递3.1 Provide&Inject四 Fragment&#xff08;碎片&#xff09;一 新特性之组合API 1.1 ref&re…