字节流和字符流的区别是什么?
字节流:字节流的抽象基类为 InputStream (输入流) 和 OutputStream(输出流)
- 常见的子类有
FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream等 - 通过
read()方法读取一个字节,返回值为 0 - 255 之间的整数 - 使用
write(int b)方法写入一个字节,操作的基本单位是字节(byte)- 一个字节为 8 位(bit),能处理所有类型的数据,像图片、音频、 视频等二进制文件
字符流:字符流的抽象基类为 Reader(输入流)和 Writer(输出流)
- 常见的子类有
FileReader、FileWriter、BufferedReader、BufferedWriter等 - 通过
read()方法读取一个字符,返回值为 0 - 65535 之间的整数; - 使用
write(int c)方法写入一个字符,操作的基本单位是字符(Character)- 一个字符通常由 2 个字节组成(在 Java 中采用 Unicode 编码),主要用于处理文本数据
接口和抽象类的区别是什么?
抽象类:用于描述类的共同特征和行为,可以有成员变量、构造方法和具体方法
接口:用于定义行为规范,可以多实现,只能有常量和抽象方法(Java 8 以后可以有默认方法和静态方法)
两者的区别:
- 实现方式:实现接口的关键字为 implements,继承抽象类的关键字为 extends
- 一个类可以实现多个接口,但一个类只能继承一个抽象类
- 方法方式:在接口中只能定义,不能有方法的实现(JDK8后可以定义default方法体);而抽象类中的方法可以定义并实现
- 访问修饰符:接口成员变量默认为
public static final,必须赋初值,不能被修改,其所有的成员方法都是public abstract的;;抽象方法被 abstract 修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号 - 变量:抽象类可以包含实例变量和静态变量;而接口只能包含常量(静态常量)