Java基础(九)——异常

代码运行期间出现问题阻止当前方法或作用域的情况就是异常
Java就将一些异常信息封装为一个类
当出现异常时,就会创建异常对象并抛出异常的信息

Throwable

Java中的所有异常类都继承于Throwable类。
Throwable主要包括两个大类,一个是Error类,另一个是Exception类;
Error比Exception更严重,不易通过后续代码处理和修复

Error类

Error包括虚拟机错误和线程死锁	
Error类:程序在运行期间发生的某种错误,没有具体的处理方式
Error一般是系统级别的问题,我们无法处理,只能修正代码

Exception类

Exception类:在编译器或运行期出现异常,我们对异常进行处理,程序就可以继续运行
Exception主要包括两大类,非检查异常/运行时异常(RuntimeException)
						检查异常(其他的一些异常)
异常的关键字throw
抛出异常:在方法中 throw new 异常对象,必须是Exception或其子类
				在方法头 throws 异常类名

throws表示出现异常的一种可能性,并不一定会发生这些异常;
throw抛出了异常,则一定抛出了某种异常对象

异常调用原则:如果该功能内部可以处理就用try,处理不了就用throws
异常的处理:
			try{
					可能出现异常的代码
			}catch(异常类名 变量名	){
				异常的处理
			}finally{
				必须执行的代码
			}
			
catch可以有多个,finally可以没有
多个catch块处理的异常类,要按照先catch子类异常后catch父类异常的处理方式
只会执行一个catch语句块,能明确异常名的尽量明确,不能明确用Exception
不管有没有出现异常或者try...catch中有return,finally块中代码都会执行
finally中最好不要包含return,否则程序会提前退出

注意:try里面的代码越少越好,它会占用JVM的资源

return值为-1为抛出异常的习惯写法

方法:
	public String getMessage():异常的消息字符串
	public String toString():返回异常的简单信息描述--> 
							此对象的类的name(全路径名) + 
							“: ”(冒号和1个空格) + 
							调用此对象getLocalizedMessage()方法的结果
							(默认返回getMessage()的内容)
	public void printStackTrace():获取异常类名和异常信息,
								以及异常信息在程序中出现的位置,
								返回值void,把信息输出在控制台

非检查异常

RuntimeException与其子类
在程序运行期间出现的异常导致程序意外终止

System.exit(0);正常结束程序,终止当前正在运行的虚拟机
System.exit(1);异常结束程序
调用 System.exit(n) 实际上等效于调用: 
 Runtime.getRuntime().exit(n)
public static void main(String[] args) {
		try {
			get(null);
		} catch (Exception e) {
			System.out.println(e);
			// java.lang.NullPointerException: 对象不存在
		} finally {
			System.out.println("发不发生异常都会执行");
			// 发不发生异常都会执行
		}

	}

	//public static void get(String s) throws NullPointerException {
	public static void get(String s) {
		if (s == null) {
			throw new NullPointerException("对象不存在");
		}
	}
对于运行时异常,方法上无需throws,调用者也无需处理
运行期异常一旦发生,程序就会终止,需要程序员修改源代码

子类继承父类时,不能抛出比父类更大的异常(继承关系上)
如果父类抛出多个异常,子类不能抛出父类没有的异常
父类方法没有抛出异常,子类重写后也不能抛出异常;
如果有异常发生,只能try...catch捕获这个异常 

检查异常

除了Error,RuntimeException及其子类以外,
其他的Exception类及其子类都属于可查异常。
程序编译期间出现的异常
这种异常的特点是Java编译器会检查它,
必须处理,你不会处理,编译就无法通过

自定义异常

public class TooSmallException extends RuntimeException {

	public TooSmallException() {
		super();
	}

	public TooSmallException(String message) {// 错误信息
		super(message);
	}
}

public static void main(String[] args) {
		try {
			get(1);
		} catch (TooSmallException e) {
			System.out.println(e);
			//e.printStackTrace();
		} 
	}

	public static void get(int i) {
		if (i < 100) {
			throw new TooSmallException("数值过小异常");
		}
	}

发布了30 篇原创文章 · 获赞 0 · 访问量 359

猜你喜欢

转载自blog.csdn.net/qq_31241107/article/details/104217000