黑马程序员 第一篇 Java 异常处理 (Foundation; completed)

——- android培训java培训、期待与您交流! ———-

Java 基础 异常处理

  • 什么是异常处理
  • 如何进行异常处理
  • 异常的分类和区别不同的异常
  • 自定义异常和使用自定义异常

    1. 异常处理基本介绍

1.1 try和catch捕获异常

try语句块主要用于可能会出现异常的区域,在try的后面会跟有一个或者多个catch语句块,在catch语句块中主要是编写相应异常的处理方法。

语法
try
{
    //此处是可能出现异常的代码
}
catch(Exception e)
{
    //此处是如果发生异常的处理代码
}
public class YiChang1
{
    public static void main(String args[])
    {
        try
        {
            int[] a = new int[5]; //定义一个长度为5的数组
            a[5] = 6;
        }
        catch(Exception e)
        {
            //发生异常时执行的语句
            System.out.println("该程序发生异常");
        }
    }
}           

该代码会运行try语句时,由于并不存在a[5],所以发生异常,执行catch语句

1.2 try…catch 语句使用注意点

  1. try…catch语句是对有可能发生异常的程序进行查看,如果没有发生异常,就不会执行catch语句中的内容.

  2. 在程序中如果不适用try…catch语句,则当程序发生异常的时候,会自动退出程序的运行.

  3. try…catch语句中catch语句可以不只是一个,可以存在多个catch语句来定义可能发生的多个异常。当处理任何一个异常时,则将不再执行其他catch语句.

public class YiChang2
{
    public static void main(String args[])
    {
        try
        {
            int[] a = new int[5];//定义一个长度为5的数组
            a[5]=6;              //为其中元素赋值
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
            //发生数组下标越界异常时执行的语句
            System.out.println("该程序发生数组下标越界异常");
        }
        catch(Exception ee)
        {
            //发生异常时执行的语句
            System.out.println("该程序发生异常");
        }
    }
}

输出结果为:
该程序发生数组下标越界异常

代码解析:
第一个catch语句中ArrayIndexOutOfBoundsException就是数组下标异常,它是Exception异常的子类。
该程序执行第一段catch语句后,不执行第二段catch语句

  • 当对程序使用多个catch语句进行异常处理时,特别需要注意的是要将范围相对小的异常放在前面,讲范围相对大的异常放在后面。以下示范一个错误的catch语句顺序。
public class YiChangeCatchOrder
{
    public static void main(String args[])
    {
        try
        {
            int[] a = new int[5];//定义一个长度为5的数组
            a[5]=6;              //为其中元素赋值
        }
        catch(Exception ee)
        {
            //发生异常时执行的语句
            System.out.println("该程序发生异常");
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
            //发生数组下标越界异常时执行的语句
            System.out.println("该程序发生数组下标越界异常");
        }
    }
}

输出结果:
该程序发生异常
代码解析:
由于第一段catch语句将对所有异常进行处理,执行该catch语句后将不执行后面的catch语句。

1.3 finally 语句

finally 语句是无论程序中是否发生异常都会被执行的

语法

try
{
    //此处是可能出现异常的代码
}
catchException e)
{
    //此处是如果发生异常的处理代码
}
finally
{
    //此处是肯定被执行的代码
}

可能会中断finally语句的情况

  1. finally语句中本身就产生异常
  2. 执行finally语句的线程死亡
  3. 执行到finally语句时停电

1.4 异常处理注意点

try…catch…finally语句
1. try后面必须有catch语句或者finally语句,否则程序不能通过编译
2. try…catch…finally语句之间不能有其他语句执行

2.异常的分类

这里写图片描述

这里写图片描述

补充:
捕获异常
通常是由外部因素造成的,不是由程序造成的。例如连接网络等操作,这些是和很多因素有关系,可能并不是程序的错误。虽然这些错误并不是程序的错误,但也是必须要进行处理的。

