java——异常的学习(能够快速理解)

本次对java中的异常进行总结,介绍一些常用的异常,如何使用以及如何定义异常:以下代码可以直接粘贴到idea中运行,便于理解以及自己扩增新的内容;

第一篇:

package java_yichang;
//TODO 异常:java中异常分为两大类1.可以通过代码恢复正常逻辑执行的异常,称之为运行期异常;运行期异常编译器是不会告诉你的,直接改了代码就可以解决;RuntimeException,空指针异常和除数为0的算数异常和索引越界异常都是运行期异常,可以通过更改代码逻辑就可以解决;
// 2.不可以通过代码恢复正常逻辑执行的异常,称之为编译期异常:Exception
public class java_27 {
    public static void main(String[] args) {
        /*
     异常处理语法:
     捕捉多个异常的时候,先捕捉范围小的异常,然后再捕捉范围大的异常;
        try{
        可能出现异常的代码,
        如果出现异常,JVM会对异常进行封装,形成一个具体的异常类,然后将这个异常抛出
        所有的异常对象都可以被抛出
        }catch(抛出的异常对象 对象引用){
        异常的解决方案;
        }catch{

        }finally{
        最终执行的代码逻辑;
        }
        */
        int i=0;
        int j=0;
        try{
            j=10/i;
        }catch(ArithmeticException e){
            e.getMessage();//错误信息
            e.getCause();//错误原因
            e.printStackTrace();
        }finally{
            System.out.println("最终执行的代码:出现了异常");
        }
        //以上这个错误完全可以通过ifelse进行判断然后躲避,逻辑上确实不会为空,但是万一为空之后,用if-else躲避了,但是以后要是用到了会出现问题,所以要尽可能早的发现问题然后进行更改,所以就用到了try-catch

    }
}

第二篇:

package java_yichang;
//TODO 异常:
public class java_28 {
    public static void main(String[] args)throws Exception {
        int i=10;
        int j=0;
        User one=new User();
        try{
            one.test(i,j);
        }catch(Exception e){
            e.printStackTrace();//可以看到,报错的是Exception,不是之前报的算数异常了;
            System.out.println("对异常进行处理");
        }

        //下面抛出异常了,这里就要进行处理,可以加上try-catch或者这里可以不进行处理,谁调用这个函数就要处理,
        // 可以在main方法后面抛出异常,就算是这两处都不做处理,也不会报错,因为这个是运行期异常,如果出现异常
        // 编译器不会提醒你,也就是不会飘红,将代码改了就可以解决,但是一般是抛出一个异常来进行处理,这个时候
        // 就不能抛出运行期异常了,需要将异常转化一下,在下方加上try-catch;这个时候在下方方法加上try-catch后,
        // 手动抛出了异常,这个时候如果不做处理就会飘红,编译器就会提醒做出操作;这时候要么main函数后面抛出异常来解决,
        // 要么堆one.test(i,j)加try catch解决

    }
}
class User{
    //如果方法中可能出现问题,那么需要提前声明,告诉其他人,我的方法肯能会出现问题;
    //此时需要使用关键字throws
    //如果程序中需要手动抛出异常,用throw关键字;然后new出异常对象;
    public void test(int i,int j)throws Exception{
        try{
            System.out.println(i/j);
        }catch(Exception e){
            throw new Exception("除数为零");//此处要与test方法后面throws的异常要匹配;

        }

    }
}

第三篇:

package java_yichang;

import javax.security.auth.login.AccountException;

//TODO 自定义异常:
public class java_29 {
    public static void main(String[] args){
        String account="zhangsan";
        String password="123123";
        try{
            login(account,password);//这个地方要进行处理,加上try-catch,下面已经抛出异常了,如果不进行处理的话,程序就会崩溃;
        }catch(accountException e1){
            System.out.println("账号不正确,需要重新修正!");
        }catch(passwordException e2){
            System.out.println("密码不正确,需要重新修正!");
        }catch (loginException e3){
            System.out.println("其他登录的相关错误!");
        }
    }
    public static void login(String account,String password){//如果下面loginException没有继承RuntimeException的话,改成继承Exception的话,这里就需要抛出具体编译器异常,因为运行期异常不需要处理,但是编译器异常必须处理,飘红了,和28一样,此处需要加上throws accountException,passwordException;
        if(!"account".equals(account)){//此处不加!的话就是代表两个相等的时候执行,加上之后代表不相等的时候执行if条件语句
            throw new accountException("账号不正确!");
        }
        if(!"password".equals(password)){
            throw new passwordException("密码不正确!");
        }
        System.out.println("登陆成功!");
    }
}
class accountException extends loginException{
    public accountException(String message){
        super(message);
    }
}
class passwordException extends loginException{
    public passwordException(String message){
        super(message);
    }
}
class loginException extends RuntimeException{
    public loginException(String message){
        super(message);

    }
}

你可能感兴趣的:(java,学习,开发语言,ide,idea)