Java中异常发生时代码执行流程
异常与错误:
  异常:
  在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它。Java中使用异常类来表示异常,不同的异常类代表了不同的异常。但是在Java中所有的异常都有一个基类,叫做Exception。
  错误:
  它指的是一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。错误是VM的一个故障(虽然它可以是任何系统级的服务)。所以,错误是很难处理的,一般的开发人员(当然不是你)是无法处理这些错误的,比如内存溢出。 和异常一样,在Java中用错误类来表示错误,不同的错误类代表了不同的错误。 但是在Java中所有的错误都有一个基类,叫做Error。
  综上,我们可以知道异常和错误最本质的区别就是异常能被开发人员处理而错误时系统本来自带的,一般无法处理也不需要我们程序员来处理。
  1.一个异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的运行
  2.错误,偏离了可接受的代码行为的一个动作或实例
  异常的结构分类:
  1、运行时异常(未检查异常)
  2、编译时异常(已检查异常)
  运行异常即是RuntimeException;其余的全部为编译异常
  在Java中异常Exception和错误Error有个共同的父类Throwable。
  Error Exception
  runtimeException几个子类
  1、 java.lang.ArrayIndexOutOfBoundsException
  数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
  2、java.lang.ArithmeticException
  算术条件异常。譬如:整数除零等。
  3、java.lang.NullPointerException
  空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的
  属性、计算null对象的长度、使用throw语句抛出null等等
  4、java.lang.ClassNotFoundException
  找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出
  该异常。
  对异常的处理:
  try{}catch{}
  try{}catch{}finally{}无论有无异常finally代码块都会被执行
  try{}finally{}也是可以组合使用的但是catch{}finally{}不可以
  注意:在继承关系中,子类覆盖父类的方法,抛出异常的范围不能比父类更宽泛
  异常的使用
  在异常的使用这一部分主要是演示代码,都是我们平常写代码的过程中会遇到的(当然只是一小部分),抛砖引玉吗!
下面这个例子主要通过两个方法对比来演示一下有了异常以后代码的执行流程。
public class Exception1 {
    public static void testException1() {
        int[] ints = new int[] { 1, 2, 3, 4 };
        System.out.println("异常出现前");
        try {
        System.out.println(ints[4]);
        System.out.println("我还有幸执行到吗");// 发生异常以后,后面的代码不能被执行
        } catch (IndexOutOfBoundsException e) {
        System.out.println("数组越界错误");
        }
        System.out.println("异常出现后");
        }
    public static void main(String[] args) {
        testException1();
    }
}
运行结果:
异常出现前
数组越界错误
异常出现后
public class Exception2 {
    public static void testException2() {
        int[] ints = new int[] { 1, 2, 3, 4 };
        System.out.println("异常出现前");
        System.out.println(ints[4]);
        System.out.println("我还有幸执行到吗");// 发生异常以后,他后面的代码不能被执行
        }
    public static void main(String[] args) {
        testException2();
    }
}
运行结果:
异常出现前Exception in thread "main" 
java.lang.ArrayIndexOutOfBoundsException: 4
	at Exception2.testException2(Exception2.java:6)
	at Exception2.main(Exception2.java:11)
总结:首先指出例子中的不足之处,IndexOutofBoundsException是一个非受检异常,所以不用try...catch...显示捕捉,但是我的目的是对同一个异常用不同的处理方式,看它会有什么不同的而结果(这里也就只能用它将就一下了)。异常出现时第一个方法只是跳出了try块,但是它后面的代码会照样执行的。但是第二种就不一样了直接跳出了方法,比较强硬。从第一个方法中我们看到,try...catch...是一种"事务性"的保障,它的目的是保证程序在异常的情况下运行完毕,同时它还会告知程序员程序中出错的详细信息(这种详细信息有时要依赖于程序员设计)。
Java中异常发生时代码执行流程的更多相关文章
- 第一章 Java代码执行流程
		
