-
举例:写一个空指针异常
1:声明一个引用类型,并且赋值为null
2:使用这个null变量调用方法或者属性,都会产生空指针异常 -
注意:异常信息,是JVM给程序跑出来的,我们程序员加try…catch…,是为了是代码能正常的执行下去
-
注意:如果你知道你的代码有可能报什么异常,那么就在catch中写一个具体的异常类型
-
注意:如果你自己写的异常没有和代码抛出的异常匹配,那么他就不会进到catch中,导致的结果及时,后面的代码也不能执行了
-
注意:如果你不知道的你的代码会报什么异常,那么干脆直接写Exception异常,记着在catch中吧打印异常信息的代码加上,便于程序员寻找错误原因
-
注意:如果有多个方法调用,其中一个方法出错了,异常会报好几个地方,我们找异常的时候,从控制台的由上而下来找
-
注意:方法连续调用,在堆栈异常数组中,你有几个方法,就有几条跟踪信息,一般数组中的第一个是它具体异常信息
-
异常堆栈信息
e.printStackTrace()
java.lang.NullPointerException
at com.sxt.day1217.exception1.Demo2.main(Demo2.java:18)
StackTraceElement[] 异常堆栈元素数组
String eName = e.getClass().getName(); //代表异常类名
String cName = el.getClassName(); //异常发生的java类的名字
String fName = el.getFileName(); //异常发生的java文件的名字
String mName = el.getMethodName(); //异常发生的方法名
int lineNum = el.getLineNumber();//异常发生的行数
String msg = e.getMessage();//异常原因
public class Demo2 {
public static void c(){
a();
}
public static void a(){
//int[] arr =null;
try {
System.out.println(10/0);
//NullPointerException
} catch (Exception e) {
StackTraceElement[] ste = e.getStackTrace();//
System.out.println(ste.length);
StackTraceElement el = ste[0];
String eName = e.getClass().getName(); //代表异常类名
String cName = el.getClassName(); //异常发生的java类的名字
String fName = el.getFileName(); //异常发生的java文件的名字
String mName = el.getMethodName(); //异常发生的方法名
int lineNum = el.getLineNumber();//异常发生的行数
String msg = e.getMessage();//异常原因
System.err.println(eName+" :"+msg+"\n\tat "+cName+"."
+mName+"("+fName+lineNum+")");
//System.out.println(ste.length);
//String mes = e.getMessage();//异常原因
//System.err.println(mes);
e.printStackTrace();
}
System.out.println("我可以执行吗?");
}
public static void main(String[] args) {
c();
}
}