java指针异常处理_Java基础之:异常及异常处理

Java基础之:异常及异常处理

我们将java程序执行过程中出现的不正常现象称为异常,例如:之前遇到的数组下标越界异常,空指针异常等等

执行过程中发生的异常事件分为两类:

Error(错误):Java虚拟机无法解决的严重问题,如:JVM系统内部错误,资源耗尽等严重情况。比如:StackOverFlowError(栈溢出),Error是严重错误,程序会直接崩溃掉。

Exception:其他因为编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问等。Exception分为两大类:运行时异常(在程序运行过程中)、编译时异常(在程序编译过程中)

0fecceb192b850baac59de2c76841b86.png

4c98466c832ec886cf01e390574095ae.png

常见的运行时异常

NullPointerException:空指针异常

public class NullPointerException_ { private static String str; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(str.length()); System.out.println("hello~"); }​}

ArithmeticException:数学运算异常

当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例, 例如:int i = 10 / 0

ArrayIndexOutOfBoundsException:数组下标越界异常

public class ArrayIndexOutOfBoundsException_ {​ public static void main(String[] args) {​ int[] arr = {1,2}; System.out.println(arr[4]);}

ClassCastException:类型转换异常

当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException

public class ClassCastException_ {​ public static void main(String[] args) { Animal a = new Dog(); Cat cat = (Cat)a; }​}​​class Animal { }class Dog extends Animal { }class Cat extends Animal { }

NumberFormatException:数字格式不正确异常

当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常 => 使用异常我们可以确保输入是满足条件数字.

public class NumberFormatException_ { public static void main(String[] args) { String name = "小范~"; int num = Integer.parseInt(name); }}

常见的编译时异常

SQLException //操作数据库时,查询表可能发生异常

IOException //操作文件时,发生的异常

FileNotFoundException //当操作一个不存在的文件时,发生异常

ClassNotFoundException //加载类,而该类不存在时,异常

EOFException // 操作文件,到文件末尾,发生异常

IllegalArguementException //参数异常

异常处理

异常处理就是当异常发生时,对异常处理的方式。

两种方式:

try-catch-finally

程序员在代码中捕获异常,并自行处理

throws

将发生的异常抛出给调用方,最顶级的调用方就是JVM

try-catch异常处理

Java提供try和catch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有任意数量的try...catch块。

基本语法:

try{

//可能出现异常的代码

//将异常生成对应的异常对象,作为参数传递给catch

}catch(异常对象){

//异常处理

}

public class Exception_ {​ public static void main(String[] args) { String a = null; try { System.out.println(a.length()); System.out.println(a); } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } }}

注意事项

如果异常发生了,则异常发生那条语句后面的代码不会执行,直接进入catch块

如果异常没有发生,正常执行try块,不会进入catch块

可以使用多个catch块,捕获不同的异常(进行不同的业务处理),要求父类异常在后面,子类异常在前面。例如: RuntimeException在后面,NullPointerException在前面。如果发生异常只会匹配一个catch。

try-catch-finally异常处理

相较于try-catch而言,多了一个finally块,它的作用是:不管有没有出现异常,都一定会执行finally块中的代码。

当然也可以使用try-finally,但这种方法和不处理异常是一样的,最后会让JVM机来处理异常。而JVM机处理异常的方式,就是直接输出异常信息然后终止程序。所以不建议这样使用。

try-catch-finally案例

public class try_catch_finally{ public static void main(String args[]){ int[] a = {1,2,3}; try{ System.out.println(a[4]); }catch{ System.out.println("数组下标越界异常"); }finally{ System.out.println("finally块执行...."); } }}

程序输出:

数组下标越界异常

finally块执行....

练习题

考虑下面程序输出:

package class_exception;​public class Test {​ @SuppressWarnings("finally") public static int method() { try { String[] names = new String[3]; if (names[1].equals("john")) {// 空指针异常 System.out.println(names[1]); } else { names[3] = "lucy"; } return 1; } catch (ArrayIndexOutOfBoundsException e) { return 2; } catch (NullPointerException e) { return 3; } finally { // 一定要执行 return 4; } }​ public static void main(String[] args) { System.ou.........

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值