目录
一、异常概述、体系
什么是异常:异常是程序在"编译"或者“执行”的过程中可能出现的问题,注意:语法错误不算在异常体系中。
为什么学习异常:1.异常一旦出现了,如果没有提前处理,程序就会退出JVM虚拟机而终止;2.研究异常并且避免异常,然后提前处理异常,体现的是程序的安全,健壮性
二、常见运行时异常
package com.pikaqiu.exception;
public class Test {
public static void main(String[] args) {
//1.数组索引越界异常:ArrayIndexOutOfBoundsException
int[] arr = {1,2,3};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//System.out.println(arr[3]); //运行出错
//2.空指针异常:NullPointerException
String name = null;
System.out.println(name); //null
//System.out.println(name.length());
//3.类型转换异常:ClassCastException
Object o = 23;
//String s = (String) o;
//4.数学操作异常:ArithmeticException
//int c = 10/0;
//5.数字转换异常:NumberFormatException
String number = "23abc";
//Integer it = Integer.valueOf(number);
//System.out.println(it + 1);
}
}
三、常见编译时异常
package com.pikaqiu.exception;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test2 {
public static void main(String[] args) throws ParseException {
String date = "2022-10-8 21:49:33";
//创建一个简单日期格式化类:解析字符串时间为日期对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
}
}
四、异常的默认处理流程
五、编译时异常的处理机制
package com.pikaqiu.exception;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test3 {
public static void main(String[] args) throws Exception{
System.out.println("程序开始");
parseTime("2022-11-11 11:11:11");
System.out.println("程序结束");
}
public static void parseTime(String date) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
}
}
package com.pikaqiu.exception;
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 Test3 {
public static void main(String[] args) throws Exception{
System.out.println("程序开始");
parseTime("2022-11-11 11:11:11");
System.out.println("程序结束");
}
public static void parseTime(String date){
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
InputStream is = new FileInputStream("E:/meinv.jpg");
} catch (Exception e){
e.printStackTrace(); //打印异常信息
}
}
// public static void parseTime(String date){
// try {
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");
// Date d = sdf.parse(date);
// System.out.println(d);
//
// InputStream is = new FileInputStream("E:/meinv.jpg");
// } catch (ParseException e) {
// //解析出现问题
// e.printStackTrace();
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
// }
}
package com.pikaqiu.exception;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test3 {
public static void main(String[] args){
System.out.println("程序开始");
try {
parseTime("2022-11-11 11:11:11");
System.out.println("功能操作成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("功能操作失败");
}
System.out.println("程序结束");
}
public static void parseTime(String date) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
InputStream is = new FileInputStream("E:/meinv.jpg");
}
}
六、运行时异常的处理机制
package com.pikaqiu.exception;
public class Test4 {
public static void main(String[] args) {
System.out.println("程序开始");
try {
chu(10,0);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("程序结束");
}
public static void chu(int a, int b){
System.out.println(a);
System.out.println(b);
int c = a / b;
System.out.println(c);
}
}
七、异常处理使代码更稳健的案例
需求:键盘录入一个合法的价格(必须是数值且大于0)
package com.pikaqiu.exception;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true){
try {
System.out.println("请您输入合法的价格:");
String priceStr = sc.nextLine();
//转换成double
double price = Double.valueOf(priceStr);
//判断价格是否大于0
if(price > 0){
System.out.println("定价:" + price);
break;
}else {
System.out.println("价格必须是正数");
}
} catch (NumberFormatException e) {
System.out.println("请您输入合法数值,建议为正数~~~");
}
}
}
}
八、自定义异常
package com.pikaqiu.exception;
/**
* 自定义的编译时异常
* 1.继承Exception
* 2.重写构造器
*/
public class AgeIlleagal extends Exception{
public AgeIlleagal() {
}
public AgeIlleagal(String message) {
super(message);
}
}
package com.pikaqiu.exception;
public class ExceptionDemo {
public static void main(String[] args) {
try {
check(-34);
} catch (AgeIlleagal ageIlleagal) {
ageIlleagal.printStackTrace();
}
}
public static void check(int age) throws AgeIlleagal {
if(age < 0 || age > 200){
//抛出一个异常对象给调用者
//throw : 在方法内部创建对象,并从此抛出
//throws : 用在方法申明上面,抛出方法内部的异常
throw new AgeIlleagal(age + "is illeagal!");
}else{
System.out.println("年龄合法~~~");
}
}
}