Javase 基础加强 —— 01 异常
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。
01 课程安排
-
day01 - 异常、泛型、集合框架
-
day02 - 集合框架、Stream流
-
day03 - File、字符集、IO流框架
-
day04 - 多线程
-
day05 - 网络编程
-
day06 - Java高级技术
02 授课方式
Javase
基础加强是一个空工程Empty Project
,每天的内容是一个独立的模块Module
。
03 什么是异常?
异常代表程序出现的问题。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ExceptionDemo1 {public static void main(String[] args) throws ParseException, FileNotFoundException {show();show2();}//认识编译异常public static void show2() throws ParseException, FileNotFoundException { //抛弃parse,file异常System.out.println("===show2()方法开始运行===");String str = "2025-04-09 16:28:30";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse(str); //一个提醒,担心你的格式写错了System.out.println(date);InputStream is = new FileInputStream("D:/dog.png"); //一个提醒,担心你没有D盘或者没有小狗图片System.out.println("===show2()方法结束运行===");}//认识运行异常 exceptionpublic static void show(){System.out.println("===show()方法开始运行===");//1.数组索引越界异常int[] arr = {1, 2, 3};System.out.println(arr[3]);//2.数字操作异常System.out.println(10 / 0);//3.空指针异常String str = null;System.out.println(str);System.out.println(str.length());System.out.println("===show()方法结束运行===");}
}
04 异常的基本处理
05 异常的作用
- 异常是用来定位程序
bug
相关的关键信息 - 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者方法的执行问题
public class ExceptionDemo2 {public static void main(String[] args) {try{System.out.println(div(10, 0));System.out.println("底层代码执行成功");}catch (Exception e){e.printStackTrace(); //打印异常System.out.println("底层代码执行失败");}}public static int div(int a, int b) throws Exception { //抛if(b == 0){System.out.println("请重新输入正确被除数!");throw new Exception("请重新输入正确被除数!"); //返回Exception类型}int result = a / b;return result;}
}
06 自定义异常
由于Java
无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。
① 自定义编译时异常
HeimaUnlegalException.java
package exception;
/*** 1.继承Exception* 2.重写Exception构造器*/public class HeimaUnlegalException extends Exception{//无参构造器public HeimaUnlegalException(){}//有参构造器public HeimaUnlegalException(String str){super(str);}
}
ExceptionDemo3.java
package exception;public class ExceptionDemo3 {public static void main(String[] args) {try{saveAge(300);}catch(HeimaUnlegalException e){ //3.捕获e.printStackTrace(); //4.打印}}public static void saveAge(int age) throws HeimaUnlegalException { //2.抛弃if(age < 1 || age > 200){//1.返回HeimaUnlegalException类型对象throw new HeimaUnlegalException("年龄不合法");}else{System.out.println("年龄合法");System.out.println("保存年龄" + age);}}
}
② 自定义运行时异常
将继承对象从Exception
改为RuntimeException
即可。
07 异常的处理方案
方案一:底层异常层层往上抛出,最外层捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示。
方案二:最外层捕获异常后,尝试重新修复。
package exception;import java.util.Scanner;public class ExceptionDemo4 {public static void main(String[] args) {while(true){try {double price = savePrice();System.out.println("保存定价" + price);break; //直到用户输入正确的定价,程序退出} catch (Exception e) {System.out.println("请输入正确的价格!!!");}}}public static double savePrice(){System.out.println("请输入商品定价:");Scanner sc = new Scanner(System.in);return sc.nextDouble();}
}