——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
什么是异常
阻止当前方法的运行或作用域继续执行的问题。Java对出现的问题分成两类进行定义——严重的和不严重,分别通过Exception类、Error类描述了这两中问题。对与严重的问题一般不进行处理。而不严重的Exception一般都编写针对性代码进行处理
怎么处理异常
通过对可能出现异常的代码进行监控,如果出现异常,会生成一个异常对象,异常对象封装了异常事件的信息,并把它交给Java运行时系统,这个过程称为抛出异常,Java运行时系统接收到异常时,寻找能处理这异常的代码并把异常对象交给其处理,这过程称为捕获异常。java有针对异常的语句,try…catch…finally
必须处理和可处理可不处理的异常:RunTimeException类和子类的异常是指在运行期间发生的异常,属于不可查异常。
try catch finally
Java 通过try对可能出现异常的代码进行监控,通过catch对出现异常的时候做出应对措施,通过finally完成一些必要的动作,无论是否发生异常,都会执行。
使用异常处理的好处就是程序出错后不会结束,而是处理异常后继续执行下去。
public void method()
{
try
{
可能发生异常的代码
}catch(Exception ex)
{
发生异常后的处理代码,ex是Java异常对象,所有在运行时可能发生的异常都是Exception类的子类
}
}
小例子:
import java.util.Scanner;
class exceDemo2
{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数");
int num =0;
int num2 =0;
int result =0;
try
{
num = input.nextInt();
System.out.println("请输入除数");
num2 = input.nextInt();
result = num / num2 ;
}
catch(Exception ex)
{
System.out.println("请输入合法的数字");
return;
}
System.out.println(num+"/"+num2+"="+result);
}
}
捕获多个异常对象
为了能更好的知道程序运行过程中出现异常的类别,可以捕获多个异常对象进行处理,
其中的异常对象的顺序不能颠倒,Exception对象要放在后面。
public void method(){
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数");
int num =0;
int num2 =0;
int result =0;
try
{
num = input.nextInt();
System.out.println("请输入除数");
num2 = input.nextInt();
result = num / num2 ;
}
//出现除数为0的时候
catch(ArithmeticException ex)
{
System.out.println("被除数不能为0");
return;
}
//出现输入异常的时候
catch(InputMismatchException ex)
{
System.out.println("请输入合法的整形值");
}
//出现其他异常,使用异常类进行捕获
catch(Exception ex)
{
System.out.println("出现异常了");
}
System.out.println(num+"/"+num2+"="+result);
}
finally
写在finally块里面的代码无论异常发不发生都会执行。典型的使用就是在流操作中,在finally中对流进行关闭。
自定义异常
自定义异常类要继承Exception类。自定义异常主要是为了规范错误提示信息。
public class ScoreException extends Exception
{
public ScoreException()
{
super("数值必须介于0-100之间");
}
public ScoreException(String message)
{
super(message);
}
}
使用自定义异常,使用throw抛出系统异常实例或自定义异常实例。在可能抛出异常的地方使用throw抛出new出来的自定义异常。
throw new ScoreException();
声明异常
在方法后面加上throws关键字声明该功能有可能会出现异常,调用该方法的方法必须进行捕获。
public void show(Object t) throws NullPointerException{
if(t ==null)
{
throw new NullPointerException();
}else
{
System.out.println("demo_exception");
}
}
public static void main(String[]args)
{
try
{
}
}
throw和throws的区别
throw用于在代码中抛出异常实例,而throws用在方法后面,声明该方法在执行中可能会抛出异常,让调用该方法的方法要做好异常处理。
public void show(Object t) throws NullPointerException
{...}
throws后面跟着方法可能抛出的异常类,常见的IOException异常。
throw 在代码中抛出异常实例 throw new NullPointerException();
public void show(Object t) throws NullPointerException{
if(t ==null)
{
throw new NullPointerException();
}else
{
System.out.println("demo_exception");
}
}