一、理解异常
异常就是出错,系统会提示错误的信息。学习异常主要有两个目的:
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用法
抛出异常,新手可忽略,后期做项目时再翻回头理解也不晚。