ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 里的异常(Exception)详解

2022-10-31 14:36:43  阅读:225  来源: 互联网

标签:javaJDK java 虚拟机 布局 数据 代码 程序


一, 什么是java里的异常

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

1.1 c语言里的错误

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

.

我们实现1个程序的过程包括, 代码编写, 编译代码成为程序, 执行程序. .
        其中大部分常见的语法错误都会被编译代码这样部过滤掉.   但是即使通过了编译. 执行程序这一步可能还是会有错误. 其中大部分常见的语法错误都会被编译代码这样部过滤掉. 但是即使通过了编译. 执行程序这一步可能还是会有错误.
        原因很多, 例如常见的除数为0,    内存溢出(数组的index超出界限), 或者内存被其他程序修改等. 原因很多, 例如常见的除数为0, 内存溢出(数组的index超出界限), 或者内存被其他程序修改等.
        最简单的例子: 最简单的例子:
#include <stdio.h>

int f(int a, int b){
	return a/b;
}	

int main(){
	int i = f(8,0);
        printf("i is %d
",i);
	return 0;	
}


#include int f(int a, int b){ return a/b; } int main(){ int i = f(8,0); printf("i is %d ",i); return 0; }
       上面的例子编译时是无错的,  但是一旦执行就会提示吐核错误了.  上面的例子编译时是无错的, 但是一旦执行就会提示吐核错误了.
       c语言里对这种执行时出现的错误是无能为力的,  一旦出错就会整个程序崩溃, 就不会在继续执行下面的代码. c语言里对这种执行时出现的错误是无能为力的, 一旦出错就会整个程序崩溃, 就不会在继续执行下面的代码.
       而且很多时候出错信息很少, 让你无法判断出错的原因和地方, 只能一步步小心debug... 而且很多时候出错信息很少, 让你无法判断出错的原因和地方, 只能一步步小心debug...
       所以很多用c写的程序有时会出现非法关闭的现象. 所以很多用c写的程序有时会出现非法关闭的现象.
       解决方法只能是在代码里对可能出错的地方添加if 判断. 解决方法只能是在代码里对可能出错的地方添加if 判断.
       例如f()函数里可以对b进行判断, 如果是0就不执行. 例如f()函数里可以对b进行判断, 如果是0就不执行.

1.2 java里运行时出现的错误

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

class Exp1{
	public int f(int a, int b){
		return a/b;
	}
}

public class Expt_1{
	public static void g(){
		Exp1 e = new Exp1();
		int i = e.f(8,0);
		System.out.printf("i is %d
", i);
	}
}
      运行时一样会出错, 下面是出错信息: 1.2 java里运行时出现的错误 java里编译器对代码的规范性比c严格得多. 但是即使如此, 通过编译的java程序有时也很难避免执行时出错. 例如, 将上面的c程序改编成java程序: package Exception_kng; class Exp1{ public int f(int a, int b){ return a/b; } } public class Expt_1{ public static void g(){ Exp1 e = new Exp1(); int i = e.f(8,0); System.out.printf("i is %d ", i); } } 运行时一样会出错, 下面是出错信息:
[java] Caused by: java.lang.ArithmeticException: / by zero
     [java] 	at Exception_kng.Exp1.f(Expt_1.java:5)
     [java] 	at Exception_kng.Expt_1.g(Expt_1.java:12)
     [java] 	at Enter_1.main(Enter_1.java:31)
          但是可以见到, java告诉你出错的类型: 运算错误(ArithmeticExcetion), 出错信息和出错的类与文件行数输出, 方便你调试.  jvm虚拟机是会对错误作出一定的处理的. [java] Caused by: java.lang.ArithmeticException: / by zero [java] at Exception_kng.Exp1.f(Expt_1.java:5) [java] at Exception_kng.Expt_1.g(Expt_1.java:12) [java] at Enter_1.main(Enter_1.java:31) 但是可以见到, java告诉你出错的类型: 运算错误(ArithmeticExcetion), 出错信息和出错的类与文件行数输出, 方便你调试. jvm虚拟机是会对错误作出一定的处理的.
          所以可以简单地将java里的异常理解成java运行时出现的错误,  异常机制就是对这种错误进行处理的机制. 所以可以简单地将java里的异常理解成java运行时出现的错误, 异常机制就是对这种错误进行处理的机制.

1.3 java异常的定义

1.3 java异常的定义
        实际上, 当java程序执行时出现错误时, jvm会把执行时出错的信息(例如出错原因, 类型, 位置) 收集,然后打包成为1个对象(object),  程序员可以对这种对象进行处理. 这种对象就是所谓的异常. 实际上, 当java程序执行时出现错误时, jvm会把执行时出错的信息(例如出错原因, 类型, 位置) 收集,然后打包成为1个对象(object), 程序员可以对这种对象进行处理. 这种对象就是所谓的异常.
        可能出现的异常的代码并不是肯定会出现异常, 取决于执行环境和数据.! 可能出现的异常的代码并不是肯定会出现异常, 取决于执行环境和数据.!

二, java里的异常的分类.

见下图: 见下图:
                       Throwable Throwable
                      /                 /
              Error             Exception Error Exception
                 /                   /               / /
         xxxxxx             xxxxxx          RuntimeException xxxxxx xxxxxx RuntimeException
                                                          /                   /
                                                     xxxxxx             ArithmeticException 二, java里的异常的分类. 见下图: Throwable / Error Exception / / xxxxxx xxxxxx RuntimeException / xxxxxx ArithmeticException
上图的所有对象都是类.      上图的所有对象都是类.
Throwable 代表是可抛出的. Throwable 代表是可抛出的.
Error            代表的是严重错误,  这种错误程序员无法进行处理, 例如操作系统崩溃, jvm出错, 动态链接库失败等.  Error并不是异常, 不是本文的重点. Error 代表的是严重错误, 这种错误程序员无法进行处理, 例如操作系统崩溃, jvm出错, 动态链接库失败等. Error并不是异常, 不是本文的重点.
Exception    代表的就是异常了.  它下面很多派生类,   其中它的派生类也分两种, 一种是RuntimeException(运行时异常), 其他的都是非运行时异常 Exception 代表的就是异常了. 它下面很多派生类, 其中它的派生类也分两种, 一种是RuntimeException(运行时异常), 其他的都是非运行时异常
RuntimeException    包括除数为0, 数组下标超界等. 运行时异常的派生类有很多, 其产生频率较高.  它的派生类可以由程序处理或者抛给(throw) 给jvm处理. 例如上面的例子就是抛给了jvm处理, jvm把程序中断执行, 并把错误信息输出到终端上. RuntimeException 包括除数为0, 数组下标超界等. 运行时异常的派生类有很多, 其产生频率较高. 它的派生类可以由程序处理或者抛给(throw) 给jvm处理. 例如上面的例子就是抛给了jvm处理, jvm把程序中断执行, 并把错误信息输出到终端上.

标签:javaJDK,java,虚拟机,布局,数据,代码,程序
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有