说明:本文主要参考自<分布式Java应用:基础与实践> 1.Java代码执行流程 第一步:*.java-->*.class(编译期) 第二步:从*.class文件将其中的内容加载到内 ...
 - Java 代码执行流程
		
Java 代码执行流程 类加载过程 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 类加载时机:代码使用到这个类时 验证阶段 &qu ...
 - 《Java基础复习》-控制执行流程
		
最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...
 - kbengine Unity3d demo 代码执行流程(4)
		
当服务端成功启动,客户端链接服务端后进入demo中的游戏界面,demo中的功能包括注册.登录.角色管理.战斗.场景等等. 对于新接触kbengine的人,看见客户端的代码后会觉得很迷茫,有些无从下手. ...
 - 如何在Java中调用Python代码
		
有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...
 - 5.1JAVA基础复习——JAVA中的静态代码块、构造代码块、构造函数、局部代码块区别
		
构造代码块: 在类中定义可以给所有对象进行初始化.局部代码块: 在方法中定义属性的生命周期.静态代码块: 在类中定义用于给类调用时属性的初始化 构造函数与构造代码块的区别: 构造函数是给对应的对象进行 ...
 - 在Java中调用Python代码
		
极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...
 - debian内核代码执行流程(三)
		
接续<debian内核代码执行流程(二)>未完成部分 下面这行输出信息是启动udevd进程产生的输出信息: [ ]: starting version 175是udevd的版本号. 根据& ...
 - java中如何生成可执行的jar文件
		
java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$ ...
 
随机推荐
- Android-Java-面向对象的代码例子
			
需求一:用手机打电话,发短信,看视频,听音乐,用面向对象思想实现: package android.java.oop01; /** * 1.既然是面向/面对 --> 对象 就要把 (用手机打电话 ...
 - java 注释annotation学习---两篇不错的blog
			
深入理解Java:注解(Annotation)自定义注解入门 ---- http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 深入理 ...
 - 【转载】Configure the max limit for concurrent TCP connections
			
转载地址:http://smallvoid.com/article/winnt-tcpip-max-limit.html To keep the TCP/IP stack from taking al ...
 - C# 读取资源文件.resx 中的xml资源
			
主要是以字符串的形式来读取xml,然后通过遍历读取节点,通过节点属性名称获取属性值 /// <summary> /// 初始化OPC参数配置 /// </summary> // ...
 - 使用xftp连接到ftp服务器即常见问题的解决
			
使用xftp连接到ftp服务器 新建连接 配置连接 点击确定,连接到ftp 常见问题 中文乱码问题 解决: 点击连接设置按钮 修改编码方式 最后确定保存!刷新一下,就不在乱码了;
 - ASP.Net MVC OA项目笔记<一>
			
1.1.1 新建空白解决方案CZBK.ItcastOA 1.2.1 添加类库 1.2.2 同上添加多个类库 生成的 class1.cs先不用删除,删了的后,后面可能没办法直接点引用 1.3.1 添加表 ...
 - JQuery -  on绑定多个事件
			
一.jquery为多个选择器绑定同一个事件 $("#start,#end").on("click",function(){ alert("The pa ...
 - 对"某V皮"N服务器节点的一次后渗透测试
			
i春秋作家:jasonx 前言:由于这个VPN节点服务器是之前拿到的,一直没时间做进一步渗透,昨天看到我蛋总表哥发红包,然后我运气爆表抢了个运气王,再加上好久没发文章了,所以就抽空测试下咯. 0×01 ...
 - GoLang学习之数据类型
			
数据类型 Go语言按类别有以下几种数据类型: bool,一个字节,值是true或者false,不可以用0或者1表示 int/uint(带符号为与不带符号位的int类型):根据平台不同是32位或者64位 ...
 - pinnet 计算云分区
			
fdisk /dev/xvdemne mnlEnterEnter 9G-98G-98G-478M-28G-28G-28G mw #设置文件格式mkfs -t ext4 /dev/xvde5mkfs - ...