异常及其处理方式

异常

1.异常:在程序的执行过过程中,程序出现了一些问题
2.异常的体系结构:
Throwable:Java语言中所有错误或异常的父类
Throwable两个子类:
(1)Error:严重问题,需要借助第三方技术解决
(2)Exception:不是很严重问题,有运行时期异常和编译时期异常
2.1 运行时期异常:RuntimeException
出现原因:代码逻辑不严谨

public class ExceptionDemo {
	public static void main(String[] args) {
			int a = 20;
			int b = 0;
			System.out.println(a/b);
	}
}

会将异常打印在控制台上:
在这里插入图片描述
2.2 编译时期异常:只要不是RuntimeException的子类都属于编译时期异常
出现原因:jvm在检查语法的时候,针对某些特定的方法进行判断,如果不解决,程序执行不了
有些方法本身自带异常,如果不处理,无法运行程序
3.异常的处理方案:
(1)一般开发中常用:捕获异常
标准格式:try…catch…finally
(2)throw/throws:抛出异常
方式一:捕获异常
变形格式:try…catch…
try…catch…catch…
try…finally…

public class ExceptionDemo {
	public static void main(String[] args) {
		try {
			int a = 20;
			int b = 0;
			System.out.println(a/b);
		} catch (ArithmeticException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

在这里插入图片描述

public class ExceptionDemo2 {
	public static void main(String[] args) {
		int result = method1(20);
		System.out.println(result);
	}

	private static int method1(int x) {
		try {
			x = 30;
			int y =0;
			System.out.println(x/y);
		} catch (ArithmeticException e) {
			System.out.println("0不能为除数");
			x = 50; 
			return x;
		}finally {
			x = 60;
		}
		//return y;
		return x;
	}
}

finally中的语句一定会执行,除非是在执行Finally代码之前,Jvm退出了,在try…catch…finally…中,catch中如果有return语句的话,finally中代码还会执行,在执行finally语句之前,方法已经形成回路径,在执行前就已经返回了。在这里插入图片描述
方式二:抛出异常
抛出:throws和throw的区别:
(1)位置不同:
throws:是在方法声明上抛出
throw:是在方法体中抛出
(2)两个关键字后面的类型不一样:
throws:后面跟的是异常类名,而且可以跟多个异常类名,中间用逗号隔开
throw:后面跟异常对象名,不能跟uoge异常对象,只能跟一个
(3) throws:表示产生异常的一种可能性
throw:表示产生异常的一种肯定性
(4) throws:抛出的异常由它的调用者进行处理
throw:方法中的语句进行处理(加入一些逻辑判断)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionDemo {
	public static void main(String[] args) {
		
		method1(20);
		try {
			method2();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private static void method1 (int x) {
		x = 30;
		int y = 0;
		if(y!=0) {
			System.out.println(x/y);
		}else {
			throw new ArithmeticException();
		}
	}
	public static void method2() throws ParseException {
		String s = "2020-8-15";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
		Date date = sdf.parse(s);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值