Java基础_异常

Java基础_异常

  • 异常体系介绍
  • 编译时异常和运行时异常
  • 异常的作用
  • 异常的处理方式
    • JVM默认的处理方式
    • 自己处理(捕获异常)
      • try...catch
      • 灵魂四问
      • Throwable的成员方法
    • 抛出处理
  • 综合练习
  • 自定义异常
  • 来源
  • Gitee地址

异常体系介绍

在这里插入图片描述

  • 异常是什么?
    • 程序中可能出现的问题
  • 异常体系的最上层父类?异常分为几类
    • 父类:Exception
    • 异常分为两类:编译时异常、运行时异常
  • 编译时异常和运行时异常的区别
    • 编译时异常:没有继承RuntimeException的异常,直接继承于Exception。编译阶段就会错误提示。
    • 运行时异常:RuntimeException本身和子类。编译阶段没有错误提示,运行时出现的。

编译时异常和运行时异常

  • 两者的区别
    • 编译时异常:除了RuntimeException和他的子类,其他都是编译时异常。编译阶段需要进行处理,作用在于提醒程序员。
    • 运行时异常:RuntimeException本身和所有子类,都是运行时异常。编译阶段不报错,是程序运行时出现的。一般是由于参数传递错误带来的问题。

异常的作用

  • 用来查询bug的关键参考信息
  • 作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

异常的处理方式

JVM默认的处理方式

  • JVM默认的处理方式
    • 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
    • 程序停止执行,下面的代码不会再执行了

自己处理(捕获异常)

try…catch

public class ExceptionDemo6 {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};try{System.out.println(arr[10]); // 此处出现了异常,程序会在这里创建一个 ArrayIndexOutOfBoundsException 对象// new ArrayIndexOutOfBoundsException();// 拿着这个对象到catch的小括号中对比,看括号中的遍历是否可以接收这个对象// 如果能接收,表视该异常被捕获,执行catch中的代码// 当catch里面的所有代码执行完毕,继续执行try...catch体系下面的其他代码}catch (ArrayIndexOutOfBoundsException e){System.out.println("索引越界了");}System.out.println("看看我执行了吗");}
}

灵魂四问

  • 如果try中没有遇到问题,怎么执行
    • 会把try里面所有的代码全部执行完毕,不会执行catch里面的代码
  • 如果try中可能会遇到多个问题,怎么执行
    • 会写多个catch与之对应,父类异常需要写在下面
  • 如果try中遇到的问题没有被捕获,怎么执行
    • 相当于try…catch白写了,当前异常会交给虚拟机处理
  • 如果try中遇到问题,那么try下面的其他代码还会执行吗
    • 不会执行了。try中遇到问题,直接跳转到对应的catch,如果没有对应的catch与之匹配,则交给虚拟机处理

Throwable的成员方法

