当前位置: 首页 > web >正文

Java 里的异常(Exception)详解

一, 什么是java里的异常

 

由于java是c\c++ 发展而来的,  首先我们先看看c语言里的错误.

 

1.1 c语言里的错误

        我们实现1个程序的过程包括,  代码编写, 编译代码成为程序,  执行程序.

.

 

        其中大部分常见的语法错误都会被编译代码这样部过滤掉.   但是即使通过了编译. 执行程序这一步可能还是会有错误.

 

        原因很多, 例如常见的除数为0,    内存溢出(数组的index超出界限), 或者内存被其他程序修改等.

 

        最简单的例子:

[java] view plain copy

 

  1. #include <stdio.h>  
  2.   
  3. int f(int a, int b){  
  4.     return a/b;  
  5. }     
  6.   
  7. int main(){  
  8.     int i = f(8,0);  
  9.         printf("i is %d\n",i);  
  10.     return 0;     
  11. }  


 


       上面的例子编译时是无错的,  但是一旦执行就会提示吐核错误了. 

 

       c语言里对这种执行时出现的错误是无能为力的,  一旦出错就会整个程序崩溃, 就不会在继续执行下面的代码.

 

       而且很多时候出错信息很少, 让你无法判断出错的原因和地方, 只能一步步小心debug...

 

       所以很多用c写的程序有时会出现非法关闭的现象.

 

       解决方法只能是在代码里对可能出错的地方添加if 判断.

 

       例如f()函数里可以对b进行判断, 如果是0就不执行.

 

 

1.2 java里运行时出现的错误

       java里编译器对代码的规范性比c严格得多. 但是即使如此,  通过编译的java程序有时也很难避免执行时出错.

 

       例如, 将上面的c程序改编成java程序:

 

[java] view plain copy

 

  1. package Exception_kng;  
  2.   
  3. class Exp1{  
  4.     public int f(int a, int b){  
  5.         return a/b;  
  6.     }  
  7. }  
  8.   
  9. public class Expt_1{  
  10.     public static void g(){  
  11.         Exp1 e = new Exp1();  
  12.         int i = e.f(8,0);  
  13.         System.out.printf("i is %d\n", i);  
  14.     }  
  15. }  

 

      运行时一样会出错, 下面是出错信息:

 

[java] view plain copy

 

  1. [java] Caused by: java.lang.ArithmeticException: / by zero  
  2. [java]  at Exception_kng.Exp1.f(Expt_1.java:5)  
  3. [java]  at Exception_kng.Expt_1.g(Expt_1.java:12)  
  4. [java]  at Enter_1.main(Enter_1.java:31)  

 

          但是可以见到, java告诉你出错的类型: 运算错误(ArithmeticExcetion), 出错信息和出错的类与文件行数输出, 方便你调试.  jvm虚拟机是会对错误作出一定的处理的.

  

          所以可以简单地将java里的异常理解成java运行时出现的错误,  异常机制就是对这种错误进行处理的机制.

 

 

1.3 java异常的定义

        实际上, 当java程序执行时出现错误时, jvm会把执行时出错的信息(例如出错原因, 类型, 位置) 收集,然后打包成为1个对象(object),  程序员可以对这种对象进行处理. 这种对象就是所谓的异常.

 

        可能出现的异常的代码并不是肯定会出现异常, 取决于执行环境和数据.!

 

二, java里的异常的分类.

 

见下图:

 

                       Throwable

                      /                \

              Error             Exception

                 /                   /               \

         xxxxxx             xxxxxx          RuntimeException

                                                          /                   \

                                                     xxxxxx             ArithmeticException

 

 

 

上图的所有对象都是类.     

 

Throwable 代表是可抛出的.

Error            代表的是严重错误,  这种错误程序员无法进行处理, 例如操作系统崩溃, jvm出错, 动态链接库失败等.  Error并不是异常, 不是本文的重点.

 

Exception    代表的就是异常了.  它下面很多派生类,   其中它的派生类也分两种, 一种是RuntimeException(运行时异常), 其他的都是非运行时异常

 

RuntimeException    包括除数为0, 数组下标超界等. 运行时异常的派生类有很多, 其产生频率较高.  它的派生类可以由程序处理或者抛给(throw) 给jvm处理. 例如上面的例子就是抛给了jvm处理, jvm把程序中断执行, 并把错误信息输出到终端上.

 

非RuntimeExcption   这种异常属于Excepion的派生类(上面红色的xxx), 但是不是RuntimeException的派生类,  这种异常必须由程序员手动处理,否则不通过编译.

 

ArithmeticExcpetion   算术异常, 它是RuntimeException的派生类, 所以程序员不手动处理也通过编译, 只不过出错时会被jvm处理.

 

http://www.xdnf.cn/news/11836.html

相关文章:

  • 解决鼠标指针移动时出现停顿卡的原因
  • CentOS5.4版本发布
  • ARM926EJ-S/ARM920T 协处理器 CP14, CP15详解
  • oracle agile 性能,Oracle Agile PLM安全漏洞(CVE-2016-3554)
  • Android Studio开发学习(三)——Button、EditText
  • Redhat6.2升级为6.3之后再降级为Redhat6.2 (linux内核降级)
  • Magisk学习之刷入vbmeta.img及关闭avb2.0校验
  • Android零基础学习指南,从入门到精通一战通关
  • 郑州seo排名工具(seo点击排名工具)
  • 《帝友 P2P 网络借贷系统》
  • 10分钟学会python写游戏脚本!Python其实很简单
  • xp无法查看工作组计算机 服务没有启动,XP系统弹出“无法查看工作组计算机”提示怎么办?...
  • 创建Web服务器(保姆级教程)
  • 阿里云服务器连接内网操作
  • 史上最全三维建模软件汇总
  • 用gnome 入门 linux,Ubuntu入门基础----Gnome桌面介绍
  • wpkg.org 自动跳转解决方法
  • PCB封装绘制时的摆放方向
  • 微信的账号连接服务器失败怎么回事,微信无法连接到服务器的原因和6个解决方法...
  • button执行onclick函数_【JavaScript】函数
  • 基于java+ssm+vue的小说阅读器微信小程序
  • 用C语言实现一个圣诞树!(超简单详细)全部源码分享
  • Android 2023最新最全面性能分析工具介绍(非常详细)从零基础入门到精通,看完这一篇就够了(附安装包)
  • 软件测试工具:11类41款主流测试工具盘点
  • 零基础程序员自学编程的6种方法,你知道吗?
  • 计算机领域的学术会议等级排名
  • horizontalBar标签在柱形内显示
  • symantec病毒服务器的部署及配置
  • 3、QT制作个人资料界面
  • editplus发布3.01 Build 446 Final版(附下载及中文版)