栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java异常

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java异常

首先我们要了解java异常体系结构图

java异常体系

Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。

其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,  这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

1、Error与Exception

(1)Error是程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

(2)Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。

2、运行时异常和非运行时异常

(1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

(2)非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

try、catch、finally

try---catch:如果代码运行出现了错误,那么执着catch,但不能影响后边代码运行

public static void main(String[] args) {
		int[] a = new int[5];
		try {
			for (int i = 0; i <10; i++) {
				a[i] = i;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		System.out.println("----------------");
	}

throws:向外抛出异常,让之后一个接受到该异常的方法区处理

public static void main(String[] args) {
		
		Test test = new Test();
		try {
			test.run();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("--------------");
		
	}
	
	public void run() throws CloneNotSupportedException {
		this.sun();
	}
	
	public void sun() throws CloneNotSupportedException {
		User user01 = new User();
		User user02 = user01.clone();
		System.out.println(user01);
		System.out.println(user02);
		user01.ChangedPerson("李四");
		System.out.println(user01.getPerson());
		System.out.println(user02.getPerson());
	}

 try、catch、finally三个语句块应注意的问题

    (1)try、catch、finally三个语句块均不能单独使用,三者可以组成 try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个。

    (2)try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。

    (3)多个catch块时候,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会再执行其它的catch块,且匹配catch语句的顺序为从上到下,也可能所有的catch都没执行。

    (4)先Catch子类异常再Catch父类异常。

finally的作用:

(1)无论try所指定的程序块中是否抛出异常,或者catch语句的异常类型是否与所抛弃的异常的类型一致,finally中的代码一定会得到执行

(2)finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够度程序的状态做统一管理

(3)通常finally语句中可以进行资源的清除工作

throws和throw

定义一个方法的时候可以使用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。

throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常上传,谁调用我我就                   抛给谁。(用在方法声明后面,跟的是异常类名;可以跟多个异常类名,用逗号隔开 ;                 表示抛出异常,有该方法的调用着来处理;throws表示出现异常的一种可能,并不以定                   会发生这些异常)

throw:用来抛出一个具体的异常类型(用在方法体内,跟单是异常对象名;只能抛出一个异常对              象名,表示抛出异常,由方法体内的语句处理,throw则是抛出了异常,执行throw则一定                抛出了某种异常)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711799.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号