2023/7/07

发布时间 2023-07-06 17:07:51作者: 伐木工熊大

今天主要学习了Java的异常处理

首先,一个程序如果碰到了异常不处理,程序就会立即停止,而异常处理就是在异常发生的情况下启动类似于备用方案使程序继续运行

Java中的异常捕获结构由try,catch,finally三部分构成,其中,try和catch是必须同时存在的。

try中的代码就是可能存在异常的代码,catch中的代码就是try中有异常时的执行方案,finally中的代码无论有没有异常都会正常运行

package 异常处理;

public class Take {
    public static void main(String[] args)
    {
        try {
            String str="hahahaha";
            System.out.println(str+"个锤子");
            int num=Integer.parseInt("23H");//将数字的字符型转换为整数型
            System.out.println(num);
        }catch(Exception e)//如果出现异常就替换异常语句然后执行,一般都填入处理异常的代码
        {
            e.printStackTrace();//输出异常性质
            System.out.println("这里显示异常错误");
        }
        finally//无论是否异常,里面的内容都会执行 
        {
            System.out.println("666");
        }
    }
}
package 异常处理;
import java.util.Scanner;
public class computer {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        try//输入的不为整数就抛出
        {
            System.out.println("请选择你要进行的运算:\n1.加\n2.减\n3.乘\n4.除");
            int x=sc.nextInt();
            System.out.println("请两个输入整数:");
            int a=sc.nextInt();
            int b=sc.nextInt();
            switch (x)
            {
            case 1: add(a,b);
            break;
            case 2: minus(a,b);
            break;
            case 3: plus(a,b);
            break;
            case 4: chu(a,b);
            }
        }catch(Exception e)
        {
            System.out.println("数据错误,请输入整数!");
            e.printStackTrace();
        }
        finally
        {
            System.out.println("结束");
        }
    }
    public static void add(int a,int b)
    {
        System.out.println(a+b);
    }
    public static void minus(int a,int b)
    {
        System.out.println(a-b);
    }
    public static void plus(int a,int b)
    {
        System.out.println(a*b);
    }
    public static void chu(int a,int b)
    {
        try//除数为0就抛出错误,直接在方法处处理了该异常
        {
        System.out.println(a/b);
        }catch(Exception e)
        {
            System.out.println("请输入正确的除数");
            e.printStackTrace();
        }
        finally
        {
            
        }
    }
}
package 异常处理;
import java.util.Scanner;
public class bank {
    static double money=1023.79;
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你要取款的金额:");
        try
        {
            int a=sc.nextInt();
            if(a<money)
            {
                System.out.println("取款成功");
                money-=a;
            }
        }
        catch(Exception e)
        {
            System.out.println("请输入一个整数");
        }
        finally
        {
            System.out.println("您账户的余额还有:"+money);
        }
        
    }
}

Java中存在自定义异常,当运行时的代码不符合你所自定义的条件时就会抛出该异常,在方法中的异常抛出如果不想在当前方法中解决,就必须抛出该异常,一个方法运行时只能抛出一个异常,当该方法抛出异常后,该方法就不会再往下执行,要让方法抛出异常就要用到throws和throw关键字,前者是在方法的定义后主体前,throws指出了该方法所能抛出的异常,throw是在方法主体内来运用的。

package 自定义异常;
class ClassException extends Exception//自定义异常
{
    public ClassException(String hhh)
    {
        super(hhh);
    }
}
public class students {
    public static void main(String[]args)
    {
        try
        {
            qiandao("张三","未到");
        }
        catch(ClassException a)//处理指定类型的异常
        {
            a.printStackTrace();
            System.out.println(a);
        }
    }
    static void qiandao(String name,String state)throws ClassException//抛出的异常类型,抛出的异常在主方法中处理
    {
        if(state.equals("未到") )
        {
            throw new ClassException(name+"旷课");
        }
    }
}
package 自定义异常;

public class key {
    public static void main(String[] args)
    {
        try {
            car();
        }
        catch(NullPointerException a)
        {
            a.printStackTrace();
            System.out.println("该异常为空指针异常");
        }
    }
    public static void car()throws NullPointerException//要抛出该异常必须用throws指明抛出
    {
        int[] a=null;
        a[1]='a';
    }
}
package 自定义异常;
import java.util.Scanner;
class numException extends Exception
{
    public numException (String a)
    {
        super(a);
    }
}
public class supermarket {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你要购买的数量:");
        int a=sc.nextInt();
        try
        {
            sum(a);
        }
        catch(numException e)
        {
            System.out.println(e);
        }
        finally
        {
            System.out.println("祝您购物愉快");
        }
    }
    static void sum(int x)throws numException
    {
        if(x>1500)
            throw new numException("超过限制");//按throws后面的规定类型抛出
        else
            System.out.println(x/500.0*3.98);
    }
}
package 自定义异常;
class priceException extends Exception
{
    priceException(String a)
    {
        super(a);
    }
}
public class tomato {
    public static void main(String[] args)
    {
        int price=8;
        try
        {
            now(price);
        }
        catch(priceException e)
        {
            System.out.println(e);
        }
    }
    public static void now(int price)throws priceException
    {
        if(price>7)
            throw new priceException("价格超标");
    }
}

能被try-catch捕捉的异常都是运行时异常,Java的类库中有很多常见的异常类