未捕获异常
1. 包括Error类以及它的直接子类和间接子类
RuntimeException类以及它的直接子类和间接子类

  1. Error类通常由硬件运行错误所导致的错误
    RuntimeException类通常是程序运行时引起的异常

3.抛出异常

3.1

定义:
当一个程序段发生异常时,如果自己不能够进行异常处理,就可以抛出异常给上一层。如果上一层也不能解决就可以一直向上抛出异常,直到抛出给main方法。如果仍然不能解决,就会中断程序,将异常显示出来。

public class YiChang3
{
    public static void main(String args[])
    {
        YiChang3 yc=new YiChang3();
        yc.a();
    }
    //在a方法中进行异常处理
    public void a()
    {
        try
        {
            b();
        }
        catch(Exception e)
        {
            System.out.println("在该处进行异常处理");
        }
    }
    //该方法没有进行异常处理,抛出异常给a方法
    public void b()
    {
        c();
    }
    //该方法没有进行异常处理,抛出异常给b方法
    public void c()
    {
        int[] a=new int[5];
        a[5]=6;
    }
}

运行结果:
    在该处进行异常处理

分析:
    说明该程序进行了try..catch语句的异常处理,使程序能正常运行。

3.2 使用throws和throw语句抛出异常

throws语句是在方法的声明中使用抛出异常,而throw语句是在方法体内使用抛出异常。

import java.net.*;
public class YiChange32
{
    //在main方法中使用throws语句声明该方法抛出IOException异常
    public static void main(String args[])throws IOException
    {
        try
        {
            //可能出现捕获异常的语句
            ServerSocket s=new ServerSocket(8080);
        }
        catch(IOException e)
        {
            //使用throw语句抛出该IOEexception异常
            throw e;
        }   
    }
}
运行结果:
    正常运行
分析:
    使用throw语句抛出catch IOException异常,并在main方法中使用throws语句声明该方法抛出IOException异常

4.自定义异常

4.1 创建和使用自定义异常类

创建自定义异常类需要继承Exception类。在class自定义的异常类中通过
具有一个无参构造器和一个带有字符串参数的有参构造器。定义异常类通
常充当捕获异常的角色,所以需要从Exception类或者其他的类继承,它
的基本格式如下

class 类名 extends Exception
{
    类体
}

以下演示一个最简单的自定义异常类

class MyException extends Exception
{
    public MyException()
    {
    }
    public MyException(String s)
    {
        super(s);
    }
}


代码解析:
在该自定义异常类中定义了一个无参构造器和一个需要字符串类型的有参构造器,自定义的类继承Exception类,这是一个最简单的自定义异常类。


Tips:
在自定义的异常类中继承Exception类可以拥有以下方法
printStackTrace:可以显示异常调用栈的信息
getMessage: 可以得到异常对象的字符串表示
toString: 可以得到异常对象中携带的出错信息

以下是一个使用自定义异常类的程序


public class YiChang
{
    public static void main(String args[])
    {
        MyException me = new MyException("自定义异常类");
        System.out.println("自定义异常对象携带的错误信息为: "+me.getMessage());
        System.out.println("自定义异常的字符串表示为: "+me.toString()); 
    }
}

4.2 自定义异常的实际应用

例子
在百分制的考试当中,0到100的得分都是可能发生的,但是超出这个范围,则肯定是发生了错误。这里就可以使用自定义异常。

以下一个在实际应用中使用自定义异常的程序

public class YiChang
{
    public String deiFen(int fen)throws MyException
    {
        if(fen>=0&&fen<=100)
        {
            return "正常";
        }
        else
        {
            throw new MyException("错误输入");
        }
    }
    public static void main(String args[])
    {
        YiChang yc = new YiChang();
        try
        {
            String s = yc.deiFen(68);
            System.out.println(s);
            String ss = yc.deiFen(123);
            System.out.println(ss);
        }
        catch(MyException e)
        {
            System.out.println("异常信息为: "+e.getMessage());
        }
    }
}


——- android培训java培训、期待与您交流! ———-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值