之前在编程中编译完成后,运行时,会遇见一些常见的错误,如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应用程序抛出和处理的非重要错误,如数组下标越界、类型转换等。它的不同的子类分别对应不用类型的异样 |