java4Android(12)java中的异常(13)自定义异常,异常处理的两种方式

编译是检测语法错误
程序在运行过程中出现的错误叫异常

异常是JDK所提供的类
//java 编译器要求你强制对这个可能出现的异常进行捕捉
//怎样区分是uncheck exception还是check exception?
//如果是Exception的子类不是RuntimeException的子类是checked Exception,
//否则是Exception的子类同时是RuntimeException的子类那么就是unchecked Exception

例子:

class checkException
{
    public static void  main(String[] agrs)
    {
        try
        {
            int i = 1 / 0;
            //如果程序出错,出错后的代码不执行
        }
        catch (Exception e)
        {   //如果程序出错回到catch里执行
            e.printStackTrace();
        }
        finally
        {
            //无论程序是否出错都执行
            System.out.println("finally是程序的出口");
        }
    }
}

广义异常包括Error 和 Exception,程序员对error异常无能为力一旦出现error虚拟机就关闭,而程序时运行在虚拟机上,对异常的处理体现了程序的健壮性,不能因为一点异常就导致整个程序崩溃。

我们把可能出现异常的代码放在try块中,把对异常捕捉的代码放在catch块中,把清理资源的代码放在finally中。


生成异常对象抛出异常
例子:

class User
{
    private int age;

    public void setAge(int age)
    {
        if(age < 0)
        {
            //生成异常对象
            RuntimeException e = new RuntimeException("年龄不能为负数");
            //抛出异常终止程序运行
            throw(e);
        }
        this.age = age;
    }
}
class Test
{
    public static void main(String[] args)
    {
        User u = new User();
        u.setAge(-1);
    }
}

结果:
这里写图片描述
对于异常是虚拟机无法辨识的,比如年龄是负数等异常,我们需要告诉虚拟机要抛出异常,我们可以生成一个一场对象用throw抛出这个异常对象,java虚拟机运行到这的时候就知道啊这出现异常了;但是一般我们不会对自己抛出的异常做处理,我们需要声明异常,让调用它的函数进行捕捉和处理。

class User
{
    private int age;

    public void setAge(int age) throws Exception
    {
        if(age < 0)
        {
            //生成异常对象
            RuntimeException e = new RuntimeException("年龄不能为负数");
            //抛出异常终止程序运行
            throw(e);
        }
        this.age = age;
    }
}
class Test
{
    public static void main(String[] args)
    {
        User u = new User();
        try
        {
            u.setAge(-1);
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

    }
}

对于checked Exception 我们有两种做法
1:声明异常,在函数后面加throws,让调用它的函数来处理。
2:用try catch将会出现异常的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值