您的位置 首页 java

JAVA进阶知识学习-day05 异常&多线程

一、异常

1.1 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致 JVM 的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。

1.2 异常体系:异常机制其实是帮助我们找到程序中的问题,异常的根类是 java .lang.Throwable ,其下有两个子类:java.lang.Error与java.lang. Exception ,平常所说的异常指 java.lang.Exception。

Error:无法通过处理的错误,只能事先避免,好比绝症。

Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒、 阑尾炎

1.3 Throwable中的常用方法:

public void printStackTrace() :打印异常的详细信息,包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace。

public String getMessage() :获取发生异常的原因。提示给用户的时候,就提示错误原因。 public String toString() :获取异常的类型和异常描述信息(不用)。

1.4 异常分类:

1、编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)

2、运行时期异常: runtime 异常。在运行时期检查异常,在编译时不报错(如数学异常)

二、异常的处理

2.1 在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。 throw用在方法内, 用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

2.1.1 throw使用格式: throw new 异常类名(参数);

2.1.2 throw使用举例:

throw new NullPointerException(“要访问的arr数组不存在”);

throw new ArrayIndexOutOfBoundsException(“该索引在数组中不存在,已超出范围”);

2.2 Objects非空判断:

public static T requireNonNull(T obj) :查看指定引用对象是不是null,如果为null则抛出异常。

2.3 声明异常throws:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须通过 throws 进行声明,让调用者去处理。 关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。

2.3.1 throws使用格式:

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

2.3.2 throws代码演示:

JAVA进阶知识学习-day05 异常&多线程

2.3.2 throws使用注意事项:

1、throws用于进行异常类的声明,若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。

2.4 捕获异常try…catch

2.4.1 使用格式:

JAVA进阶知识学习-day05 异常&多线程

2.4.2 使用举例:

JAVA进阶知识学习-day05 异常&多线程

2.5 finally 代码块:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。

2.5.1 使用格式:

JAVA进阶知识学习-day05 异常&多线程

2.5.2 注意事项:finally不能单独使用。

2.6 异常注意事项

2.6.1 多个异常使用捕获又该如何处理呢? 一般我们是使用一次捕获多次处理方式,格式如下:

JAVA进阶知识学习-day05 异常&多线程

注意事项:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

2.6.2 运行时异常被抛出可以不处理。即不捕获也不声明抛出。

2.6.3 避免在finally中使用return语句。

2.6.4 父类抛出什么异常,子类就抛出什么异常。

三、自定义异常

3.1 什么是自定义异常类: 在开发中根据自己业务的异常情况来定义异常类。

3.2 异常类如何定义:

1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。

2. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。

3.3 自定义异常类的练习

定义一个登陆异常类RegisterException:

JAVA进阶知识学习-day05 异常&多线程

四、多线程

4.1 并发与并行:

并发:指两个或多个事件在同一个时间段内发生(交替发生)。

并行:指两个或多个事件在同一时刻发生(同时发生)。

4.2 线程与进程

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。

线程 :线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程。

4.3 线程调度:

分时调度:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

抢占式调度 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

4.4 创建线程类

4.4.1 Java使用 java.lang.Thread 类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用实际上就是执行一段顺序执行的代码。

4.4.2 Java中通过继承Thread类来创建并启动多线程的步骤如下:

1. 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把 run()方法称为线程执行体。

2. 创建 Thread 子类的实例,即创建了线程对象

3. 调用线程对象的start()方法来启动该线程

4.4.3 代码演示:

文章来源:智云一二三科技

文章标题:JAVA进阶知识学习-day05 异常&多线程

文章地址:https://www.zhihuclub.com/182994.shtml

关于作者: 智云科技

热门文章

网站地图