优雅的异常处理 -- Java中的异常

java中的异常

代码正常运行不会出问题,但是遇到意外,例如:参数变量不符合要求,一旦发生意外,代码终止运行;代码中的异常处理好了,代码就可以顺利的继续运行

java中常见异常

//当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例
System.out.println(1/0);//java.lang.ArithmeticException

//当应用程序试图在需要对象的地方使用 null 时,抛出该异常
String str = null;
System.out.println(str.length());//java.lang.NullPointerException

//用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
int[] arr = {1,2};
System.out.println(arr[arr.length]);//java.lang.ArrayIndexOutOfBoundsException: 2

//检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是无法预见的
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd HH时mm分ss秒 E");
sdf.parse("fsdfsdf");//ParseException

//类型转换异常
ClassCastException

Exception 类的层次

所有的异常类是从 java.lang.Exception 类继承的子类。
Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。
Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
Error 用来指示运行时环境发生的错误。
例如,JVM 内存溢出。一般地,程序不会从错误中恢复。
异常类有两个主要的子类:IOException 类和 RuntimeException 类。

异常的处理方式

自己处理[捕获异常]
语法:
使用 try 和 catch 关键字可以捕获异常

try{
    //可能产生异常的代码
    }catch(捕获的异常类型 e){//e是形式参数
    //该异常捕获之后要做的操作
    }catch(捕获的异常类型 e){//e是形式参数
    //该异常捕获之后要做的操作
    }finally{
    //异常发生之后一定会执行到的语句块:
    //①流资源关闭②释放锁
    }

执行顺序:
1)顺序执行:进入异常捕获语句块
2)如果产生异常,执行catch捕获,捕获到对应异常,并且对应catch后面的代码块
3)finally语句块一定会执行到:前提前面语句没有执行System.exit(0)退出虚拟机

抛出异常
语法结构:方法后面使用throws 需要抛出的异常类型
示例:

void eat() throws ArithmeticException, CloneNotSupportedException{
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月");
}

抛出异常的注意事项:
①方法抛出运行时异常,在方法头可以不用抛出异常
②方法抛出编译时异常:方法必须处理异常,或者抛出同类异常,或者抛出异常该异常的父类类型异常

主动抛出【产生异常】

//主动产生异常向外抛出
	static void login(String name) throws SelfException{
		for(int i = 0;i<=arr.length-1;i++){
			if(name.equals(arr[i])){
				throw new SelfException("账户已经存在,请重新输入");//自己在方法内部写一个异常,抛出
			}
		}
		System.out.println("恭喜你注册成功");	
}

throws 和 throw的区别
throws 处理异常
在方法头抛出异常
throw 开发代码存在以外的情况,自己主动抛出异常[产生异常]
在方法内部 throw new NullPointException();

自定义异常

使用
自定义类继承异常类
参照其他异常通过Exception设置异常提示信息
实例

public class SelfException extends Exception {
		SelfException(String msg){
			super(msg);
		}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值