?分为Error和Exception Error是sun公司来处理的严重的异常
? ? ? ? 比如内存泄露这种系统级别的异常
? ? ? ? 后者的Exception就是我们在开发的时候经常遇到的异常
? ? ? ? Exception可以分为两类,RuntimeException 运行时异常 比如数组越界异常
? ? ? ? 除了RuntimeException之外 都是编译时异常 比如日期解析日常
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main{
public static void main(String[] args) throws ParseException {
//Java.lang.Throwable抛出一个问题
/*分为Error和Exception Error是sun公司来处理的严重的异常
比如内存泄露这种系统级别的异常
后者的Exception就是我们在开发的时候经常遇到的异常
Exception可以分为两类,RuntimeException 运行时异常 比如数组越界异常
除了RuntimeException之外 都是编译时异常 比如日期解析日常
*/
//编译时候异常
String time = "2023年1月1日";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date date = sdf.parse(time);
System.out.println(date);
//在月和日上我输入的字符串各少了一个字符
//所以输入是会产生异常的 异常的结果是什么? 结果是打印2023年的1月1日 因为年是没问题的 只有月和日存在问题
//运行时候异常
int[] arr = {1,2,3,4,5};
System.out.println(arr[10]);//ArrayIndexOutOfBoundException数组越界异常
//Java ->(通过javac命令进行编译)字节码文件
/*
比如ParseException这个异常就是编译时异常
从字节码文件->运行结果(Java命令)是不需要处理的 是代码运行的时候出现的异常
*/
//异常的拓展知识:
/*
编译阶段:Java不会运行代码的 但是只会检查语法是否错误 以及做一些性能的优化
但是遇到了ArrayIndexOutOfBoundException这种运行时异常 编译阶段是不会报错的
PS:
编译型的异常是提醒程序员去检查本地信息 在于提醒
运行时异常没有提醒作用 就是纯粹的报错
*/
/*
异常的作用:要从小往上看
1.查询bug的参考信息
2.作为方法的返回值
我们给一个抛出异常的办法 new RuntimeException(); 在内部抛出异常
*/
}
}
//1.如果try没有问题怎么办
int[] arr = {1,2,3,4,5,6};
try{
System.out.println(arr[0]);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("索引越界了");
}
System.out.println("看看我执行了么");
/*显然try没有问题就会打印完try内的内容 并且执行完下方的代码*/
//2.如果try有多个问题怎么办
int[] arr = {1,2,3,4,5,6};
try{
System.out.println(arr[10]);
System.out.println(2/0);
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("索引越界了");
}
System.out.println("看看我执行了么");
}
/*
这里有两个异常 但是我们只捕获一个异常 代码
比方说我的try里面包含了两个异常
1.第一个是ArrayIndexOutOfBoundsException
2.第二个是一个运算异常
但是我这里只考虑捕获了第一个异常 所以第二个异常被略过了 输出的时候只是不会输出第二个语句而已
*/
/*
如果说你的语句中可能存在多个异常
那么你就要写多个捕获语句 并且注意!!父类一定要写在下面
*/
int[] arr = {1,2,3,4,5,6};
try{
System.out.println(arr[10]);
System.out.println(2/0);
String s= null;
System.out.println(s.equals("abc"));
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("索引越界了");
}catch(ArithmeticException e){
System.out.println("除数不能为0");
}catch(NullPointerException e){
System.out.println("空指针异常");
}catch(Exception e){
System.out.println("这是一个父类的异常");
}
System.out.println("看看我执行了么");
//4.如果try遇到了问题 try下面的其他代码还会执行吗
int[] arr = {1,2,3,4,5,6};
try{
System.out.println(arr[10]);
System.out.println(2/0);
String s= null;
System.out.println(s.equals("abc"));
}catch (ArrayIndexOutOfBoundsException|ArithmeticException e){
System.out.println("这是在JDK7以后出现的新写法 两种异常输出一种结果");
}catch(NullPointerException e){
System.out.println("空指针异常");
}catch(Exception e){
System.out.println("这是一个父类的异常");
}
System.out.println("看看我执行了么");
}