java异常

------------------------------------------------------------------------------

什么是异常

在java程序运行时,常常会出现一些非正常的现象,java需要显式的告诉别人程序出问题了,此时就会抛出(throw)错误或异常。java程序中所有抛出的非正常现象都必须从Throwable派生而来。类Throwable有两个直接子类:Error和Exception,就是错误和异常。

错误:一般来说,最常见的错误有程序进入死循环,内存泄露等。这种情况下,程序运行时本身无法解决,只能通过其他程序干预。java对应的类为Error类。Error类对象由java虚拟机生成并抛弃(通常java程序不对这类异常行为进行处理)。

异常:异常是程序执行时遇到的非正常情况或意外行为。以下这些情况一般都可以引发异常:代码或调用的代码中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(常见的有数组下标越界,算法溢出,除数为0,内存溢出等)。这种情况不像错误类那样,程序运行时本身可以解决,由异常处理代码调整程序运行方向,使程序仍可以继续运行,直至正常结束。

RuntimeException代表运行时由java虚拟机生成的异常。其他则为非运行时异常。java编译器要求程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理(其实有少量运行时异常编译器也要求必须处理,如InterruptedException)。

运行时异常称为runtime exception,是从java.lang.RuntimeException派生出来的。非运行时异常又称为checked exception,是从java.lang.Exception派生出来的。

我们可以自定义异常对象,使得抛出的异常更有针对性。其往往是从exception派生出来的。


异常关键字

try catch throw throws finally

其中throw用于方法内部,用来抛出一个Throwable类型的异常。如果抛出的是非运行时异常,则必须在方法定义的部分声明该方法可能向外抛出的异常,该方法的调用者也必须处理抛出的异常。或者在方法内部用try catch捕获这个异常。如果所有方法都层层向外抛出异常,最终JVM会处理,就是打印异常消息和堆栈信息。

throws关键字用在方法声明部分,用来声明方法可能会抛出的异常。


最后来做一道题来检验一下刚才学到的知识。

下面4段代码中,哪些编译不能通过?

程序1

import java.io.*;

public class Testing {

	public static void main(String[] args) {

		try {
			test();
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

	static void test() {
		try {
			throw new Exception("test");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

}

程序2

import java.io.*;

public class Testing {

	public static void main(String[] args) {

		try {
			test();
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

	static void test() {
			throw new Exception("test");
	}
}

程序3

import java.io.*;

public class Testing {

	public static void main(String[] args) {

		try {
			test();
		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

	static void test() throws Exception {
			throw new Exception("test");
	}
}

程序4

import java.io.*;

public class Testing {

	public static void main(String[] args) {

		try {
			test();
		} catch (IOException ex) {
			ex.printStackTrace();
		}

	}

	static void test() throws Exception {
	}
}

答案 :2和4不能通过编译。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值