异常的总结
异常就是 程序中在运行过程中可能会发生的不正常的现象,异常有很多种还有一个继承体系,最上面的是Throwable,最常用的是Exception和他的子类。
异常
1、异常的概念:
①、就是程序在运行过程中,可能会发生的不正常现象异常有很多种,还有一个继承的体系,最上面的是Throwable,最常用的是Exception和它的子类。
②、Error这个分支的异常在程序中不可以捕获和处理。
Error:用于指示合理的应用程序不应该试图捕获的严重问题。这种情况是很大的问题,大到你不能处理了,你不用管它。比如说VirtualMachineError:当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。
③、RuntimeException是可以选择不可以进行捕获和处理
Exception:它指出了合理的应用程序想要捕获的条件。Exception又分为两类:一种是CheckedException,一种是UncheckedException。这两种Exception的区别主要是CheckedException需要用try...catch...显示的捕获,而UncheckedException不需要捕获。通常UncheckedException又叫做RuntimeException。《effective java》指出:对于可恢复的条件使用被检查的异常(CheckedException),对于程序错误(言外之意不可恢复,大错已经酿成)使用运行时异常(RuntimeException)。
注:常见的异常RuntimeExcepiton有IllegalArgumentException、IllegalStateException、NullPointerException、IndexOutOfBoundsException等等。对于那些CheckedException就不胜枚举了,我们在编写程序过程中try...catch...捕捉的异常都是CheckedException。io包中的IOException及其子类,这些都是CheckedException。
常见异常必须记住:
ArithmeticException 算术异常(算术中出现)
ArrayIndexOutofBoundsException 越界异常
NullpointerException 控指针异常
classNotFoundException 包名、类名没有导入jar包
NumberFormatException 数字格式化异常
InputMismatchException 不匹配异常
OutofmemorymatchException 内存溢出
2、处理异常的方法:
①、try—catch—finally
②、throws声明抛出异常
①格式
try{
需要被测试的代码
}
catch(异常类型 变量){
异常处理的代码;
}
finally{
一定要执行的语句
}
Age一:
ackage cn.edu.csdn.net;
class Demo{
int div(int a,int b){
return a/b;
}
}
public class ExceptionDemo {
public static void main(String[] args){
Demo d=new Demo();
try{
int x = d.div(4,1);
System.out.println("x="+x);
}
catch(Exception e){
//System.out.println(e.getMessage()); //打印异常名称
//System.out.println(e.toString()); //打印异常名称、信息
e.printStackTrace();//打印异常名称、信息、异常出现的位置(jvm默认)
}
finally{ //注:finally块至少执行一次
System.out.println("over");
}
}
}
Age二:
package cn.edu.csdn.net;
import java.util.*;
public class Test {
public static void main(String[] args) {
// TODO 自动生成方法存根
try{
Scanner in =new Scanner(System.in);
System.out.print("请输入被除数:");
int num=in.nextInt();
System.out.print("请输入除数: ");
int num2=in.nextInt();
System.out.print(num+"÷"+num2+"="+num/num2);
}
catch(Exception e){
System.out.println("除数不能为零!!");
e.printStackTrace();
}
finally{
System.out.println("感谢使用本程序!");
}
}
}
注:catch中可以有多个,但有顺序(不要定义多余的catch块),如果多个catch的异常出现继承关系,父类异常catch块放在最下面
finally块至少执行一次;
②格式 throws用在方法声明之后,大括号之前
3、Throw和Throws的区别
①、作用上不同
Throw程序员自行产生并抛出的异常
Throws用于声明该方法内抛出异常
②、使用位置不同
Throw位于方法体内部可以作为单独语句使用
Throws必须跟在方法参数列表的后面,不能单独使用
③、内容不同
Throw抛出一个异常对象,且只能是一个
Throws后面跟异常类,且可以跟多个异常类。
总结:(一句话)后面带S说明可以跟多个类型,后面不带S说明他后面只能跟一个对象