异常分类和异常的产生过程分析
异常分类
我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?
编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)。
运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)
java.Lang. Throvable:类是Java语言中所有错误或异常的超类。
Exception:编译期异常,进行编译(写代码乃avo程序出现的问题
RuntimeException:运行期异常,jaa程序运行过程中出现的问题
异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行(吃点药,继续革命工作)
Error:错误
错误就相当于程序得了一个无法治煎的毛病(非典,艾滋).必须修改源代码,程序才能继续执行
public static void main(String[] args) { // Exception:编译期异常,进行编译(写代码)java程序出现的问题 /* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" );//用来格式化日期 Date date = null; try { date = sdf.parse("1999-0909" );//把字符串格式的日期,解析为Date格式的日期 }catch (ParseException e) { e.printStackTrace(); } System.out.println(date); */ // RuntimeException:运行期异常,java程序运行过程中出现的问题 /* int[] arr = {1,2,3}; System.out.println(arr[0] ); try { //可能会出现异常的代码 System.out.println(arr[3]); }catch(Exception e){ //异常的处理逻辑 System.out.println(e); } */ // Error:错误 // outoiemoryErron: Java heap space // 内存溢出的错误,创建的数组太大了,超出了给VIr分配的内存*/ // int[] arr = new int[1024*1024*1024]; // 必须修改代码,创建的数组小一点 int[]arr = new int[ 1024*1024]; System.out.println("后续代码"); }
可查异常
public static void main(String[] args) { File f=new File("d:/l.txt"); System.out.println("试图打开文件"); try { new FileInputStream(f); System.out.println("成功打开"); } catch (FileNotFoundException e) { System.out.println("文件不存在"); e.printStackTrace(); } }
运行时异常
public static void main(String[] args) { //任何除数不能为0:ArithmeticException int result=5/0; //下标越界异常:ArrayIndexOutOfBoundsException int j[]=new int[5]; j[10]=10; //空指针异常:NullPointerException String str=null; str.length(); }
错误Error
public static void main(String[] args) { StringBuffer sb =new StringBuffer(); for (int i = 0; i < Integer.MAX_VALUE; i++) { sb.append('a'); } }
异常的产生过程分析
先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException。我们通过图解来解析下异常产生的过程。
public static void main(String[] args) { //创建int类型的数组,并赋值 int[ ] arr = {1,2,3}; int e = getElement( arr, 3); System.out.println(e); } //定义一个方法,获取数组指定索引处的元素参数: public static int getElement(int[] arr,int index){ int ele = arr[index ]; return ele; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本