5.3.3 枚举类型
public enum Season
{
a,b,c,d;
}
5.3.4 抽象类
abstract class A
- 抽象类必须被继承,与final类相反
- 可以定义一个统一的编程接口
- 抽象类定义所有子类共用的抽象方法,实现细节由子类完成
5.3.5 接口
- Java不支持多继承
接口的声明
- [修饰符] interface In1 [extends 父接口名]{ 接口体;}
- 接口只能包含常量定义和抽象方法定义
接口的实现
- class A implements In1, In2
- 0 or all: 所有方法都要实现
- 接口中声明方法可省略public和abstract,但在实现的时候,要有public修饰
接口作为类型的使用
接口与abstract类的比较
- 接口中只能有常量,只能有abstract方法
5.4 内部类
- 内部类不能声明静态变量和静态方法
- 外部类可以用内部类声明对象
- 声明方法:直接声明、new
- 内部类可以作为其他类的成员
5.5 数组
- 数据类型相同
- 数组是引用类型,java中的数组属于对象的成员变量
5.5.1 一维数组
- 声明+初始化?
int Arr[] = {1,2,3}
5.5.2 二维数组
数组的复制
- java.lang.System类提供了静态方法arraycopy()
static void arraycopy(Object src, int srcPos, Obj dest, int destPos, int length)
6 异常和断言
6.1 异常概述
- 所有异常必须是Throwable类的实例或其子类
- throw一个异常:生成一个异常对象并把它提交给运行时系统的过程
- catch一个异常:运行时系统从生成异常的方法开始回溯,直到找到包含相应异常处理的方法
6.2 异常的处理
try{}
catch(){}
catch(){}
finally{}
- 异常总是在方法内产生
- 若一个方法产生了异常,而不处理异常,则可以在方法声明时,用throws抛出异常,传递给其调用者或更高一级的调用者,直到被捕获。
自定义异常
class 自定义异常名 extends Exception{
}
throw new 异常类名();
finally语句
- finally语句总是在return之前执行
6.3 断言
-
断言主要用于程序开发和测试阶段
-
打开断言
java -ea:com.mydx.mylib...
-
系统级打开断言
-esa
-
关闭断言
java -da:com.mydx.mylib...
-
系统级关闭断言
-dsa
7 输入输出及文件操作
7.1 流的概念
- java.io和java.lang处理输入输出
标准的I/O流
-
键盘:stdin
-
监视器:stdout
-
每当main方法被执行,就自动生成下述三个类的对象:
- System.in: extends InputStream
- System.out: extends PrintStream
- System.err: extends PrintStream
-
java.io 有字节流和字符流
-
字节流extends InputStream或OutputStream
-
字符流extends Reader和Writer
7.2 文件
- File是io包中的非流类
- File的构造方法
随机文件流
- RandomAccessFile implemennts DataInput DataOutput
- RandomAccessFile类仅限操作文件
- RandomAccessFile类有个文件指针
- RandomAccessFile常用方法
- RandomAccessFile常用方法都会抛出IOException异常
raf1.write(name.getBytes());
raf1.writeInt(age);
raf1.close;
7.3 字节流
- 字节流extends InputStream或OutputStream,两个都是抽象类
InputStream
- read()
数据流
数据流类可处理字节和字节数组,还可以实现对文件不同数据类型的读写
- DataInputStream和DataOutputStream分别实现了接口DataInput和DataOutput
- 方法:
readInt() readByte() writeBoolean() writeChar()
- 构造方法:
DataInputStream(InputStream in)
DataOutputStream(OutputStream out)
- DataInputStream和DataOutputStream的类方法
文件流
FileInputStream
- 构造方法:
FileInputStream f0 = new FileInputStream("/a.txt");
File f = new File("/a.txt");
FileInputStream f1 = new FileInputStream(f);
FileOutputStream
- FileOutputStream类的对象创建不依赖于文件是否存在,没有就创建
- FileNotFoundException异常:无法创建、打开
- 利用数据流向文件中写数据
int[] myArr = {1,2,3}
DataOutputStream doc = new DataOutputStream(new FileOutputStream("ints.dat"))
for ()
dos.writeInt(myArray[i])
内存的读写
ByteArrayInputStream ByteArrayOutputStream
字符流
FileReader
FileWriter
- FileWriter打开一个只读文件,引发IOException
缓冲流
- BufferedReader和BufferedWriter类
BufferedReader
- 构造方法
BufferedReader(Reader in)
BufferedWriter
- 构造方法
BuffeiwedWriter(Writer out, int bufSize)
Scanner类
- java.lang包的System类有in和out
Scanner reader = new Scanner(System.in)
之后调用reader的各种方法,实现读取用户在命令行输入的各种数据
7.5 对象流
ObjectInputStream和ObjectOutputStream类
- 构造方法
ObjectInputStream(InputStream in)
- 实现了接口ObjectXput,是XputStream的子类
- 通常用FileXputStream对象作为参数创建ObjectXputStream对象,之后用readObject()/writeObject()方法
- readObject()返回类型为Object
可串行化
- java中,只有可串行化的对象才能通过对象流进行传输
- 只有实现了Serializable接口的类才能被串行化
- Serializable接口不包含任何方法
7.6 过滤流
字符过滤流
- 其他过滤流都是FilterReader/FilterWriter的子类
- FilterReader/FilterWriter都被定义为abstract,但它们没有抽象方法。abstract的作用是强制二者不能被实例化,必须被继承,
7.7 管道
- 连接方法:
- 构造
- connect
7.8 不同流的速度比较
- 内存映射>缓冲>文件>RandomAccessFile
Java I/O流的其它应用
8 线程
8.1 线程的概念
- 进程是程序的一次动态执行过程