Java 异常

Java异常: 程序执行中发生的不正常情况称为“异常”(开发过程中的语法错误和逻辑错误不是异常)

执行过程中所发生的异常事件可分为两类:

(1)Error(错误):Java虚拟机无法解决的严重问题,比如:JVM系统内部错误、资源耗尽、栈溢出和OOM等情况。Error是严重错误,程序会崩溃

(2)Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,读取不存在的文件,网络连接中断等情况。Exception分为两大类:运行时异常(程序运行时发生的异常)和编译时异常(编译器检查出的异常)

异常体系图:

 

小结:

异常分为两大类,运行时异常和编译时异常。

(1)运行时异常,编译器检查不出,一般为编程时的逻辑错误, 是程序员应该避免其出现的异常。java.lang.RuntimeException及其子类均为运行时异常

(2)对于运行时异常,可以不做处理这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响

(3)编译时异常,是编译器要求必须处置的异常

常见的运行时异常:

常见的编译异常:

异常处理的方式:

(1)try-catch-finally:捕获发生的异常自行处理

(2)throws:抛出发生的异常,交给方法的调用者来处理,最顶级的处理者是JVM

try-catch异常处理案例:

如果用户输入不是一个整数, 就提示他反复输入知道输入一个整数为止:
 

package Test;


import java.util.Scanner;

public class T {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        String str = "";
        int num;

        while(true) {
            try {
                System.out.println("please input:");
                str = cin.next();
                num = Integer.parseInt(str);
                break;
            } catch (NumberFormatException e) {
                System.out.println("input again!");
            }
        }
        System.out.println(num);
    }
}



throws:

定义异常:

(1)定义类:自定义异常类名,继承Exception或RuntimeException

(2)若继承Exception,属于编译异常

(3)如果继承RuntimeException,属于运行异常。(一般来说,继承RuntimeException,好处是可以使用默认处理机制
 

throw和throws:

异常练习:

package Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;

public class T {

    public static boolean if_digit(String pwd) {
        for (int i = 0; i < pwd.length(); i++) {
            if(pwd.charAt(i)<'0' || pwd.charAt(i)>'9') {
                return false;
            }
        }
        return true;
    }

    public static void userRegister(String name, String pwd, String email) {

        if(name == null || pwd == null || email == null) {
            throw new RuntimeException("参数不能是null");
        }

        int length = name.length();
        if(length < 2 || length > 4) {
            throw new RuntimeException("用户名长度为2或3或4");
        }
        if(pwd.length() != 6 || !if_digit(pwd)) {
            throw new RuntimeException("密码长度为6 并且要求全部为数字");
        }
        int i = email.indexOf('@');
        int j = email.indexOf('.');
        if(i <= 0 || j < i) {
            throw new RuntimeException("邮箱地址要包含@和.,并且@在.前面");
        }
    }


    public static void main(String[] args) {
        String name = "tim";
        String pwd = "124342";
        String email = "tim@sohu.com";

        try {
            userRegister(name, pwd, email);
            System.out.println("kuaipa");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值