day18Java-常用对象Exception-异常概述
常用对象Exception-异常概述
异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将 受影响.在程序中的意思就是:
异常:指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处 理异常的方式是中断处理。
异常体系
异常机制其实是帮助我们找到程序中的问题,异常的根类是 java.lang.Throwable ,其下有两个子类: java.lang.Error 与 java.lang.Exception ,平常所说的异常指 java.lang.Exception 。
Throwable体系:
- Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。
- Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好 比感冒、阑尾炎。
异常分类
我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序
异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?
编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)
运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异 常)
编译时异常和运行时异常的区别
编译期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译
运行期异常:无需显示处理,也可以和编译时异常一样处理
java.lang.Throwable:类是 Java 语言中所有错误或异常的超类。
Exception:编译期异常,进行编译(写代码)java程序出现的问题
RuntimeException:运行期异常,java程序运行过程中出现的问题
异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序可以继续执行(吃点药,继续革命工作)
Error:错误
错误就相当于程序得了一个无法治愈的毛病(非典,艾滋).必须修改源代码,程序才能继续执行
-
编译期异常演示
编译期异常处理演示1(抛出异常)
抛出异常如果一直都不处理,最终会抛个jvm虚拟机来处理虚拟机处理就是中断程序,后面的代码执行不了,并把异常打印在控制台
public class ExceptionDemo {
public static void main(String[] args) throws ParseException {
//Exception:编译期异常,进行编译(写代码)java程序出现的问题
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//用来格式化日期
Date date = sdf.parse("2018-0909");//把字符串日期,分析成Date类型日期
System.out.println("后续代码未执行--"+date);
}
}
结果:
Exception in thread "main" java.text.ParseException: Unparseable date: "2018-0909"
at java.base/java.text.DateFormat.parse(DateFormat.java:388)
at com.ginger.demo01.ExceptionDemo.main(ExceptionDemo.java:16)
编译期异常演示2(自己处理异常)
自己处理异常使用try{}catch(){},出现异常后,后序代码可以正常运行。
public class ExceptionDemo {
public static void main(String[] args){
//Exception:编译期异常,进行编译(写代码)java程序出现的问题
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//用来格式化日期
Date date = null;
try {
date = sdf.parse("2018-0909");//把字符串日期,分析成Date类型日期
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);
System.out.println("后续代码已执行了");
}
}
结果:
java.text.ParseException: Unparseable date: "2018-0909"
at java.base/java.text.DateFormat.parse(DateFormat.java:388)
at com.ginger.demo01.ExceptionDemo.main(ExceptionDemo.java:18)
null
后续代码已执行了
-
运行期异常演示
运行期异常处理演示
运行期可能出现异常的代码也可以使用,try{}catch(){}来处理,后续可以照常执行
public class ExceptionDemo2 {
public static void main(String[] args) {
//RuntimeException:运行期异常,java程序运行过程中出现的问题
int[] arr = {1,2,3};
//System.out.println(arr[0]);
try {
//可能出现异常的代码
System.out.println(arr[3]);
}catch(Exception e){
//异常处理逻辑
System.out.println(e);
}
System.out.println("后续代码");
}
}
结果:
java.lang.ArrayIndexOutOfBoundsException: 3
后续代码
-
Error:错误演示
Error代码演示
public class ExceptionDemo {
public static void main(String[] args) {
/*
Error:错误
OutOfMemoryError: Java heap space
内存溢出的错误,创建的数组太大了,超出了给JVM分配的内存
*/
int[] arr = new int[1024*1024*1024];//OutOfMemoryError: Java heap space
//必须修改代码,创建的数组小一点
//int[] arr = new int[1024 * 1024];
}
}
结果:内存溢出
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at com.ginger.demo01.ExceptionDemo.main(ExceptionDemo.java:15)
Throwable类的常见几个方法
在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个对象抛出,和catch里面的类进行匹配。
如果该对象是某个类型的,就会执行该catch里面的处理信息。
public String getMessage():异常的消息字符串
public String toString():返回异常的简单信息描述
此对象的类的 name(全路径名)
": "(冒号和一个空格)
调用此对象 getLocalizedMessage()方法的结果 (默认返回的是getMessage()的内容)
printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。把信息输出在控制台。
代码演示
public class ExceptionDemo {
public static void main(String[] args) {
String date = "2018-0808";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
sdf.parse(date);
} catch (ParseException e) {
//e.printStackTrace();
//System.out.println(e.getMessage());Unparseable date: "2018-0808"
//System.out.println(e.toString());java.text.ParseException: Unparseable date: "2018-0808"
//System.out.println(e.getLocalizedMessage());Unparseable date: "2018-0808"
e.printStackTrace();
}
System.out.println("over");
/*
java.text.ParseException: Unparseable date: "2018-0808"
at java.base/java.text.DateFormat.parse(DateFormat.java:388)
at com.ginger.demo03.ExceptionDemo.main(ExceptionDemo.java:20)
over
*/
}
}
异常产生过程解析
上一篇: 1.PHP简介_PHP
下一篇: 有关色光的文章推荐10篇