> 文章列表 > Java异常处理

Java异常处理

Java异常处理

 

throw new RuntimeException ();

异常的2个作用

1.异常用来查询bug的关键参考信息

2. 异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

异常的捕获

当程序JVM默认处理异常时,遇到异常会爆红,无法继续执行下去

但是当我们手动处理时,可以让异常的语句后面的程序任然能执行

手动处理异常语法

try {

预测可能出现异常的语句

}catch(异常类名 随便一个变量名){

当语句异常与预测v的异常类名一致时,运行该花括号里的语句

}

下面的代码演示了手动处理异常的情况

 

看看运行结果

 

异常的抛出

  • 将异常输出在控制台上: throw new 异常类名();
  •  在方法名后面加上throws 异常类名1,异常类名2

对于第二种抛出:编译时类型必须要写,运行时类型可以不写

public class Throw {public static void main(String[] args) {int [] a = {0};int m = 0;try {m = max(a);} catch (NullPointerException e) {System.out.println("空指针异常");}catch (ArrayIndexOutOfBoundsException e) {System.out.println("索引越界异常");}System.out.println(m);}static  int max(int arr[]){int maxn = arr[0];if(arr.length==1){throw new ArithmeticException();}if(arr==null){throw new NullPointerException();}for (int i : arr) {if(i>maxn)maxn = i;}
return maxn;}
}

异常小结

抛出:告诉调用者出错了,一半用在方法里面

捕获:为了让程序继续运行下去,一半用在调用方法时

测试

package exception;public class Girlfrend {int age;String name;public Girlfrend() {}public Girlfrend(int age, String name) {this.age = age;this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {if(age<18||age>40)throw new RuntimeException();this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {if(name.length()>10)throw new RuntimeException();this.name = name;}public String toString() {return "Girlfrend{age = " + age + ", name = " + name + "}";}
}
package exception;import java.util.Scanner;
//键盘录入女朋友姓名和年龄
//姓名长度在3-10之间
//年龄范围是18-40
//如果超出这个范围就需要重新录入,直到录到正确为止//需要考虑用户在键盘录入时的所有情况
//如:录入年龄时超出范围,录入年龄时录入abc等情况
public class Test {public static void main(String[] args) {//创建键盘录入的对象Scanner sc = new Scanner(System.in);//创建女朋友的对象Girlfrend gf = new Girlfrend();while (true) {try {//接受女朋友的姓名System.out.println("输入女朋友的名字");String name = sc.nextLine();gf.setName(name);//接收女朋友的年龄System.out.println("请输入女朋友年龄");//因为年龄是int类型,而这输入的是字符,需要用包装类转换String ages = sc.nextLine();int age = Integer.parseInt(ages);gf.setAge(age);//如果进行到这了就说明没有异常,那么就退出循环break;} catch (NumberFormatException e) {System.out.println("请重新输入姓名");}catch (RuntimeException e) {System.out.println("请重新输入年龄或者姓名");}}//打印System.out.println(gf);}
}

在set方法里面判断输入的信息是否有问题,若没问题就将信息录入,如果有问题就抛出异常,在调用时捕获该异常

在循环中,如果有异常就继续循环,直到输入的信息完全没问题。

自定义异常类

  1. 定义一个类,继承RuntimeException(当异常类型属于运行时类型时),或者继承Exception(当异常类型属于编译时类型时)。
  2. 然后在类里面写2构造器,一个有参一个无参,(直接Alt+ins快速生成)