Java学习Day12
2019-09-26 本文已影响0人
JayMeWangGL
今日学习内容总结
- 异常
- Thread多线程
异常
- 指的是程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止
throw关键字:
- 可以使用throw关键字在指定的方法中抛出指定的异常
- 使用格式:throw new xxxException(“异常产生的原因”)
- 注意:
1、throw关键字必须写在方法的内部
2、throw关键字后边new的对象必须是Exception或者Exception的子对象
3、throw关键字抛出指定的异常对象,我们就必须处理这个异常对象 - 格式:
throw new NullPointerException("要访问的arr数组不存在");
throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");
public static void main(String[] args) {
int[] arr =null;
method(arr,0);
int[] a ={1,2,3,4,5};
method(a,6);
}
public static void method(int[] arr,int index){
if (arr==null){
throw new NullPointerException("数组为空");
}
if(index>arr.length){
throw new ArrayIndexOutOfBoundsException("索引越界");
}
}
throws声明异常
- 在方法声明时使用
- 使用格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
try...catch捕获异常
try{
编写可能会出现异常的代码
}catch(异常类型 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
- 注意:
1、try中可能会抛出多个异常对象,那么就可以使用多个catch来处理
2、如果try中产生了异常,那么就会执行catch的异常处理逻辑
try {
System.out.println(arr[0]);
}
catch (Exception e){
System.out.println("数组中无数据");
}
Throwable类
Throwable类中定义了一些查看方法:
-
public String getMessage()
:获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。
-
public String toString()
:获取异常的类型和异常描述信息(不用)。 -
public void printStackTrace()
:打印异常的跟踪栈信息并输出到控制台。
finally
finally的语法:
- try...catch....finally:自身需要处理异常,最终还得关闭资源。
注意:
- finally不能单独使用,必须和try一起使用
- finally一般用于资源释放
- 如果finally中有return语句,则永远返回finally中的数据
自定义异常类
格式:
public class XXXException extends Exception | RuntimeExcept{
添加一个空参数构造方法
添加一个包含错误信息的构造方法
}
示例:
public class RegisterException extends Exception{
public RegisterException() {
}
public RegisterException(String message) {
super(message);
}
}
public class RegisterMain {
static String[] user = {"张三","赵四"};
public static void main(String[] args) throws RegisterException {
String name = new Scanner(System.in).next();
for (String n : user) {
if(n.equals(name)){
throw new RegisterException("已存在");
}
}
System.out.println("注册成功!");
}
}
多线程
并发与并行
- 并发:指两个或多个事件在同一时间段内发生
- 并行:指两个或多个事件在同一时刻发生(同时发生)
线程与进程
- 进程:指一个内存中正在运行的应用程序
- 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
线程调度
-
分时调度
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
-
抢占式调度
优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。
创建多线程
第一种方式:
- 1、创建一个Thread类的子类
2、在Thread的子类中重写Thread类中的run方法,设置线程任务
3、创建Thread类的子类对象
4、调用Thread类中的方法start方法,开启新的线程,执行run方法public class myThread extends Thread{ @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println("run:"+i); } }
}
~~~java
public class MyThreadDemo {
public static void main(String[] args) {
myThread myThread = new myThread();
myThread.start();
for (int i = 0; i <20 ; i++) {
System.out.println("main:"+i);
}
}
}