浅谈Java的异常处理机制

Java的异常处理

今天来聊一下Java的异常处理机制,因为我也是初学者,并没有理解的那么深刻,所以有什么错误的话,还请多多指教。我将用五部分来解释我所理解的Java异常。

一、异常是怎么出现的
public class Test {
	public static void main(String[] args) {
		//写一个会报错的语句
		String str = null;
		System.out.println(str.length());
	}
}

运行结果
首先我们可以看到控制台出现的:Exception in thread “main”,它是告诉我们异常信息的来源,是发生在main线程中。
然后,后面发现一个拥有描述能力的异常信息,java.lang.xxxxx一个类,这个类是干嘛用的呢?是负责给你打印null指针异常出现的时候,红色的异常信息。

二、用什么来描述异常

写错的每一个出现异常信息的代码,都会有一个类来进行描述,而且异常信息描述类全部以Exception结尾。
Exception:它是所有异常的根类(root)
异常信息描述类:NumberFormatException,NullPointerException等等。

三、用什么来处理异常
try catch finally
public class Test {
	public static void main(String[] args) {
	
		try {
			//写一个会报错的语句
			String str = null;
			System.out.println(str.length());
		} catch (NullPointerException e) {
			System.out.println("空指针异常");
			e.printStackTrace();//打印红色异常的方法
		}
	}
}

在这里插入图片描述
若try语句里面还有其他的错误的话,可以用多个catch来捕获,例如:

public class Test {
	public static void main(String[] args) {
	
		try {
			// 会报NullPointerException错误
			String str = null;
			System.out.println(str.length());
			// 会报NumberFormatException错误
			String str1 = "aaa";
			int res = 1 + Integer.parseInt(str1);
			System.out.println(res);
		} catch (NullPointerException e) {
			System.out.println("空指针异常");
			e.printStackTrace();
		} catch (NumberFormatException e) {
			System.out.println("类型转换异常");
			e.printStackTrace();
		}
	}
}

若你不知道会报什么错误,也可以使用Exception这个父类来捕获异常。

try {
	// 会报NullPointerException错误
	String str = null;
	System.out.println(str.length());
	// 会报NumberFormatException错误
	String str1 = "aaa";
	int res = 1 + Integer.parseInt(str1);
	System.out.println(res);
} catch (Exception e) {
	System.out.println("所有异常");
	e.printStackTrace();
}

在这里插入图片描述
而finally是不管有没有异常都会执行的语句,如:

try {
	// 会报NullPointerException错误
	String str = null;
	System.out.println(str.length());
	// 会报NumberFormatException错误
	String str1 = "aaa";
	int res = 1 + Integer.parseInt(str1);
	System.out.println(res);
} catch (Exception e) {
	System.out.println("所有异常");
	e.printStackTrace();
} finally {
	System.out.println("最后执行的语句");
}

在这里插入图片描述

四、用什么来抛出异常
throws

首先建立一个Utils类

public class Utils {
	// throws Exception 方法中所有的异常抛出给调用者进行处理
	public void method() throws Exception{
		
		// 会报NumberFormatException错误
		String str1 = "aaa";
		int res = 1 + Integer.parseInt(str1);
		System.out.println(res);
	}
}

在Test类里面来调用

public class Test {
	public static void main(String[] args) {
		
		Utils u = new Utils();
		u.method();
	}
}

在这里插入图片描述
这里就需要你trycatch一下了, 如果你不想再次trycatch的话,也可以throws给调用它的类,但是这个是main方法,没有什么可以调用main方法,所以只能trycatch一下啦。
在这里插入图片描述
这里的throws可以打一个比方,这样更好利于理解。
就像一个人,他生病了,去看医生, 把自己抛给了医生,此时呢,医生就有两个方案,一个就是自己的能力够用,自己能给病人看病,这就相当于用trycatch,另一个方案,就是自己的能力不够,需要一个更有能力的大神,把病人抛给大神,这就相当于再次throws。

throw
public class Test {
	public static void main(String[] args) {
		
		throw new RuntimeException("随时随地抛出异常");
	}
}

在这里插入图片描述至此就结束了,谢谢观看,如有什么错误的话,还请多多指教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章