public class ExceptionDemo11 {public static void main(String[] args) {/*** public String getMessage()       返回此可抛出的建端描述* public String toString()         返回此throwable的详细消息字符串* public void printStackTrace()    在底层是利用System.err.println进行输出*                                  把异常的错误信息以红色字体输出在控制台,不会中断程序运行*/int[] arr = {1,2,3,4};try{System.out.println(arr[10]);}catch (ArrayIndexOutOfBoundsException e){System.out.println(e.getMessage()); // Index 10 out of bounds for length 4System.out.println(e.toString()); // java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 4e.printStackTrace();}System.out.println("看看我执行了吗");}
}

抛出处理

public class ExceptionDemo12 {public static void main(String[] args) {int[] arr = null;int num = 0;try {num = getMax(arr);} catch (NullPointerException e) {System.out.println("空指针异常");} catch (ArrayIndexOutOfBoundsException e){System.out.println("索引越界异常");}System.out.println(num);}private static int getMax(int[] arr) /*throws NullPointerException,ArrayIndexOutOfBoundsException*/ {if(arr == null){throw new NullPointerException();}if(arr.length == 0){throw new ArrayIndexOutOfBoundsException();}int ret = arr[0];for(int i=1;i<arr.length;i++){if(arr[i] > ret){ret = arr[i];}}return ret;}
}

综合练习

public class ExceptionDemo13 {public static void main(String[] args) {/*** 学生的名字长度为[3, 10]* 学生的年龄大小为[18, 40];*/Scanner sc = new Scanner(System.in);Student stu = new Student();while (true) {try {System.out.println("请输入学生的名字");String name = sc.nextLine();stu.setName(name);System.out.println("请输入学生的年龄");String ageStr = sc.nextLine();int age = Integer.parseInt(ageStr);stu.setAge(age);break;} catch (NumberFormatException e) {System.out.println("年龄的格式有异常");} catch (RuntimeException e) {System.out.println("名字的长度或者年龄的大小有异常");}}System.out.println(stu.toString());}
}public class Student {private String name;private int age;...public void setName(String name) {if(name.length() < 3 || name.length() > 10){throw new RuntimeException();}this.name = name;}public void setAge(int age) {if(age < 18 || age > 40){throw new RuntimeException();}this.age = age;}@Overridepublic String toString() {return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';}
}

自定义异常

  1. 定义异常类
  2. 写继承关系
  3. 空参构造
  4. 带参构造
public void setAge(int age) {if(age < 18 || age > 40){throw new AgeOutOfBoundsException(age+"有误,大小应在[18, 40]");}this.age = age;
}public class AgeOutOfBoundsException extends RuntimeException{public AgeOutOfBoundsException() {}public AgeOutOfBoundsException(String message) {super(message);}
}

来源

黑马程序员. 阿玮Java零基础

Gitee地址

https://gitee.com/yu-ba-ba-ba/awJava

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

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

相关文章

【Java】String类 -- 重要概念!!!

// 源码 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];/** Cache the hash code for the string */private int hash; // Default to 0 /…

RTOS笔记--信号量+互斥量+事件组

信号量的本质 信号量是一个特殊的队列&#xff0c;但并不涉及数据传输&#xff0c;因此不需要读写位置和发送者列表&#xff0c;但是多了一个最大计数值。 个人理解&#xff1a;信号量类似一个加入了保护机制的全局变量&#xff0c;不会因为中断切换的原因而导致数据出错。 信号…

Steam游戏如何选择适合的服务器

在Steam平台上&#xff0c;玩家可以享受到来自世界各地开发者的游戏作品。然而&#xff0c;要获得最佳的游戏体验&#xff0c;选择合适的服务器至关重要。本文将从网络延迟、服务器位置、游戏类型和个人偏好等多个方面&#xff0c;为玩家提供选择Steam游戏服务器的实用指南。 如…

k8s挂载配置文件(通过ConfigMap方式)

一、ConfigMap简介 K8s中的ConfigMap是一种用于存储配置数据的API对象&#xff0c;属于Kubernetes中的核心对象。它用于将应用程序的配置信息与容器镜像分离&#xff0c;以便在不重新构建镜像的情况下进行配置的修改和更新。ConfigMap可以存储键值对、文本文件或者以特定格式组…

PDF编辑与修正 提高工作效率 Enfocus PitStop Pro 2022 中文

Enfocus PitStop Pro 2022是一款专为Mac用户设计的强大PDF编辑和校对工具。它支持添加、删除、合并、分割PDF页面&#xff0c;以及文本和图像的编辑&#xff0c;如文字替换、字体更改、颜色调整等。内置自动修复功能&#xff0c;能快速检测并修复缺失字体、重叠文本等常见问题。…

type和interface的继承

type的复用: type Point {x: number;y: number; };type Coordinate Point & {z: number; }; 解释: 这段代码是TypeScript中的类型定义&#xff0c;使用了TypeScript的类型别名&#xff08;type&#xff09;和交叉类型&#xff08;&&#xff09;的特性。 定义Point…

Google Earth Engine(GEE)——使用机器学习进行金三角大米分布图

第 1 步:转到https://code.earthengine.google.com/打开代码编辑器 第 2 步:使用以下代码从 Google Earth Engine Asset 导入数据 // 导入影像集合 var composites = ee.ImageCollection("projects/servir-mekong/yearlyComposites"); // 导入训练数据 var data …

【Text2SQL 论文】PET-SQL:用 Cross-Consistency 的 prompt 增强的两阶段 Text2SQL 框架

论文&#xff1a;PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency ⭐⭐⭐ arXiv:2403.09732&#xff0c;商汤 & 北大 Code&#xff1a;GitHub 一、论文速读 论文一开始提出了以往 prompt-based 的 Text2SQL 方法的一些缺点&#xff1…

ug编程怎么录制宏:一步步探索自动化编程的奥秘

ug编程怎么录制宏&#xff1a;一步步探索自动化编程的奥秘 在UG编程的浩瀚领域中&#xff0c;录制宏是一项强大而神秘的功能。它就像一位魔法师&#xff0c;能够将繁琐的重复操作化为简单的指令&#xff0c;释放出惊人的编程效率。然而&#xff0c;对于许多初学者来说&#xf…

使用缓存降低数据库并发读写方案探索

文章目录 前言缓存设计思想缓存划分缓存应用时机 客户端缓存浏览器缓存网关或代理服务器缓存CDNPCDN 服务端缓存本地缓存本地缓存实现Java堆缓存memcached/ecachecaffeineORM框架一级/二级缓存 分布式缓存分布式缓存优缺点分布式缓存实现分布式缓存实施过程可能遇到问题分布式缓…

Linux下svn安装及配置

目录 1、svn安装 2、创建一个仓库目录 3、使用svn自带命令建立仓库 4、编辑svnserve.conf主配置文件 5、编辑passwd文件 6、编辑authz文件 7、启动SVN服务 8、端口开放 9、Linux使用客户端测试 10、在Linux上创建一个文件后提交到SVN 1、svn安装 mount /dev/cdrom /…

Socket编程权威指南(二)完美掌握TCP流式协议及Socket编程的recv()和send()

在上一篇文章中&#xff0c;我们学习了Socket编程的基础知识&#xff0c;包括创建Socket、绑定地址、监听连接、接收连接等操作。然而&#xff0c;真正的套接字编程远不止于此。本文将重点介绍TCP 流式协议&#xff0c;什么是粘包问题&#xff1f;如何解决粘包问题 &#xff1f…

利用R包“Phenotype”对表型值进行检查

首先&#xff0c;你需要确保你已经安装了R和RStudio&#xff08;如果你想用RStudio的话&#xff09;。然后&#xff0c;你可以按照以下步骤进行操作&#xff1a; 加载数据&#xff1a;首先&#xff0c;你需要加载你的表型数据。如果你的数据是以CSV、Excel等格式保存的&#x…

跨网段路由

跨网段路由通常是指在网络中配置路由&#xff0c;以允许不同子网之间的通信。要设置跨网段的永久路由&#xff0c;取决于你是在操作路由器、交换机这样的网络设备&#xff0c;还是在配置个人计算机&#xff08;如Windows或Linux系统&#xff09;。下面是两种常见情况下的简要指…

地面站Mission planner

官方教程; Mission Planner地面站介绍 | Autopilot (gitbook.io) Mission Planner 功能/屏幕 — Mission Planner 文档 (ardupilot.org) 安卓或者windows软件下载地址&#xff1a; 地面站连接及使用 plane (cuav.net) 在完全装机后再进行各干器件的校准&#xff0c;没有组…

【LeetCode 前缀和 + 哈希表】LC_560_和为K的子数组

文章目录 1. 和为K的子数组&#x1f197; 1. 和为K的子数组&#x1f197; 题目链接&#x1f517; &#x1f427;解题思路&#xff1a; 前缀和 哈希表 &#x1f34e; 设i为数组中的任意位置&#xff0c;⽤ sum[i] 表⽰ [0, i] 区间内所有元素的和。 &#x1f34e; 想知道有…

【设计模式深度剖析】【5】【行为型】【迭代器模式】

&#x1f448;️上一篇:策略模式 设计模式-专栏&#x1f448;️ 文章目录 迭代器模式定义英文原话直译如何理解呢&#xff1f; 迭代器模式的角色1. Iterator&#xff08;迭代器&#xff09;2. ConcreteIterator&#xff08;具体迭代器&#xff09;3. Aggregate&#xff08;聚…

SQLServer(二)

SQLServer主要支持的编程语言是Transact-SQL&#xff08;T-SQL&#xff09;。T-SQL是SQL的专有扩展&#xff0c;它支持声明变量、字符串和数据处理、错误和异常处理以及事务控制。T-SQL程序通常会以BEGIN语句开头&#xff0c;以END语句终止&#xff0c;二者之间是你要执行的语句…

用 DataGridView 控件显示数据

使用DataGridView&#xff0c;可以很方便显示数据。 &#xff08;1&#xff09;Visual Studio版本&#xff1a;Visual Studio 2022 &#xff08;2&#xff09;应用程序类型&#xff1a;windows form &#xff08;3&#xff09;编程语言&#xff1a;C# 一、目标框架 .NET Fra…

K-BAT01,K-CU01和利时卡件

K-BAT01,K-CU01和利时卡件。现场控制站下装与在线调试。9二、组态流程&#xff1a;操作站组态控制站组态新建工程控制站用户组态历史站组态下装现场控制站下装历史站下装操作员站10三、组态详解&#xff1a;1、K-BAT01,K-CU01和利时卡件。新建工程&#xff1a;打开工程总控&…