六、异常处理

一、异常的分类

Exception:可以自己处理解决的问题

RuntimeException:运行时异常

Error:不应该试图捕捉的严重问题(字节码文件无法解析,java虚拟机资源耗尽,配置文件格式不规范)   (解决方法:重新编写程序、重新分配系统资源)

二、捕捉异常

1、try catch语句捕捉异常:

try{
//被捕获的代码
}
catch(异常类型e){
//对异常的处理
}

2、多重try—catch代码块

package 异常;

public class buzhuoyichang {

	public static void main(String[] args) {
		try {
			int a=1/0;
		}catch(ArithmeticException e) {
			System.out.println("算数发生了异常,请管理员及时处理");
		}
		catch(NullPointerException e) {
			System.out.println("发生了空指针异常,请管理员及时处理");
		}
		catch(ClassCastException e) {
			System.out.println("发生了类转换异常,请管理员及时处理");
		}
		try {
			Object obj=null;
			obj.hashCode();
		}catch(ArithmeticException e) {
			System.out.println("算数发生了异常,请管理员及时处理");
		}
		catch(NullPointerException e) {
			System.out.println("发生了空指针异常,请管理员及时处理");
		}
		catch(ClassCastException e) {
			System.out.println("发生了类转换异常,请管理员及时处理");
		}
		// TODO 自动生成的方法存根

	}

}

3、异常中断机制

出现异常之后,异常之后的代码将会自动屏蔽掉;

package 异常;

public class yichangzhongduanjizhi {

	public static void main(String[] args) {
		try {
			for(int i=0;i<5;i++) {
				System.out.println("输出第"+i+"行");
				int a=1/i;
			}}catch(Exception e) {
				e.printStackTrace();
			}//for循环在里面
		
	for(int i=0;i<5;i++) {
	try {
			System.out.println("输出第"+i+"行");
			int a=1/i;
		}catch(Exception e) {
			e.printStackTrace();
		}//for循环在外面
	}//Shift+Alt+z:自动添加异常
	
	try {
		for(int i=0;i<5;i++) {
			int a=1/i;
			System.out.println("输出第"+i+"行");
			
		}}catch(Exception e) {
			e.printStackTrace();
		}//Shift+Alt+z:自动添加异常//将int a=1/i提前
	}
		// TODO 自动生成的方法存根
}

 4、恢复机制(finally代码块)

语法:(相当于加上了一层保险)

try{
//被捕获的代码
}
catch(异常类型e){
//对异常的处理
}finally{
//最后一定会执行的代码
}

四种特殊情况finally代码块不会运行:

  1. finally块中发生异常;
  2. 在前面的代买中使用了System.exit();//强行停止;
  3. 程序所在线程死亡;
  4. cpu关闭

三、java常见异常

ClassNotFoundException  //  未找到相应类异常

ClassCastException  //  类型转换异常

ArithmeticException  //  算术异常

ArrayIndexOutOfBoundsException  //  数组下标越界异常

SQLException  //  操作数据库异常类

IOException  //  输入输出异常

FileNotFoundException  //  文件未找到异常

IllegalAccessException  //  不允许访问某类异常

NullPointerException  //  空指针异常

四、自定义异常

1.创建自定义异常

(创建一个API中没有的异常) 

语法:class  自定义异常类  extends 已有的异常类{ }

2、使用throws关键字抛出异常

语法:public void method()throws异常类型1,异常类型2,异常类型3 {  }

被调用时:

try{
method()
}
catch(异常类型e){
e.printStackTrace();
}

3、使用throw关键字抛出异常

(手动制造一个异常)

语法:throw new 异常类型();

五、异常使用原则 

  • 不要忽略捕捉到的异常
  • 不要过度使用异常
  • 不要使用过于庞大的try-catch
  • 子类抛出的异常不能比父类更高级
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小郭同学忒骚了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值