【JavaSE】Java基础语法(二十五):异常

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。【JavaSE】Java基础语法(二十五):异常,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


在这里插入图片描述

1. 异常

  • 异常的概述
    异常就是程序出现了不正常的情况

  • 异常的体系结构
    在这里插入图片描述

2. 编译时异常和运行时异常的区别

  • 编译时异常
    • 都是Exception类及其子类
    • 必须显示处理,否则程序就会发生错误,无法通过编译
  • 运行时异常
    • 都是RuntimeException类及其子类
    • 无需显示处理,也可以和编译时异常一样处理
  • 图示
    在这里插入图片描述

3. JVM默认处理异常的方式

  • 如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
    • 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
    • 程序停止执行

4. 查看异常信息

控制台在打印异常信息时,会打印异常类名,异常出现的原因,异常出现的位置
我们调bug时,可以根据提示,找到异常出现的位置,分析原因,修改异常代码

5. throws方式处理异常

  • 定义格式
public void 方法() throws 异常类名 {
}
  • 示例代码
public class ExceptionDemo {
	public static void main(String[] args) throws ParseException{
		System.out.println("开始");
		// method();
		method2();
		System.out.println("结束");
	}
	
	//编译时异常
	public static void method2() throws ParseException {
		String s = "2048-08-09";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date d = sdf.parse(s);
		System.out.println(d);
	}
	
	//运行时异常
	public static void method() throws ArrayIndexOutOfBoundsException {
		int[] arr = {1, 2, 3};
		System.out.println(arr[3]);
	}
}
  • 注意事项
    • 这个throws格式是跟在方法的括号后面的
    • 编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理
    • 运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处理

6. throw抛出异常

  • 格式
    throw new 异常();

  • 注意
    这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了

  • throws和throw的区别
    在这里插入图片描述

  • 示例代码

public class ExceptionDemo8 {
	public static void main(String[] args) {
		//int [] arr = {1,2,3,4,5};
		int [] arr = null;
		printArr(arr);//就会 接收到一个异常.
		//我们还需要自己处理一下异常.
	}
	
	private static void printArr(int[] arr) {
		if(arr == null){
			//调用者知道成功打印了吗?
			//System.out.println("参数不能为null");
			throw new NullPointerException(); //当参数为null的时候
			//手动创建了一个异常对象,抛给了调用,产生了一个异常
		}else{
			for (int i = 0; i < arr.length; i++) {
				System.out.println(arr[i]);
			}
		}
	}
}

7 . try-catch方式处理异常

  • 定义格式
try {
	可能出现异常的代码;
} catch(异常类名 变量名) {
	异常的处理代码;
}
  • 执行流程

    • 程序从 try 里面的代码开始执行
    • 出现异常,就会跳转到对应的 catch 里面去执行
    • 执行完毕之后,程序还可以继续往下执行
  • 示例代码

public class ExceptionDemo01 {
	public static void main(String[] args) {
		System.out.println("开始");
		method();
		System.out.println("结束");
	}
	
	public static void method() {
		try {
			int[] arr = {1, 2, 3};
			System.out.println(arr[3]);
			System.out.println("这里能够访问到吗");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("你访问的数组索引不存在,请回去修改为正确的索引");
		}
	}
}
  • 注意
  1. 如果 try 中没有遇到问题,怎么执行?
    会把try中所有的代码全部执行完毕,不会执行catch里面的代码
  2. 如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?
    那么直接跳转到对应的catch语句中,try下面的代码就不会再执行了
    当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码
  3. 如果出现的问题没有被捕获,那么程序如何运行?
    那么try…catch就相当于没有写.那么也就是自己没有处理.
    默认交给虚拟机处理.
  4. 同时有可能出现多个异常怎么处理?
    出现多个异常,那么就写多个catch就可以了.
    注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下面

8. Throwable成员方法(应用)

  • 常用方法
    在这里插入图片描述
  • 示例代码
略。。。

9. 自定义异常(应用)

  • 自定义异常概述

    当Java中提供的异常不能满足我们的需求时,我们可以自定义异常

  • 实现步骤
    定义异常类
    写继承关系
    提供空参构造
    提供带参构造

  • 代码实现
public class AgeOutOfBoundsException extends RuntimeException {
	public AgeOutOfBoundsException() {
	}
	
	public AgeOutOfBoundsException(String message) {
	
	super(message);
	}
}
  • 使用
public void setAge(int age) {
	if(age >= 18 && age <= 25){
		this.age = age;
	}else{
		//如果Java中提供的异常不能满足我们的需求,我们可以使用自定义的异常
		throw new AgeOutOfBoundsException("年龄超出了范围");
	}
}

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/162200.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!