异常
指程序运行的非正常情况
在java中是一个类,产生异常就是创建异常对象并抛出异常对象
不是语法错误 语法错误无法编译生成字节码文件
Throwable体系
在java.lang包中
两个子类:Error和Exception
Excepition
编译期异常,写代码时的异常
RuntimeException
运行期异常
异常处理后程序可以继续运行
Error
必须修改源代码才能运行
throw关键字
try catch finally throw throws
必须写在方法内部
new的对象必须是Exception或其子类对象
抛出异常对象后必须处理异常对象
若是runtimeException或其子类对象 可以不处理
若是编译异常,就必须处理该异常,要么throws,要么try...catch
工作中必须对方法传递进来的参数进行合法性检验,如果参数不合法,那就必须抛出异常,告知方法的调用者参数有异常问题
objects类中的非空判断requireNonNull方法
判断是否为null
声明异常throws
将异常交给别人处理
当方法中抛出异常时,会把异常对象声明给方法的调用者处理
注意
throws关键字必须写在方法声明处
throws关键字后边声明的异常必须是Exception或者是Exception的子类
方法内部如果抛出多个异常,那么throws后面也必须声明多个异常
如果抛出的异常有父子类关系,则声明父类异常即可
调用一个声明抛出异常的方法,我们就必须处理声明的异常
要么继续用throws声明抛出,交给方法的调用者处理,最终交给JVM
要么try...catch自己处理异常
Throwable中的三个方法
getMessage
toString
printStackTrace
finally代码块
不能单独使用,必须和try一起使用
一般用于资源释放,无论是否出现异常,最后都要资源释放
注意事项
多个异常处理
多个异常分别处理
多个异常一次捕获,多次处理
多个异常一次捕获一次处理
如果finally中有return语句,永远返回finally中的结果
子类重写父类方法时,可以抛出父类相同的异常/父类抛出异常的子类/不抛出异常
父类方法没有抛出异常时,子类重写父类该方法时也不可抛出异常
此时子类产生异常,只能捕获处理try catch,不能声明抛出
自定义异常
格式:public class XXXException extends Exception/RuntimeException{}
一般以Exception结尾
必须继承Exception/RuntimeException
继承Exception必须处理
继承RuntimeException交给编译器处理
异常类的构造方法一般继承父类L
多线程
并发和并行
并发:指两个事件或多个事件在同一个时间段内发生 交替执行
并行:指两个事件或多个事件在同一时刻发生 同时进行
线程和进程
进程:是指一个内存中运行的应用程序 需要进入内存
线程:是进程中的一个执行单元 一个进程中至少有一个进程
多线程的好处
效率高
多个线程之间互不影响
线程调度
分时调度 所有线程轮流使用cpu的使用权 平均分配每个线程占用cpu的时间
抢占式调度 让优先级高的 线程使用CPU 如果线程的优先级相同 那么会随机选择一个(java使用)
主线程:执行主方法的线程
创建多线程的第一种方式:创建Thread类的子类