JAVA基础学习总结,day16(异常)

异常

概述:指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常运行
注意:

  1. 在java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。java处理异常的方式是中断处理。
  2. 异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行

异常的体系:
Throwable异常的顶层类,是java语言中所有错误或异常的父类
Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症
例如:内存泄漏,数据库崩溃
Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的,

异常的分类:
编译异常:在编译期间出现的异常,编译异常如果编译期间不处理,是通不过编译的
除了RuntimeException及其子类都是表示的编译异常
运行异常:在运行期间出现的异常,运行异常如果编译期间不处理,可以通过编译的 RuntimeException及其子类都是表示运行异常

异常的产生过程解析:

  1. 创建异常对象,封装异常的信息
  2. throw抛出异常
  3. JVM接收异常,并发送异常到控制台,终止程序运行

java异常处理的五个关键字:try、catch、finally、throw、throws

throw关键字
概述:在java中,提供一一个throw关键字,它用来抛出一个指定的异常对象
格式:
throw new 异常类名(参数);
位置:
throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行

throws关键字
第一种处理异常的方式:声明处理异常
声明异常:将问题标识出来,报告给调用者。
如果方法内通过throw抛出了编译时异常而没有捕获处理,那么必须通过throws进行声明,让调用者去处理

关键字throws运用于方法声明 之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)

声明异常格式:
修饰符 返回值类型 方法名(参数)throws 异常类名1,异常类名2…{ }

注意事项:

  1. throws用于进行异常类的声明,若该方法可能有多重异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开
  2. 如果方法需要使用throws抛出多个异常来处理异常,假设这多个异常是父子类关系,那么就可以直接抛父类异常

try…catch
捕获异常:java中对异常有针对性的语句进行捕获,可以堆出现的异常进行制定方式的处理
格式:
try{
编写可能出现异常的代码
}catch(异常的类型 变量名){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常

注意:

  1. try和catch都不能单独使用,必须连用
  2. 如果try中的代码出现了异常,那么try中出现异常位置后面的代码就不会执行了
  3. 如果try中的代码出现了异常,程序还是会继续往下执行,如果throws抛出异常的方式处理异常,出现异常之后会终止程序的运行
  4. 如果try中的代码出现了异常,那么就会执行catch中的代码,如果try中的代码没有出现异常,那么就不会执行catch后面的代码,不管try中是否出现异常,程序都都会继承往下执行

Throwable类中定义了一些查看方法
public String getMessage() :获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。
public String toString() :获取异常的类型和异常描述信息(不用)。
public void printStackTrace() :打印异常的跟踪栈信息并输出到控制台。

多个异常使用捕获又该如何处理呢?

  1. 多个异常分别处理
  2. 多个异常一次捕获,多次处理
  3. 多个异常一次捕获,一次处理

finally关键字
概述:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行 不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。
格式:
try{
编写可能出现异常的代码
}catch(异常的类型 变量名){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}finally{
//正常情况永远都会执 一般写释放资源的代码

异常注意:

  1. 运行时异常被抛出可以不处理。即不捕获也不声明抛出。
  2. 如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集。
  3. 父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
  4. 当多异常处理时,捕获处理,前边的类不能是后边类的父类
  5. 在try/catch后可以追加finally代码块,其中的代码一定会被执行,通常用于资源回收。
  6. 如果finally有return语句,永远返回finally中的结果,避免该情况.

并行:指两个或多个事件在同一时刻发生(同时发生)
并发:指连个或多个事件在同一个时间段内发生

线程:其实就是进程的最小可执行单元
进程:其实就是应用程序可执行单元,.exe文件

结论:一个应用程序可以有多个进程,一个进程可以有多条线程
注意 :一个java程序就只有一个进程,而一个进程一次只能执行一条线程,所以在java中只有多线程并发
线程调度:随机调度,JVM采用的是抢占式调度,没有采用分时调度, 因此可以能造成多线程执行结果的的随机性。

多线程并行:多条线程同时执行
多线程并发:多条线程同时请求执行,但是CPU一次只能执行一个线程,所以只能随机交替执行,这个就是多线程并发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值