11、异常 Exception
异常 Exception
什么是异常?
异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
(3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。
所有的异常都有一个父类,那就是Exception,Exception是所有异常的父类。
五个关键字
try: 可能产生异常的代码
catch: 捕获异常,和处理异常
finally: 无论有没有异常,都会执行,一般把关闭资源放在这,遇到System.exit(0);会直接退出虚拟机,不会执行。。。finallly里面的代码。遇到return 会先执行finally里面的代码,在执行return返回结果
throws:声明的异常给调用者去处理,自己不处理
throw:制造异常,当Exception exp = new Exception();,exp只是一个引用,当throw exp 后就变成异常了
public class Test{ main{ try{//可能产生异常的代码 int n = 10/0; }catch(ArithMatchMath e ){//匹配异常信息 e.printStrack(); }finally{//都会执行这里 sout("关闭资源"); } } public static void test() throws Exception{ Exception exp = new Exception(); throw exp;//产生异常 } }
异 常 类 型 | 说 明 |
---|---|
Exception | 异常层次结构的父类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
多个catch
try{ sout(); }catch(异常类型1){ //解决方式1 }catch(异常类型2){ //解决方式2 }catch(Exception e){//无法预知的异常,防止程序崩溃 //解决方式e }
自定义异常
需要继承Exception 类,可以重写getMessage()来些自己的异常信息
package demo; public class UserException extends Exception{ public UserException() { super(); // TODO Auto-generated constructor stub } public UserException(String message) { super(message); // TODO Auto-generated constructor stub } @Override public String getMessage() { return super.getMessage(); } } /*******************************/ package demo; public class User { private String name; private int age; private String sex; public User(String name, int age, String sex) { super(); this.name = name; this.age = age; this.sex = sex; } public User() { super(); // TODO Auto-generated constructor stub } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) throws UserException { if(age>0&&age<=100) { this.age = age; }else { UserException ue = new UserException("年龄要在1~100之间"); throw ue; } } public String getSex() { return sex; } public void setSex(String sex) throws UserException { if("男".equals(sex)||"女".equals(sex)) { this.sex = sex; }else { UserException ue = new UserException("性别必须是男或者女"); throw ue; } } } /*******************************/ package demo; public class Test { public static void main(String[] args) { User user = new User(); try { user.setAge(100); user.setSex("aa"); } catch (UserException e) { // TODO Auto-generated catch block //e.printStackTrace(); System.out.println(e.getMessage()); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!