java异常和throw和throws的区别

ぃ、小莉子 提交于 2020-01-30 15:54:55

之前在编程中编译完成后,运行时,会遇见一些常见的错误,如NullPointerException,ArrayIndexOutOfBoundsException等等

在今天重新回顾学习了java异常,总结了一些异常的学习,和大家一起分享一下!!!

 

 

java中异常处理是通过:try、catch、finally、throw和throws这5个关键词来实现的

 

简单介绍一下:try、catch、finally 3个关键词,java处理异常中,把可能出现的异常代码放入到try块中,由catch来进行捕获异常,而将必须输出的信息,放到的final语句中,因为是否发生异常final中的语句都会输出,除非在catch中使用System.exit(1)。 注:执行System.exit(1),将推出jvm虚拟机

 

好的,介绍了一下try、catch、finally 3个关键词,接下来说一下throw和throws!!

 

声明异常——throws

java中通过关键词throws声明某个方法可能抛出的各种异常类,可以同时声明多个异常类,但需用逗号隔开。

有两种方式进行处理throws:

1.使用try-catch捕获异常

2.使用throws继续声明,如果调用者不打算处理此异常,可以继续通过throws声明异常,让上一级调用者处理异常。main()方法声明的异常将由Java虚拟机来处理

下面通过两个小Demo给大家看一下:

处理方式throws1:

import java.util.Scanner;public class DemoOneTest {    /**     * 通过try—catch捕获并处理异常     * @param args     */    public static void main(String[] args){        try {            divide();        } catch (Exception e) {            System.err.println("error:被除数和除数不能为零!!!");;            e.printStackTrace();        }    }    /**     * throws进行异常的声名     * @throws Exception     */    public static void divide() throws Exception{        Scanner input = new Scanner(System.in);        System.out.print("请输入被除数:");        int num1 = input.nextInt();        System.out.println("请输入除数:");        int num2 = input.nextInt();        System.out.println(num1/num2);    }}输出结果:错误

 


 

 输出结果:正确

 

 

 

处理方式throws2:
import java.util.Scanner;public class DemoOneTest {    /**     * 通过throws继续声明异常     * @param args     * @throws Exception     */    public static void main(String[] args) throws Exception {        divide();    }    /**     * throws进行异常的声名     * @throws Exception     */    public static void divide() throws Exception{        Scanner input = new Scanner(System.in);        System.out.print("请输入被除数:");        int num1 = input.nextInt();        System.out.println("请输入除数:");        int num2 = input.nextInt();        System.out.println(num1/num2);    }}输出结果:正确

 

输出结果:错误

 

 

 

 


抛出异常——throw

java中也可以使用throw关键词,来进行自行抛出异常,来处理系统无法自动发现并解决的问题,将它由调用者来进行决解

 

Demo

 

Me.class

/** * 使用throw在方法内抛出异常 */public class Me {    private int age = 0;    /**     * 设置年龄     * @param age     */    public void setAge(int age) throws Exception {        if (age >= 0 && age <= 100) {           this.age = age;        }else{            throw new Exception("年龄必须在1到100之间");        }    }    public int getAge(){        this.age = age;        return age;    }    /**     * 信息     */    public void print(){        System.out.println("年龄为:"+this.age);    }}DemoTwoTest.class
/** * 捕获throw抛出的异常 */public class DemoTwoTest {    public static void main(String[] args) {        Me me = new Me();        try {            me.setAge(99);        } catch (Exception e) {            e.printStackTrace();        }        me.print();    }}输出结果:正确
me.setAge(99);

输入结果:错误
me.setAge(101);

 

 

 

以上是throw和throws的使用和示例代码,接下来说一下throw和throws的区别:

1.作用不同:throw用于在程序中抛出异常

                     throws用于声明在该方法内抛出了异常

2.使用位置不同:throw位于方法体内部,用于单独语句使用

                           throws需要跟在方法参数列表后面,不能单独使用

3.内容不同:throw抛出一个异常对象,且只能有一个

                     throws后面跟异常类,且可以跟多个异常类

 

异常的分类:

Throwable类:所有异常类型都是Throwable类的子类,它有两个派生类,分别是Error和Exception

Error类:表示仅靠程序本身无法恢复的严重错误,如内存溢出、虚拟机错误。应用程序不应该抛出这种类型的对象(一般由虚拟机抛出)

Exception类:由java应用程序抛出和处理的非重要错误,如数组下标越界、类型转换等。它的不同的子类分别对应不用类型的异样

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!