Java入门:掌握异常体系
发表时间: 2024-05-27 16:15
异常体系
① RuntimeException及其子类,运行时异常,指运编译阶段不报错
② 除RuntimeException之外的所有异常,编译时报错,因此必须处理,否则无法通过编译
① 数组索引越界异常:ArrayIndexOutOfBoundsException
② 空指针异常:NullPointerException
③ 类型转换异常:ClassCastException
④ 数学操作异常:ArithmeticException
⑤ 数字转换异常:NumberFormatException
public class Demo1 { public static void main(String[] args) { // 数组索引越界异常:ArrayIndexOutOfBoundsException int[] arr = {1, 2}; System.out.println(arr[2]); // 空指针异常:NullPointerException String name = null; System.out.println(name.length()); // 类型转换异常:ClassCastException Object obj = 2; String str = (String) obj; // 数学操作异常:ArithmeticException int a = 10 / 0; // 数字转换异常:NumberFormatException String num = "12string"; Integer intNum = Integer.valueOf(num); }}
1)编译时异常处理三种方式
① 出现异常直接抛出给调用者,调用者继续抛出,throw
② 出现异常自己捕获 ,try catch
③ 前两者结合使用,出现异常抛出给调用者,调用者捕获异常
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Demo2 { public static void main(String[] args) throws ParseException { String date = "2025-12-22 12:23:23"; parseTime(date); parseTyTime(date); try { parseTyTTime(date); } catch (Exception e) { e.printStackTrace(); } } /** * throws处理异常 * @param time */ public static void parseTime(String time) throws ParseException { SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d = s.parse(time); System.out.println(d); } /** * try catch处理异常 * @param time */ public static void parseTyTime(String time) { try { SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d = s.parse(time); System.out.println(d); } catch (Exception e) { e.printStackTrace(); System.out.println("时间出现异常"); } } /** * throws try catch处理异常 * @param time */ public static void parseTyTTime(String time) throws Exception { SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d = s.parse(time); System.out.println(d); }}
2)运行时处理机制
① 可以不处理,编译阶段不报错
② 规则建议处理,在最外层捕获处理
public class Demo3 { public static void main(String[] args) { try { division(10, 0); } catch (Exception e) { e.printStackTrace(); } } public static void division(int a, int b) { int c = a/b; System.out.println(c); }}
public class Demo4 { public static void main(String[] args) { try { checkAge(-1); } catch (AgeIllegalException e) { e.printStackTrace(); } checkAgeRun(200); } public static void checkAge(int age) throws AgeIllegalException { if(age <=0 || age > 180) { throw new AgeIllegalException(age+" 年龄数字错误"); } } public static void checkAgeRun(int age) throws AgeIllegalRuntimeException{ if(age <=0 || age > 180) { throw new AgeIllegalRuntimeException(age+" 年龄数字错误"); } }}/** * 自定义编译时异常 * 继承Exception,重写构造器 */class AgeIllegalException extends Exception { public AgeIllegalException() { } public AgeIllegalException(String message) { super(message); }}/** * 自定义运行时异常 * 继承RuntimeException,重写构造器 */class AgeIllegalRuntimeException extends RuntimeException { public AgeIllegalRuntimeException() { } public AgeIllegalRuntimeException(String message) { super(message); }}