1.代码引入443
操作下面的代码,看看有什么问题->异常和异常处理机制
这个题目是运行时的异常
1.2解决上述问题1.2.解决方案-异常捕获443捕获异常,确保程序能够继续运行->选中->ctrl快捷键+alt+t->选中try-catch
com中的代码.stulzl.exception_.Exception01包
package com.stulzl.exception_;//引入异常问题 443publiclic运行异常 class Exception010 { public static void main(String[] args) { int num1 = 10; int num2 = 0; //解读 //1. num1 / num2 => 10 / 0 //2. 当执行到 num1 / num2 因为 num2 = 0, 程序会出现异常(抛出) ArithmeticException //3. 抛出异常后,程序退出并崩溃 , 下面的代码不执行 //4. 想想这样的程序,好吗? 不好,不应该有不致命的问题,会导致整个系统崩溃 //5. java 设计师提供了一个名字 解决这个问题的异常处理机制 //如果程序员认为代码可能出现异常/问题,可以使用 try-catch 解决异常处理机制 ///从而保证程序的健壮性 ///将代码块->选中->快捷键 ctrl + alt + t -> 选中 try-catch //6. 若进行异常处理,即使出现异常,程序可以继续执行 try { int res = num1 / num2; } catch (Exception e) { //e.printStackTrace(); System.out.println(“异常原因=”+e.getMessage());//输出异常的原因 } System.out.println(”程序继续运行..."); }}
2.异常介绍444
●基本概念
在Java语言中,程序执行中的异常被称为“异常”。(语法错误和逻辑错误在开发过程中不是异常)
●执行过程中发生的异常事件可分为两类
1)Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。例如:StackOverflowError[栈溢出]和OOM(outofmemory),Error是一个严重的错误,程序会崩溃。
2)Exception:针对性代码可用于处理编程错误或意外外外部因素引起的其他一般问题。例如,空指针访问、试图读取不存在的文件、网络连接中断等,Exception分为两类:运行时异常[程序运行过程中的异常]和编译时异常[编程时,编译器检测到异常]。
3.异常系统图445 3.1异常系统图总结4451.异常分为两类:运行异常和编译异常.
2.操作异常,编译器无法检查。-一般是指编程过程中的逻辑错误,是程序员应避免的异常。java.lang.RuntimeException及其子类运行异常
3.不能处理运行中的异常,因为这种异常很常见。如果完全处理,可能会影响程序的可读性和运行效率
4.编译过程中的异常是编译器必须处理的异常。
com中的代码.stulzl.exception_02包Exception02
package com.stulzl.exception_02;import java.io.FileInputStream;import java.io.IOException;//编译异常 445public class Exception02 { public static void main(String[] args) { try { FileInputStream fis; fis = new FileInputStream("d:\\aa.jpg"); int len; while ((len = fis.read()) != -1) { System.out.println(len); } fis.close(); } catch (IOException e) { e.printStackTrace(); } }}
4.常见运行时异常
4.1常见运行异常包括
1.Nullpointerexception空指针异常
2)Aritheticexception数学运算异常
3.ArrrayIndexoutofboundexception数组下标越界异常
4)Clascascastexception类型转换异常
5)Numberformatexception数字格式不正确[]
4.1Nullpointerexception空指针异常4466Nulpointerexception空指针异常
当应用程序试图在需要对象的地方使用null时,抛出异常,查看案例演示。
com中的代码.stulzl.nullpointer_exception.Nullpointer包Exception
package com.stulzl.nullpointer_exception;///空指针异常 446public class NullPointer_Exception { public static void main(String[] args) { String name = null; System.out.println(name.length());//报空指针异常 }}
4.2Arithetiception数学运算异常4466
当出现异常操作条件时,抛出异常。例如,当一个整数“除以零”时,抛出这样的例子,并进行案例演示
com中的代码.stulzl.arithmetic_exception.包中Arithmetic_Exception
package com.stulzl.arithmetic_exception;///数字运算异常 446public class Arithmetic_Exception { public static void main(String[] args) { int num1 = 10; int num2 = 0; int res = num1 / num2;///分母为0,报告数学运算异常 System.out.println(”程序继续运行..."); }}
4.3ArrayIndexoutofboundexception数组下标越界异常
非法索引访问数组时抛出的异常。如果索引为负或大于等于数组的大小,则索引为非法索引
com中的代码.stulzl.array_index_out_of_bounds_exception.ArrayIndexoutofbounds包Exception
package com.stulzl.array_index_out_of_bounds_exception;////数组下标越界异常 446public class ArrayIndexOutOfBounds_Exception { public static void main(String[] args) { int arr[] = {1,2,4}; for (int i = 0; i <=arr.length; i++) {//报数组下标越界异常 System.out.println(arr[i]); } }}
4.4clascascastexception类型转换异常
当试图将对象强制转换为非实例子类时,抛出异常。例如,下面的代码将生成Clascascastexception
com中的代码.stulzl.classcast__exception.Clascascast_Exception
package com.stulzl.classcast__exception;// ClassCastException 类型转换异常 446public class ClassCast_Exception { public static void main(String[] args) { A b = new B(); ///向上转型 B b2 = (B)b;//向下转型,这里是 OK C c2 = (C)b;////这里抛出类型转换异常 ClassCastException,(b是指B对象 )因为B,C没有任何关系 }}class A {}class B extends A {}class C extends A {}
4.5Numberformatexception数字格式不正确
当应用程序试图将字符串转换为数值类型,但字符串不能转换为适当的格式时,抛出异常=>我们可以确保输入符合条件.
com中的代码.stulzl.numberformat__exception.Numberformat_Exception
package com.stulzl.numberformat__exception;//NumberFormatException 异常的数字格式不正确 446public class NumberFormat_Exception { public static void main(String[] args) { String name = "中国"; ///将String转换为intintint int num = Integer.parseInt(name);//抛出异常的数字格式不正确 System.out.println(num); }}
5.编译异常5.1基本介绍447
编译异常是指编译过程中必须处理的异常,否则代码不能编译。
5.2常见的编译异常SQLException///操作数据库时,查询表可能出现异常
IOException///操作文件时发生的异常
FileNotFoundException///当操作不存在的文件时,会出现异常
ClassNotFoundException///加载类,当不存在时,会出现异常
EOFException//操作文件,到文件末尾发生异常
illegalArguementException//参数异常
5.2.例如,FilenotFoundexception//当操作不存在的文件时,com中会发生异常447代码.stulzl.filenotfound_exception.FilenotFound包Exception
package com.stulzl.filenotfound_exception;import java.io.FileInputStream;//FileNotFoundException//编译异常 //操作不存在的文件时,发生异常 447public class FileNotFound_Exception { public static void main(String[] args) { ///文件操作 FileInputStream fis; fis = new FileInputStream("d:\\aa.jpg");///文件无异常 int len; while ((len = fis.read()) != -1) { System.out.println(len); } fis.close(); }}
6.练习看下面的代码是否正确,为什么?447