本系列为笔者学习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()方法结束运行===");
}
//认识运行异常 exception
public 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();
}
}