Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 381|回复: 0

《Java从入门到放弃》JavaSE入门篇:异常

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-29 08:20:10 | 显示全部楼层 |阅读模式

    异常!!!看看生活中的异常例子:

    wKiom1m4oQqxKdrbAAFGwKziKVg319.png

    wKioL1m4oOLjWr47AAFsu0bBQpY688.png

    正常情况下,从家到公司上班,只需要20分钟!但如果在路上碰到堵车或修路或车突然自燃等问题,那就没办法正常去上班了。其中堵车或修路或车突然自燃等问题就属于异常。

    wKiom1m4o5-z165XAAF7me8U_-I750.png

    碰到异常,就需要处理,不然就只能中断上班了。


    在Java程序中的异常表示什么意思呢?

    Java中的错误分为两类:错误(Error)和异常(Exception)

    错误一般都是在编译前IDE就能发现并提示,例如非要给整型变量赋一个超大的数值:

    wKiom1m4pVzyXurKAAAobEQWUQQ110.png

     

    这就是一个典型的Error。

     

    程序在运行时出现的问题,就叫异常!!!如果在编程时不考虑到对这些异常的处理,当出现异常时,程序就会停止。例如下面示例中的除0错误:

    1
    2
    3
    4
    5
    6
    7
    public  static  void  main(String[] args) {
         Scanner input =  new  Scanner(System.in);
         System.out.print( "请输入整数:" );
         int  i = input.nextInt();
         int  sum =  10 /i;
         System.out.println(sum);
    }

    这段代码在编译时是没有任何问题的,但在运行时输入0就会提示有异常:

    wKioL1m4pwuidY2IAAA-PgWQvnA448.png

     

    出现错误很好解决,在编码环节改正确就OK了,但有的时候是否出现异常就不是开发者能控制的(如上例),所以开发者只能预判哪些地方有可能出现异常,提前做好处理。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public  static  void  main(String[] args) {
         Scanner input =  new  Scanner(System.in);
         System.out.print( "请输入整数(不能输入0):" );
         int  i = input.nextInt();
         int  sum =  0 ;
         try  {
             sum =  10 /i;
         catch  (Exception e) {
             // TODO: handle exception
             System.out.println( "不能输入0,不能输入0,不能输入0!!!听不懂国语么!!!" );
         }
         
         System.out.println(sum);
    }

    结果:

    wKioL1m4p7rjSZnpAAAnjFGsyE4083.png

     

    可以发现结果中不再出现异常的信息,而且换成了我们自己的提示信息。

     

    就跟下面两个图的区别一下,如果异常直接出现在用户面前,用户很有可能就再也不用你的程序了,而如果给个提示,则用户有可能会继续使用。

     

    wKiom1m4qLjC22vWAAB1TJVypJM826.jpg    wKiom1m4qLmAIaj9AACVLI00dqo347.jpg


     

    异常的概念就介绍完毕啦!!!j_0019.gif,接下来看看Java中是如何处理异常的。

    Java中的常见异常如下图:

    wKiom1m4qWfRiMv7AADDxzkspek720.png

    当然,这只列出了一部分,还有很多的异常已比较常见,当大家碰到时最好查一下JDK。

     

    Java中异常的三种处理方式:

    1. try-catch-finally

    2. throw和throws

     

    一、try-catch-finally

        try部分是必须的,用来捕获异常,一般把有可能出现异常的代码放入其中。

        catch部分可以有零到多个,是用来判断异常类别并进行处理,一般把异常处理代码放入其中。

        finally部分可选,无论是否有异常都必须执行的代码放入其中。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int  firstNum =  12
    int  secondNum =  0 ;
    try  {
         int  result = firstNum/secondNum;
         System.out.println( "两个数字相除的结果是:" +result)       
    } catch (ArithmeticException e) {
         System.out.println( "算术异常:" );
    } catch (NumberFormatException e) {
         System.out.println( "数字转换异常" );
    } catch (ArrayIndexOutOfBoundsException e){
         System.out.println( "数组下标越界异常" );
    } catch (Exception e) {
         System.out.println( "其他异常" );
    }
    finally {
         System.out.println( "我是必须要执行滴,快叫爸爸!" );
    }

     

    二、thorw和throws

        这个关键字的作用是抛出异常,它不处理。

        我叫小明给我带份红烧肉,小明去食堂发现没有红烧肉(这就相当于异常出现了),他不知道如何处理,就回到寝室告诉我没有红烧肉,然后我再来处理。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public  class  XiaoMing {
         //买食物的方法
         public  void  buyFood(String food)  throws  Exception{
             //用一个集合表示食堂的所有菜
             List<String> foods =  new  ArrayList<String>();
             foods.add( "青椒鸡蛋" );
             foods.add( "青椒肉丝" );
             foods.add( "红烧排骨" );
             foods.add( "土豆欢声" );
             //表示是否有该食物的状态
             int  state =  0 ;    //默认没有 0.没有该食物 1.有该食物
             for  (String string : foods) {
                 if (food.equals(string)){
                     state =  1 ;
                     break ;
                 }
             }
             
             if (state== 0 ){
                   throw  new  Exception( "你要吃的菜没有了!" );
             }
         }
    }

    编写测试代码:

    wKiom1m4rbCBvCWJAAAd58WvCrY080.png

        不瞎的朋友应该发现有什么问题了吧?

        是的,因为buyFood()方法后面我们加了throws Exception,所以在调用时IDE就认为这儿极有可能会有异常,我们就必须处理它,还是两种方式,要么使用try-catch,要么在main方法后继续抛异常(throws Exception)。

    wKiom1m4rkGC5Sc7AAA2sY4YOqQ796.png

    在Java中,除了使用JDK中定义好的异常外,我们还可以自定义异常,这个很简单,定义一个类,继承Exception类,重写一个参数的构造方法就OK了。


     

    好吧,异常到这儿就够用了,需要深入了解的朋友,请自行百度吧,哈哈!j_0028.gif

     

    “软件思维”博客地址:51CTO博客园,感兴趣的小伙伴可以去看相关的其它博文。  

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-4 11:55 , Processed in 0.065618 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表