JAVA——异常

1.所谓“异常“,即就是程序中可能出现的问题

2.分类

异常的根类是java.lang.Trowable,其有两个子类Error,Exception;

Error:系统级别错误,属于严重问题,系统一旦出现错误,sun公司会将这些错误封装成Error对象,一般不给我们程序员使用;

Exception:“异常”,代表程序可能出现的问题,通常使用Exception以及他的子类来封装程序可能出现的问题;

Exception又分为运行时异常和编译时异常;

运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒,只有程序运行时才会显示错误信息;

(如:NullPoinerException,ArithmeticException,ArraylndexOutOfBoundsException等)

编译时异常:没有继承RuntimeException的异常,直接继承于Exception,编译阶段就会出现异常提醒;(必须要手动处理,否则代码会报错)

3.异常的作用

①异常可用来查询bug的关键参考信息

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

4.异常的处理方式

①JVM默认的处理方式

将异常的名称、异常原因、出现的位置等信息输出在控制台;程序停止运行,出错语句下面的程序将不再执行;

②自行处理(捕获异常)

try{

        可能出现的异常代码;

}catch(异常类名 变量名){

        异常的处理代码;

}

当代码出现异常时,可以让程序继续往下执行;

若try中没有错误则会将try中的语句全部执行完,但不会执行catch里面的语句;

若try终于到多个错误我们需要写多个catch来捕获,切记父类一定要写在最下面(先子再父)

若try中的问题没有被捕获,则最终会交给JVM进行处理;

若try中遇到了问题,则下面的代码就不会在执行了,而是跳转到对应的catch语句中执行对应的语句,要是没有对应的catch与之匹配,则最终会交给JVM进行处理;

Throwable 的成员方法

public String getMessage();返回此throwable的详细信息字符串;

public String toString();返回此throwable的可抛出的简短描述;

public void printStackTrace();将异常的错误信息输出在控制台(包含前两者的输出信息,故此方法更常用)

③抛出异常

①throws

写在方法声明处,表示声明一个异常告诉调用者使用本方法可能会出现那些异常;

public void 方法名()throws 异常类名1,异常类名2...{   ....}

若是编译时异常则必须要手写,若是运行时异常则可以不写;

②throw

写在方法内,结束方法,手动抛出异常对象交给调用者,方法中下面的代码不再执行了;

public void 方法名(){

        throw new NullPointerException();

}

5.案例分析

//学生类
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        if(name.length()<0||name.length()>5){
            throw new RuntimeException();
        }
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        if(age<15||age>35){
            throw new RuntimeException();
        }
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

测试代码:

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        Student student=new Student();
        while (true) {
            try {
                System.out.println("请输入学生姓名:");
                String sname=sc.nextLine();
                student.setName(sname);
                System.out.println("请输入学生年龄:");
                String sage=sc.nextLine();
                int age = Integer.parseInt(sage);
                student.setAge(age);
                break;
            } catch (NumberFormatException e) {
                System.out.println("输入的年龄格式有误,请输入数字!");
            }
            catch (RuntimeException e) {
                System.out.println("输入的姓名或年龄不再规定范围内!");
            }
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值