JAVA13-异常、线程、同步、等待与唤醒案例、线程池、Lambda表达式
1.异常
异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在
1.1.Java程序中的意思就是:
1)异常** :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
2)在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。
3)异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.
1.2.异常体系-java中异常本身是一个类,有一个顶级的类 Throwable(可扔的)
异常机制其实是帮助我们**找到**程序中的问题,异常的根类是`java.lang.Throwable`,其下有两个子类:`java.lang.Error`与`java.lang.Exception`,平常所说的异常指`java.lang.Exception`。
**Throwable体系:**说明
1)Error**:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。
2)Exception**:表示异常,也称之为编译器异常(写代码出现的),异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒、阑尾炎,Exception**:还有一个RuntimeException子类(也叫运行期异常)
是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。相当于程序遇到小问题,处理掉就可以继续执行。
1.3.1处理编译器Exception异常的两种做法:
1).抛出异常,交给虚拟机处理,就如同使用使用日期格式化这个类,缺点是一旦parse值与我们格式化的模式不一致(比方说少dd日子),就会出错parse解析异常,且程序不会继续执行
parse方法是将字符串的日期,解析为Date格式的日期。
1 public class Demo05StaticField { 2 public static void main(String[] args) throws ParseException { 3 // Exception**:表示异常,也称之为编译器异常(写代码出现的),异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处 4 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 5 Date date = sdf.parse("1999-09-11");// 此处出现的错误,一般抛出去throws ParseException 6 System.out.println(date); 7 } 8 }
2.)抓取异常:try{可能出现的异常代码块}catch{异常的处理机制}程序会继续执行
抓取异常之运行期异常,RuntimeException,比方说取索引数据越界
try{
可能出现的异常代码块
}catch(Exception e){
异常的处理机制}程序会继续执行
}
1 2 public class Demo05StaticField { 3 public static void main(String[] args) { 4 int[] arr = {10,20,30}; 5 System.out.println(arr[3]);// 异常java.lang.ArrayIndexOutOfBoundsException: 3 6 // 如何处理呢 7 try{// 可能出现异常的代码 8 System.out.println(arr[3]); 9 }catch(Exception e){// 异常处理的逻辑 10 System.out.println(e); 11 12 } 13 System.out.println("后续代码"); 14 } 15 }
1.3.2处理Error错误的方式:必须修改源代码,
比方说定义数组arr空间过大,出现ava.lang.OutOfMemoryError异常
如果赋值再乘以1000,更多会出现NegativeArraySizeException异常
1 public class Demo05StaticField { 2 public static void main(String[] args) { 3 int[] arr = new int[1000*1000*1000]; 4 System.out.println("后续代码"); 5 } 6 }
1.3.4 异常产生的过程进行解析
2 异常的处理
java中异常处理的5个关键字 try catch finally throw throws