11、异常 Exception

异常 Exception

什么是异常?

异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
(3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。

所有的异常都有一个父类,那就是Exception,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());
}
}
}
posted @   站着说话不腰疼  阅读(143)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
点击右上角即可分享
微信分享提示