java异常和throw和throws的区别

之前在编程中运行时,经常会遇见一些错误,常见的如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);
}

}

输出结果:错误
java异常和throw和throws的区别

 


 

 输出结果:正确

java异常和throw和throws的区别

 

 

 




处理方式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);
}
}

输出结果:正确

java异常和throw和throws的区别

 

输出结果:错误

 java异常和throw和throws的区别

 

 

 



抛出异常——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);

java异常和throw和throws的区别


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

java异常和throw和throws的区别

 

 

 

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

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

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

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

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

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

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

 

异常的分类:

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

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

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

上一篇:java中异常抛出后代码还会继续执行吗?


下一篇:C++函数声明后面加throw()的作用