zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【JAVA】对异常的理解及实例(不断学习,不断更新)。

JAVA实例异常学习 理解 不断 不断更新
2023-09-11 14:14:57 时间

一、理解异常

异常就是出错,系统会提示错误的信息。学习异常主要有两个目的:

1、一个是看懂JAVA(eclipce)中的异常错误信息,我们常称之为【程序报错】,如:下图,你得知道是啥意思,并且去调试错误解决问题。

2、为你做的软件用户防止用户输入错误和给出相应的友情提示。

比如我们在使用APP注册用户的时候,经常会出现输入身份证号不合规,姓名(张三,输入了张0)只有一个字或有数字等。

以下是一个非常简单的防止用户输入非法字符的代码:

package z_Demo;
import java.util.Scanner;
public class demo {

	public static void main(String[] args) {
		System.out.println("1 --- 大叔");
		System.out.println("2 --- 阿姨");
		System.out.println("3 --- 小朋友");
		System.out.println("4 --- 哥哥");
		System.out.print("请选择:");
		Scanner in= new Scanner(System.in);
		if(in.hasNextInt()) // 这里是检查和判断用户是否输入的是不是整数,因为用户有可能会输入字符A或1.1
		{
			System.out.println("您选择的是:"+in.nextInt());
		}
		else {
			System.out.println("您输入了非法值,请输入整数!");  // 如果是非法的,友情提示。而不是出现一堆系统错误。
		}
	}
}

如果不用if(in.hasNextInt())来判断,就会出现以下错误,作为你软件的用户就会对你的软件给差评了。

看看,淘宝的双11,当所有人都在用系统就会出现崩溃,如果崩溃,不可能显示一堆向上面图中的系统错误的乱码。因此,淘宝给出了很友好的界面。

二、异常错误的主要类型(这部分了解就行,如果出错了,再来这里看看是哪部分错误,不用死记硬背)

ArithmeticExecption(算数异常类)

NullPointerException(空指针异常类型)

ClassCastException(类型强制转换类型)

NegativeArrayException(数组负下标异常)

ArrayIndexOutOfBoundsException(数组下标越界异常)

SecturityException(违背安全原则异常)

EOFException(文件已结束异常)

FileNotFoundException(文件未找到异常)

NumberFormatException(字符串转换为数字异常)

SQLException(操作数据库异常)

IOException(输入输出异常)

NoSuchMethodException(方法未找到异常)

IndexOutOfBoundsExecption(下标越界异常)

SystemException(系统异常)

NegativeArraySizeException(创建一个大小为负数的数组错误异常)

NumberFormatException(数据格式异常)

SecurityException(安全异常)

UnsupportedOperationException(不支持的操作异常)

三、使用Try / Catch 的通用异常处理方法

package z_Demo;
import java.util.Scanner;
public class demo {

	public static void main(String[] args) {
		System.out.println("1 --- 大叔");
		System.out.println("2 --- 阿姨");
		System.out.println("3 --- 小朋友");
		System.out.println("4 --- 哥哥");
		System.out.print("请选择:");
		Scanner in= new Scanner(System.in);
		
		// ------------ 【try 和 catch】
		
		try  
		{
			// 如果系统不出错,就执行。
			System.out.println("您选择的是:"+in.nextInt());
		} catch (Exception e) {
			// 如果系统出错,从出错的那一行开始,就跳到这里执行。
			System.out.println("您输入了非法值,请输入整数!");
			System.out.println("----------- printStackTrace返回值-------------");
			 e.printStackTrace();  // 显示系统提示的堆栈信息错误,方便开发、测试时使用。用户的使用的软件不要加。
			 System.out.println("----------- getMessage返回值-------------");
			 System.out.println(e.getMessage()); // 获取出错的显示结果信息。
		}
	}
}

四、Try / Catch /  Finally

Finally,必须执行Finally中的代码,除非Catch中有System.exit(1);

package z_Demo;
import java.util.Scanner;
public class demo {

	public static void main(String[] args) {
		System.out.println("1 --- 大叔");
		System.out.println("2 --- 阿姨");
		System.out.println("3 --- 小朋友");
		System.out.println("4 --- 哥哥");
		System.out.print("请选择:");
		Scanner in= new Scanner(System.in);
		
		// ------------ 【try 和 catch】
		
		try  
		{
			// 如果系统不出错,就执行。
			System.out.println("您选择的是:"+in.nextInt());
		} catch (Exception e) {
			// 如果系统出错,从出错的那一行开始,就跳到这里执行。
			System.out.println("您输入了非法值,请输入整数!");
			System.exit(1); // 如果放开这一行代码,finally中的代码不会执行。
			
		}
		finally {
			// 不管是有没有错,都会执行。
			System.out.println("如需要客服帮助,请拨打电话XXXX-12345678!");
			
			//为什么要用这段代码呢?后期在连接数据库时,可以当数据库中断后,可以重新连接。 
			
		}
		
	}
}

四、Throw / Throws用法

抛出异常,新手可忽略,后期做项目时再翻回头理解也不晚。