V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Angdo
V2EX  ›  问与答

什么是异常?

  •  
  •   Angdo · 2015-10-23 16:12:29 +08:00 via iPhone · 2580 次点击
    这是一个创建于 3349 天前的主题,其中的信息可能已经有所发展或是发生改变。

    异常是程序运行中遇到事先没有预料到的事叫异常
    还是事先定义好可能出现的意外情况?
    异常和 bug 是一样的吗?

    15 条回复    2015-10-23 21:45:26 +08:00
    cxbig
        1
    cxbig  
       2015-10-23 16:18:51 +08:00
    程序里异常是 Exception ,通常来说它是一种运行机制,可以由很多原因触发(写错代码、收到错误的反馈等),然后可以通过一定的机制去 catch 然后根据实际情况进行处理。属于比较主动的程序行为。
    bug ,算是一种设计失误。写错代码直接报错、设计的算法没有得到正确的结果、逻辑错误等。
    scream7
        2
    scream7  
       2015-10-23 16:31:07 +08:00
    关注中,我对这个也一直有点不了解.
    如果我们能预料到 exception,并 catch 住,为什么不直接使用 if 判断,assert 呢?
    watzds
        3
    watzds  
       2015-10-23 16:42:26 +08:00 via Android
    异常是难以避免的,可能出现的异常情况
    我想它还有一些跳转的功能,向上层抛出等

    有些底层就是通过 if else 抛出异常吧
    不用异常, ifelse 写起来会很多吧

    Java 里的检查异常,还能强制你去关注可能出现的异常情况,你通过返回值,或者全局变量,就没法实现
    caoyue
        4
    caoyue  
       2015-10-23 16:58:15 +08:00
    我的理解:
    异常是遇到无法处理的情况
    举个例子,比如定义返回类型是 int
    操作是 a/b ,这时传进来一个 b=0
    你要怎么返回?
    只能抛出异常了
    Angdo
        5
    Angdo  
    OP
       2015-10-23 19:18:04 +08:00 via iPhone
    @cxbig bug 不能看成是在一个特定情况下发生的程序异常?
    Troevil
        6
    Troevil  
       2015-10-23 19:20:05 +08:00
    异常可以理解为可预料到的 BUG ,
    Angdo
        7
    Angdo  
    OP
       2015-10-23 19:21:23 +08:00 via iPhone
    @scream7 我的感觉是既然用 exception 那么肯定是一个在其子类定义的异常情况,那么就应该算是事先预料到的可能情况,没有预料到的还能是异常?
    Angdo
        8
    Angdo  
    OP
       2015-10-23 19:23:17 +08:00 via iPhone
    @watzds 重点是可以预料的意外情况是异常还是无法预料的是异常
    Angdo
        9
    Angdo  
    OP
       2015-10-23 19:26:09 +08:00 via iPhone
    @Troevil BUG 不算是一种程序异常?
    Angdo
        10
    Angdo  
    OP
       2015-10-23 19:35:12 +08:00 via iPhone
    @caoyue 重点是可以预料到发生的是异常还是无法预料的是异常
    cxbig
        11
    cxbig  
       2015-10-23 20:04:51 +08:00   ❤️ 1
    @Angdo
    Bug 通常形容意料之外的错误、或导致程序中断。 Exception 通常来说是准备好的问题处理机制。
    当然,在 OOP 环境里,某个环节没有加入 Exception 的处理,导致程序中断。我们就认为是一个 Bug 。
    watzds
        12
    watzds  
       2015-10-23 20:30:31 +08:00 via Android
    “异常”就是处理异常情况的一种机制,分什么可预料不可预料。异常情况出现的时机不可预料,异常情况是否出现最终都是可判断的。你说什么不可预料,举个例子
    Angdo
        13
    Angdo  
    OP
       2015-10-23 20:45:27 +08:00 via iPhone
    @watzds 就是知道程序可能会发生一种预料到的情况,和可能发生一种没有想过的情况
    learnshare
        14
    learnshare  
       2015-10-23 21:26:13 +08:00   ❤️ 1
    异常就是知道会发生的错误,预先做好处理方案; Bug 就是没考虑到的错误
    watzds
        15
    watzds  
       2015-10-23 21:45:26 +08:00 via Android
    @Angdo 哦,你没想到的情况,没处理,没想周全,那就是逻辑错误啊
    这就是可避免的,而异常是不可避免的,总有出现的可能。比如网络不通,就可以算异常,你没法儿避免,总有不通的情况。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3256 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:15 · PVG 20:15 · LAX 04:15 · JFK 07:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.