Java入门-异常机制

java异常机制

异常概念

在Java中,异常处理(exception handling) : java语言或者程序员开发提供的一种机制,当有不正常的情况发生时,可以发出信号。这种发出信号的过程被称为抛出异常(throwing an exception)。

java异常体系

img

Error

Error类对象由 Java虚拟机(JVM)生成并抛出,大多数错误与代码编写者所执行的操作无关。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。这类异常不是我们开发的重点。

Exception

Exception是指程序本身可以处理的异常。一般是我们在开发过程中没有考虑全面或者一些意外的情况,比如除法中除数不能为零,输入一个非数字的字符串无法转换为数字的异常等。Exception异常又分为运行时异常和可检查异常。

运行时异常(RuntimeException)

RuntimeException是Exception的子类,RuntimeException类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和ArrayIndexOutOfBoundException。

可检查异常(Exception)

可检查异常是指继承Exception类的子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。也就是大家在IDE工具写某些代码提示你需要处理的异常。比如 Thread.sleep(100)等。

异常处理流程

try …catch … finally

try

检查语句块是否有异常

img

catch

根据监测出的异常类型进行捕获。

img

finally

不管是否抛出异常都要执行某一程序的机制。

异常处理的两种形式:

try… catch 形式: 检查异常,捕获异常

try…finally 形式: 检查异常,有无异常一定执行

程序案例:

int x = 3;
int y = 0;try{int p = x / y;
}catch (ArithmeticException e) {e.printStackTrace();
}finally {System.out.println("finally代码块...");
}

程序运行结果:

finally代码块...
java.lang.ArithmeticException: / by zero
at example.E1.main(E1.java:10)

throws

在方法上声明抛出的可检查异常的类型。当我们由于某种原因不想/不能进行异常处理时,我们可以声明本方法有异常,告诉调用者需要处理。

