异常
概念
异常体系
Throwable:Exception,Error
Exception:举例
1.DafeFormat中的parse方法导致的异常
2.索引越界异常
Error:
内存溢出异常
int[] a=new int(102410241024);创建数组空间超出了虚拟机的空间
- 异常产生过程的解析
异常的处理
- 提示
throw关键字
用在方法内–抛出一个指定的异常对象
- Objects非空判断–用来检测参数是否异常
- throwable定义的三个处理异常的方法
异常处理方式
throws关键字
跟在方法名后—后续代码不会执行–中断处理
捕获异常try_catch语句
后续代码 继续执行
- finally代码块
- 异常处理注意事项
- 多个异常分别处理—多个try_catch
- 多个异常一次捕获,多次处理—一个try多个catch
注意事项:
- 多个异常一次捕获一次处理
eg:
- 运行时异常可以不处理或抛出,直接给JVM虚拟机处理
自定义异常类
多线程
- 并发与并行
- 线程和进程:
1.进程:一个内存中运行的应用程序------进入到内存的程序叫进程
2.线程:是进程中的一个执行单元
一个程序运行后至少有一个进程,一个进程中可以包含多个线程 - 线程调度
- 主线程
- 创建线程类:
java.lang.Thread - 创建线程的方式
1.创建Thread类的子类 - 多次启动一个线程是非法的
eg:
public class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("run"+i);
}
}
}
public class Demo1 {
public static void main(String[] args) {
//创建多线程
MyThread myThread=new MyThread();
myThread.start();
for (int i = 0; i < 2; i++) {
System.out.println("main"+i);
}
}
}
//结果,调试时结果为先run后main
main0
main1
run0
run1
run2
run3
run4
run5
run6
run7
run8
run9
run10
run11
run12
run13
run14
run15
run16
run17
run18
run19
2.实现Runnable接口:好
public class MyThread2 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
public class Demo2 {
public static void main(String[] args) {
//创建多线程
MyThread2 myThread=new MyThread2();
Thread thread=new Thread(myThread);
thread.start();
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
- 继承Thread和实现Runnable的区别
线程
Thead类
- 多线程原理
- 多线程内存图
- Thread类的常用方法:
1.获取线程名称:
A使用Thread类中的方法getName()
String getName() --返回此线程的名称。
B可以先获取到当前正在执行的线程,使用线程中的方法getName()获取线程的名称
static Thread currentThread()-- 返回对当前正在执行的线程对象的引用。
即String name=Thread.currentThread().getName()
2.设置线程名称(了解)
Avoid setName(String name) —将此线程的名称更改为等于参数 name 。
B构造方法Thread(String name) --分配一个新的 Thread对象。
3.sleep方法:
static void sleep(long millis) --使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。
eg:模拟秒表 - 匿名内部类实现线程的创建:
eg:
匿名内部类创建线程
//匿名内部类创建线程
public class Demo3 {
public static void main(String[] args) {
//实现Thread类
new Thread(){
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}.start();
//实现Runnable接口
new Thread(new Runnable(){
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}).start();
}
}