Java基础(二)
线程、进程、程序的基本概念
- 进程:进程是系统资源分配的基本单位,动态。
- 线程:线程是程序执行的基本单位,动态。
- 程序:是含有指令和数据的文件,静态代码。
线程的基本状态
状态名称 | 说明 |
---|---|
NEW | 初始状态,线程被构建,但是还没有调用start()方法 |
RUNNABLE | 运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行中” |
BLOCKED | 阻塞状态,表示线程阻塞于锁 |
WAITING | 等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断) |
TIME_WAITING | 超时等待状态,该状态不同于WAITING,它是可以在指定的时间自行返回的 |
TERMINATED | 终止状态,表示当前线程已经执行完毕 |
Java线程状态变迁
final关键字
final关键字主要用在三个地方:变量、类、方法
- 对于一个
final
变量,如果是基本数据类型的变量,其数值一旦初始化,之后就不能更改;如果是引用类型的变量,则其初始化后就不能让其指向另一个对象。 - 当用
final
修饰一个类,表示这个类不能被继承。fianl
类中的所有成员方法都会被隐式地指定为final方法。 - 使用
final
修饰方法的原因有两个:- 把方法锁定,以防任何继承类修改它的含义。
- 提高效率(早期Java版本)。
Java中的异常处理
Java异常类层次结构图
Error(错误):是程序无法处理的错误,表示运行应用程序中较严重的问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM出现的问题。
Exception(异常):是程序本身可以处理的异常。
错误和异常的区别:异常能被程序本身处理,错误是无法处理的。
异常处理总结
- try块:用于捕获异常,后可接0个或多个catch快,如果没有catch块,则必须跟一个finally块。
- catch块:用于处理try块捕获到的异常。
- finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally块将在方法返回之前被执行。
finally块不会被执行的情况:
- 在finally块第一行发生了异常。
- 在前面的代码中用了
System.exit(int)
退出程序。 - 程序所在线程终止。
- 关闭CPU。
Java序列化中如果有些字段不想进行序列化
对这些变量,使用transient关键字修饰,只能修饰变量,不能修饰类和方法。
Java中IO流
IO流分类
- 按流向:输入流、输出流
- 按操作单元:字节流、字符流
- 按流的角色:节点流、处理流
BIO、NIO、AIO
- BIO(Blocking I/O):同步阻塞I/O模式,数据的读写必须阻塞在一个线程内等待其完成。使用
Socket
和ServerSocket
。适用于低负载、低并发。 - NIO(Non-blocking/New I/O):同步非阻塞I/O模型,对应
java.nio
包,提供Channel
、Selector
、Buffer
等抽象。它支持面向缓冲的,基于通道的I/O操作方法。使用SocketChannel
和ServerSocketChannel
。适用于高负载、高并发。 - AIO(Asynchronous I/O):NIO 2,异步非阻塞I/O模型,基于事件和回调机制,应用操作之后会直接返回,不会阻塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。
浅复制、深复制
- 浅复制:对基本数据类型进行值传递,对引用数据类型进行引用专递般的复制,这就是浅复制。
- 深复制:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,这就是深复制。