public void run() throws IOException{//方法体}

throw

使用throw抛出异常对象,注意throw是一个动作,一般在方法体里使用,抛出正真的异常对象。

public void deleteById(int id) {if (id < 0) throw new RuntimeException("id不能为负数");}

提示:如果抛出的是可检出异常类型则需要在方法上声明异常的类型。

自定义异常

项目开发中仅仅使用java给定的异常(类型),对于不同的项目来讲远远不够。为了提高项目的异常处理能力,一般需要自定义异常对象。

自定义异常

自定义异常非常简单,只需要继承某个异常类(一般选择继承RuntimeException)。

public class MyException extends RuntimeException{public MyException(String msg){super(msg);}
}

异常相关问题

在使用异常时有几个问题需要注意:

(1) 在继承关系时,子类不得比父类抛出更多,类型更大的异常。

(2) 自定义异常的命名一定要清晰,见名知意。

(3) 异常捕获一般配合日志。

异常使用案例:

使用自定义的异常完成用户权限验证。

需求

用户登录系统时会输入用户名和密码,本实例通过模拟用户在登录时和运行程序中的验证功能:

  • 预设不同用户的用户名、密码和权限。

  • 检查用户的用户名是否正确,正确用户允许进行其它操作。失败登录能够捕获错误原因(根据不同的异常抛出对象决定)。

  • 成功登录用户进行操作时还需要检查用户的权限,如果权限正确,模拟显示用户的操作,否则抛出异常显示用户权限不足。

分析

系统设计中的主要几个问题分析:

  • 使用数组预设多个用户对象,用户对象中记录用户的用户名&密码和权限。

  • 定义多种异常类,可以定义一个异常父类 (UserException), 再分别定义不同的异常类继承UserException, 比如UsernameEmptyExeption(用户名为空异常),UsernameIsNotExistException(用户不存在异常), InvalidUserException(无效的用户),PermissionDenied(权限不足异常)。

  • 通过不同的异常处理流程捕获不同的异常。

实现思路

定义用户(User)类

public class User {private String username;private String password;private String name;private String privilege;
}

定义异常超类

/** User异常类超类* @author Administrator**/public class UserException extends RuntimeException {public UserException(String message) {super(message);		}}

定义异常子类例如InvalidUserException

public class InvalidUserException extends UserException {public InvalidUserException(String message) {super(message);}
}

登录异常捕获类(片段)

try {//检查登录代码} catch (UsernameEmptyExeption e1) {System.out.println(e1.getMessage());} catch (InvalidUserException e2) {System.out.println(e2.getMessage());}::

登录异常捕获类(片段)

try {//检查登录代码} catch (UsernameEmptyExeption e1) {System.out.println(e1.getMessage());} catch (InvalidUserException e2) {System.out.println(e2.getMessage());}::

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

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

相关文章

Android OpenGL ES 离屏幕渲染1——EGL环境的创建,以及基础概念的理解

创建EGL上下文、配置EGL环境、创建EGL DISPLAY 什么是EGL&#xff1a; 由于OpenGL ES并不负责窗口管理以及上下文管理&#xff0c;该职责由各个平台自行完成&#xff1b;在Android平台下OpenGL ES的上下文环境是依赖EGL的API进行搭建的。 对于EGL这个框架&#xff0c;谷歌已经提…

测试环境:使用OpenSSL生成证书并配置Https

文章目录 需求1、安装OpenSSL1.1、安装包下载1.2、安装&#xff08;以window 64位为例&#xff09;1.3、配置环境变量&#xff08;非必须&#xff09; 2、生成证书2.1、新建文件夹2.2、生成根证书2.2.1、生成私钥2.2.2、生成根证书&#xff0c;并且自签名 2.3、服务端证书生成2…

【双一流高校主办,Springer-LNICST出版,EI稳定检索】2024年应用计算智能、信息学与大数据国际会议(ACIIBD 2024,7月26-28)

2024年应用计算智能、信息学与大数据国际学术会议&#xff08;ACIIBD 2024&#xff09;将于2024年7月26-28日在中国广州举办。会议将聚焦于计算智能及其应用、信息、大数据等相关的研究领域&#xff0c; 广泛邀请国内外知名专家学者&#xff0c;共同探讨相关学科领域的最新发展…

rsyslog日志转发

前言 Rsyslog可用于接受来自各种来源(本地和网络)的输入&#xff0c;转换它们&#xff0c;并将结果输出到不同&#xff08;通过模板和filter过滤&#xff09;的目的地&#xff08;目录文件中&#xff09; rsyslog是一个开源工具&#xff0c;被广泛用于Linux系统以通过TCP/UDP…

[spring] Spring MVC - security(上)

[spring] Spring MVC - security&#xff08;上&#xff09; 这部分的内容基本上和 [spring] rest api security 是重合的&#xff0c;主要就是添加 验证&#xff08;authentication&#xff09;和授权&#xff08;authorization&#xff09;这两个功能 即&#xff1a; 用户…

python自动化办公之cryptography加密解密

目录 用到的库 实现效果 代码部分 1、加密2024.txt文件 2、解密2024.txt文件 用到的库 cryptography 实现效果 加密文件和解密文件 代码部分 1、加密2024.txt文件 # 加密 from cryptography.fernet import Fernet # 生成加密密钥 keyFernet.generate_key() cipher_s…

Raw Socket(一)实现TCP三次握手

实验环境&#xff1a; Windows物理机&#xff1a;192.168.1.4 WSL Ubuntu 20.04.6 LTS&#xff1a;172.19.32.196 Windows下的一个http服务器&#xff1a;HFS&#xff0c;大概长这个样子&#xff1a; 客户端就是Ubuntu&#xff0c;服务端就是这个…

收银系统源码-线上商城预售功能

1.功能描述 预售&#xff1a;智慧新零售收银系统&#xff0c;线上商城营销插件之一&#xff0c;商品出售时可设置以支付定金或全款的方式提前预售&#xff0c;门店按订单量备货&#xff0c;降低压货成本&#xff1b; 2.适用场景 易损商品提前下单备货&#xff0c;如水果生鲜…

【算法笔记自学】第 5 章 入门篇(3)——数学问题

5.1简单数学 #include <cstdio> #include <algorithm> using namespace std; bool cmp(int a,int b){return a>b; } void to_array(int n,int num[]){for(int i0;i<4;i){num[i]n%10;n /10;} } int to_number(int num[]){int sum0;for(int i0;i<4;i){sumsu…

AI微电影制作教程:轻松打造高清小人国画面

AI微电影作为一种新兴的视频内容形式&#xff0c;以其独特的视觉效果和制作技术在各大视频平台上取得了显著的流量表现。 2. AI微电影的特点 2.1 高清画质与流畅动作&#xff1a;AI微电影以其高分辨率和流畅的动作给观众带来优质的视觉体验。 2.2 微缩画面效果&#xff1a;独…

使用Docker、Docker-compose部署单机版达梦数据库(DM8)

安装前准备 Linux Centos7安装&#xff1a;https://blog.csdn.net/andyLyysh/article/details/127248551?spm1001.2014.3001.5502 Docker、Docker-compose安装&#xff1a;https://blog.csdn.net/andyLyysh/article/details/126738190?spm1001.2014.3001.5502 下载DM8镜像 …

自动控制:前馈控制

自动控制&#xff1a;前馈控制 前馈控制是一种在控制系统中通过预先计算和调整输入来应对已知扰动或变化的方法。相比于反馈控制&#xff0c;前馈控制能够更快速地响应系统的变化&#xff0c;因为它不依赖于系统输出的反馈信号。前馈控制的应用在工业过程中尤为广泛&#xff0…

element-ui输入框如何实现回显的多选样式?

废话不多说直接上效果&#x1f9d0; 效果图 <template><div><el-form:model"params"ref"queryForm"size"small":inline"true"label-width"68px"><el-form-item label"标签" prop"tag&q…

基于java+springboot+vue实现的仓库管理系统(文末源码+lw+ppt)23-499

第1章 绪论 伴随着信息社会的飞速发展&#xff0c;仓库管理所面临的问题也一个接一个的出现&#xff0c;所以现在最该解决的问题就是信息的实时查询和访问需求的问题&#xff0c;以及如何利用快捷便利的方式让访问者在广大信息系统中进行查询、分享、储存和管理。这对我们的现…

【第三版 系统集成项目管理工程师】第4章 信息系统架构

持续更新。。。。。。。。。。。。。。。 【第三版】系统集成项目管理工程师 考情分析4.1架构基础4.1.1指导思想&#xff08;非重点&#xff09; P1364.1.2设计原则&#xff08;非重点&#xff09; P1364.1.3建设目标&#xff08;非重点&#xff09; P1374.1.4总体框架 P138练习…

常见的Java运行时异常

常见的Java运行时异常 1、ArithmeticException&#xff08;算术异常&#xff09;2、ClassCastException &#xff08;类转换异常&#xff09;3、IllegalArgumentException &#xff08;非法参数异常&#xff09;4、IndexOutOfBoundsException &#xff08;下标越界异常&#xf…

windows无法访问github

##一、如果发现windows无法访问github时 一般就是我们的dns出现了问题&#xff0c;此时我们需要更换一个dns访问 ##二、解决方法 首先我们访问ip查询地址&#xff0c; https://ipchaxun.com/github.com/ 可更换下面历史ip进行测试&#xff0c;在windows的cmd里面输入ping git…

Python学习笔记31:进阶篇(二十)pygame的使用之图形绘制

前言 基础模块的知识通过这么长时间的学习已经有所了解&#xff0c;更加深入的话需要通过完成各种项目&#xff0c;在这个过程中逐渐学习&#xff0c;成长。 我们的下一步目标是完成python crash course中的外星人入侵项目&#xff0c;这是一个2D游戏项目。在这之前&#xff…

Day2用 rustlings 练习 Rust 语言-Move Semantics

大家好 今天 完成 2024年自动驾驶OS开发训练营-初阶营第四期-导学 Day2用 rustlings 练习 Rust 语言 -Move Semantics https://doc.rust-lang.org/stable/book/ch04-00-understanding-ownership.html 提交代码时候 提示 没有权限怎么出来 aciton 参考开发环境配置 https://rcor…

图片管理新纪元:高效批量横向拼接图片,一键生成灰色艺术效果,打造专业视觉体验!

在数字时代&#xff0c;图片已成为我们生活和工作中不可或缺的一部分。但面对海量的图片&#xff0c;如何高效地进行批量管理、拼接和调色&#xff0c;成为许多人面临的难题。今天&#xff0c;我们为您带来了一款颠覆性的图片管理工具&#xff0c;让您轻松实现图片批量横向拼接…