java哪个是异常的根类_Java学习之异常 - 一生懸命吧的个人空间 - OSCHINA - 中文开源技术交流社区...

一、什么异常。

二、如何处理异常

-try-catch-finally

-throw

-throws

-自定义异常

-异常链

三、异常本质上是程序上的错误,错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。

括号没有正常配对;语句结束后少写了分号;关键字编写错误;

①使用空对象的引用调用方法。空指针异常。

f69acce945cf8e50fed701540d19a232.png

②数组越界

365a8f587d6448eee14796036aa21035.png

③除数为0

250499663624ff5a56e60338f41790e9.png

这些都是运行期间错误产生的表现。

c7422e2f98e909e7f0d089b1a887599c.png

四、在程序运行过程中,意外发生的情况,背离我们程序本身意图的表现,都可以理解为异常。通过合理的异常处理,可以更好地提高程序的健壮性。

五、Throwable是java的当中异常的根类,他有两个重要的子类:Error和Exception

Error是程序无法处理的错误,表示运行应用程序中较严重的问题。java虚拟机出现的一些列问题。

虚拟机错误、内存溢出错误、线程死锁错误。它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,及时确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。

Exception是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理。

f84faa2762f2827b65884f763706a9bc.png

六、在java应用程序当中,异常处理机制为:

抛出异常、捕捉异常。

当一个方法当中出现错误引发异常的时候,方法会去创建异常对象并交付给运行时系统进行处理。那这个异常对象就会包含异常类型或者 异常出现时的程序状态。

对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。

ee8d657c7ad75f18b51c31ac5e997393.png

抛出异常和捕捉异常是通过5个关键字来实现的,他们分别是:try、catch、finally、throw、throws

9dc0ee31e25ba91dba06ec0ae4943f7b.png

2d97ffc906fce182bff8eb55c533ed8f.png

try块后可接零个或多个catch块,如果没有catch块,则必须跟一个 finally块。

要不try catch 要不try finally 必须组合使用。

例子:当main方法执行过程的当中产生的报错,

import java.util.Scanner;

public class ErrorTest {

public static void main(String[] args) {

定义两个变量 输出商

//int one = 12;

//int two = 2;

//System.out.println(one/two); //6

//当这两个变量换成键盘输入

Scanner inputScanner = new Scanner(System.in);

System.out.println("===运算开始===");

System.out.println("请输入第一个整数:");

int one = inputScanner.nextInt();

System.out.println("请输入第二个整数:");

int two = inputScanner.nextInt();

System.out.println(one/two);

System.out.println("===运算结束===");

}

}

当被除数输入0时,程序会报如下的异常

82b32b299748bef3d5fd8e4307467bcc.png

当除数输入一个字母,则报以下错误。(输入格式错误的异常)

eb78f5678ff285ff67c98ff61f0902c7.png

虽然很简单地一个相处的因素,经过人的输入之后就有很多情况,所以需要合理进行异常处理才行。

将把可能出错的程序用try包裹起来时,

import java.util.Scanner;

public class ErrorTest {

public static void main(String[] args) {

定义两个变量 输出商

//int one = 12;

//int two = 2;

//System.out.println(one/two); //6

//当这两个变量换成键盘输入

Scanner inputScanner = new Scanner(System.in);

System.out.println("===运算开始===");

try {

System.out.println("请输入第一个整数:");

int one = inputScanner.nextInt();

System.out.println("请输入第二个整数:");

int two = inputScanner.nextInt();

System.out.println(one/two);

} catch (Exception e) {

System.out.println(e);

}

System.out.println("===运算结束===");

}

}

则会打印出

da2b0bb3ea942b2b9b77596abb08a963.png

在catch中可以通过e.printStackTrace()捕获追踪异常

44c1c353f3d603b731891c4819a6e1b8.png

finally包裹是无论怎么样都一定会执行的代码。

import java.util.Scanner;

public class ErrorTest {

public static void main(String[] args) {

定义两个变量 输出商

//int one = 12;

//int two = 2;

//System.out.println(one/two); //6

//当这两个变量换成键盘输入

Scanner inputScanner = new Scanner(System.in);

System.out.println("===运算开始===");

try {

System.out.println("请输入第一个整数:");

int one = inputScanner.nextInt();

System.out.println("请输入第二个整数:");

int two = inputScanner.nextInt();

System.out.println(one/two);

} catch (Exception e) {

System.out.println(e);

e.printStackTrace();

}finally {

System.out.println("===运算结束===");

}

}

}

多重catch:将代码改造成多个catch块,根据不同类型的报错做处理。

import java.util.InputMismatchException;

import java.util.Scanner;

public class ErrorTest {

public static void main(String[] args) {

定义两个变量 输出商

//int one = 12;

//int two = 2;

//System.out.println(one/two); //6

//当这两个变量换成键盘输入

Scanner inputScanner = new Scanner(System.in);

System.out.println("===运算开始===");

try {

System.out.println("请输入第一个整数:");

int one = inputScanner.nextInt();

System.out.println("请输入第二个整数:");

int two = inputScanner.nextInt();

System.out.println(one/two);

} catch (ArithmeticException e) {

System.out.println("除数不允许为0");

e.printStackTrace();

} catch(InputMismatchException e) {

System.out.println("请输入数字");

e.printStackTrace();

}

finally {

System.out.println("===运算结束===");

}

}

}

catch再多的异常一般涵盖不全,所以最后一个 catch中 需要传递Exception类。也是一种安全保障机制,一定要放在最后一个catch

import java.util.InputMismatchException;

import java.util.Scanner;

public class ErrorTest {

public static void main(String[] args) {

定义两个变量 输出商

//int one = 12;

//int two = 2;

//System.out.println(one/two); //6

//当这两个变量换成键盘输入

Scanner inputScanner = new Scanner(System.in);

System.out.println("===运算开始===");

try {

System.out.println("请输入第一个整数:");

int one = inputScanner.nextInt();

System.out.println("请输入第二个整数:");

int two = inputScanner.nextInt();

System.out.println(one/two);

} catch (ArithmeticException e) {

System.out.println("除数不允许为0");

e.printStackTrace();

} catch(InputMismatchException e) {

System.out.println("请输入数字");

e.printStackTrace();

} catch(Exception e) {

System.out.println(e);

e.printStackTrace();

}

finally {

System.out.println("===运算结束===");

}

}

}

七、System.exit(1)//终止程序运行 括号里面是非0就可以

e074927afe21ac5f9a00ce84ffa200a0.png

在finally块不要写return xxx。因为当catch和finally中都有return的时候,不管进了哪个catch,都return的是finally里面的值。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值