对象和封装
简述类的封装的定义,具体步骤和优点?
-
定义:隐藏类的一些具体实现,通过提供一些接口来实现一些功能,将类的状态信息影藏在类的外部,不允许在类的外部直接访问,而是通过这个类提供的一些方法来对属性进行操作以及访问。
-
步骤:修改属性的可见性来限制对属性的访问;为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的存取;在赋值方法中,加入对属性的存取控制语句。
1. 好处:
- 控制存取属性值的语句来避免对数据的不合理的操作
- 一个封装好的类,是非常容易使用的
- 代码更加模块化,增强可读性
- 影藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据。
简述构造方法的作用和特点?
- 与返回值类型无关(没有返回值类型)
- 方法名和类名必须相同
- 分为有参构造和无参构造
- 作用:给声明的属性直接赋值
- 构造方法不能被继承
- 在没有声明有参构造的情况下,系统会默认提供一个无构造方法如果声明了有参数构造,那么系统就不在提供无参构造
什么是方法重载?
- 方法名相同
- 与返回值类型和访问修饰符无关
- 参数的类型、顺序和个数至少有一个不一样
- 方法重载必须在同一个类中
- 可以是构造方法的重载,也可以是普通方法的重载
如何实现类的封装?
- (封装的具体步骤):修改属性的可见性来限制对属性的访问:为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的存取;在赋值方法中,加入对属性的存取控制语句。
- 封装的好处:影藏类的实现细节;让使用者只能通过程序规定的方法来访问数据;可以方便地加入存取控制语句,限制不合理操作。
访问修饰符权限的区别?
- private:成员变量和方法 只能在其定义的类中被访问,具有类可见性。
- default:成员变量和方法只能被同一个包里的类访问,具有包可见性。
- protect:可以被同一个包中的类访问,被同一个项目中不同包中的子类访问(父类、子类)。
- public:可以被同一个项目中的所有类访问,具有项目可见性,这是最大的访问权限。
面向对像设计的过程是什么?
- 发现类
- 发现类的属性
- 发现类的行为
成员变量和局部变量的区别?
- 成员变量在整个类的内部都可以使用,可以直接声明不赋值(系统会默认提供初始值)。
- 布局变量只能在方法体内部使用,并且声明的同时需要直接赋值(系统不会默认提供初始值)。
this关键字的作用?
- 可以调用属性
- 可以调用方法
- 可以调用构造方法,但是必须在构造方法中的第一行。
- 可以相互调用
static修饰符关键字
-
可以修饰:变量,方法,代码块。
- static修饰的方法体中的变量必须是静态的变量
- 静态的变量可以使用类名直接调用
- 修饰的方法和代码块中必须是静态的变量
- 静态代码块自动加载,并且在第一行输出
- 普通方法(示例方法)不能有静态的变量。
类class和对象object两个概念的理解?
- 类是对某一类事物的描述,是抽象、概念上的定义。对象是实际存在的、具体的事物个体。类和对象就好比模具和铸件的关系,建筑物图样和建筑物实体的关系。
继承
如何继承一个类?
//通过extends关键字来继承类。
public class Penguin extends pet{
//类定义部分
}
使用继承有什么优点?
继承好处:避免代码的冗余,减少重复代码
- 继承:子类继承父类
- private:修饰的属性和方法子类不能继承
- public:修饰的属性和方法子类可以被继承
访问修饰符的权限?
- private:在同一个类下才可以访问
- 默认的(friendly):同一个包下可以访问
- Protected(受保护的):在具有继承关系下的不同包中可以访问
- Public:整个项目都可以访问
方法重写
- 不在同一个类中,在具有继承关系的子类下
- 方法名相同
- 方法的参数列表必须相同(个数,顺序,类型三者必须相同)
- 与返回值类型无关
- 访问修饰符不能严于父类
- 访问修饰符不能严于父类(范围要比父类更大,列如:父类是protected,子类只能是protected或者public)
- 构造方法不能被继承,所以也不能被重写
重载(overloading)和重写(overriding)有什么区别?
- 重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型,访问修饰符无关。
- 重写涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同(或是其子类)、访问修饰符不能严于父类。
多重继承关系下的执行顺序?
- 实列化子类对象时候,如果不直接赋值,会用无参构造,并且先执行父类的无参构造,再执行子类的无参构造。
- 实列化子类对象时候,如果直接赋值,也会默认先调用父类的无参构造,再执行子类的有参构造。
- 综合:无论子类是有参还是无惨都会默认调用父类中的无惨构造(前提是子类的有参构造没有调用父类的有参构造)。
- 如果父类中只有有参构造,那么系统不会默认给父类提供无参构造,则子类的有参构造必须调用父类的有参构造(super关键字去调用)。
方法重载
- 在同一个类中
- 方法名相同
- 与返回值类型无关
- 跟访问修饰符无关
- 方法的参数列表不同(个数,顺序,类型三者有一个不同即可)
抽象类:abstract?
- 作用:限制实列化(不让抽象类进行创建对象),一般将父类设置为抽象类
- 抽象类中既有抽象方法,也可以有普通方法(实列方法)
- 抽象方法:public abstract void show();只有方法声明,没有方法实现,没有方法体。
- 子类继承抽象类,必须重写父类的抽象方法
- 抽象方法必须在子类中被实现,除非子类是抽象类
- public abstract class student{ }
final作用:
- finally修饰类,该类不能被继承。
- finally修饰方法,方法不能被子类重写。
- finally修饰的变量,变量变常量,只在实列化时被赋值一次,不能再次被赋值。
抽象类和抽象方法的特点?
- 抽象方法没有方法体
- 如果一个类有抽象方法,那这个类必须定义为抽象类。
- 抽象类可以有抽象方法和非抽象方法。
- 抽象类不能new对象。
- 继承抽象类,就必须重写抽象类里的所有抽象方法。
this和super的区别?
-
this:当前对象的引用
- 调用子类的成员变量
- 调用子类的成员方法
- 在子类的构造方法第一行调用子类其他构造方法
-
super:子类对象的引用
- 调用父类的成员变量
- 调用父类的成员方法
- 在子类的构造方法第一行调用父类的构造方法
java 继承extends子类继承父类
java:只支持单个继承
多态
什么是多态?
-
多态是继封装、继承后,面向对象的第三大特征。实现实物经常会体
现出多种形态。可以理解成,对象的多种形态。 -
多态存在三个必要条件。
- 要有继承。
- 要有重写。
- 父类引用指向子类对象。
使用多态有什么优势?
- 可替换性:多态对已存在代码具有可替换性。
- 可扩展性:多态对代码具有可扩展性。
- 接口性:多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
- 灵活性:它在应用中体现了灵活多样的操作,提高了使用效率。
- 简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
实现多态有哪几种方式?
-
接口多态性
-
继承多态性
-
通过抽象类实现的多态性。
- 使用父类作为方法形参实现多态
- 使用父类作为方法返回值类型实现多态
- 多态:父类的一个引用可以指向多个子类对象
//(1)、向上转型(父类作为返回值类型,小转大)
Pet pet = new Dog();
//(2)、父类作为参数(主人喂养宠物)
public void feed(Pet pet){
Dog dog = (Dog)pet
dog.show();
}
//(3)、父类作为方法的返回值
public Pet getPet(String typeid){
Pet pet = null;
if(typeid.equals("1")){
pet = new Dog();
}else if(typeid.equals("2")){
pet = new Penguin();
}
return pet;
}
面向对象的三大特征是什么?
封装、继承、多态、有时还会加上抽象
简述多态的概念?子类和父类之间转换时遵循的规则?
-
多态:是具有表现多种形态的能力的特征。
-
子类转换成父类(向上转型):
- 将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换。
-
父类转换成子类(向下转换):
- 将一个指向子类对象的父类引用赋给一个子类引用,称为向下转换,此时必须进行强制类型转换。
接口
如何编写接口?
//语法
修饰符 interface 接口名 extends 父接口{
//常量定义
//方法定义
}
class 类名 父类名 implements 接口{
//类成员
}
说明:
- 接口的命名规则与类名相同
- 接口中可以定义常量,不能定义变量
- 接口中的属性都是全部静态常量,接口中的常量必须在定义时指定初始值。
- 接口中所有方法都是抽象方法。接口中的方法都会自动用public abstract修饰,即接口中只有全部抽象方法。
- 和抽象类一样,接口中不能有构造方法。
- 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
- 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
接口有哪些特征?
- 接口本质上是一种抽象类
- 接口中的方法都是抽象方法
- 接口中没有构造方法和普通方法
- 接口不能示例化
- 接口可以多实现(实现类可以实现多个接口)
- 接口中的属性都是静态常量(省略了static和final)
- 抽象类不能用final修饰
什么是接口?
- 接口可以看作一种特殊的抽象类。
- 接口表示一种能力(体现在方法),还是一种约定(体现在方法的注释上)
通过面向接口编程的特征?
- 可以降低代码间的耦合性,提高代码的可扩展性可维护性。
为什么需要接口?
- 在项目中,有一些功能,不仅仅是一个类去实现,既有很多地方法用到,大家需要统一标准。所以需要用接口,这样大家同时实现一个接口,就能够统一规范。在接口中只是定义了基本的方法名,具体的实现交给实现类。
- 使用接口好处:代码简洁,实现可以多样化并且维护成本低,降低代码的耦合性。
怎么实现抽象类,抽象方法方法?
//语法
public abstract class Door{
//方法体
public abstract void open();
public abstract void close();
}
异常
什么是异常?
-
异常处理,英文名为exception 是编程语言或计算硬件里的一种机制,用于处理软件或信息系统中出现的异常状况,即超出程序正常执行的某些特殊条件。
- 异常处理的好处?
- 因为异常发生的时候,元订的执行流程就无法继续,异常处理可以让程序这种情况下继续往下执行。提高用户体验度。
-
异常处理一般用在哪里?
- 使用者(包括用户、代码库使用者)所引发的错误的,都需要用过异常机制来处理。
在java中如何进行异常处理?
try{
File file = new File("d:/txt");
if( ! File.Exists())
file.createNewFile();
}catch (IoException e){
}
public class Main {
public static void main(String[] args) {
try {
createFile();
} catch (Exception e) {
// TODO: handle exception
}
public static void createFile() throws IOException{ // 抛出异常
File file = new File("d:/a.txt");
if(!file.exists())
file.createNewFile();
}
}
如何使用log4j记录日志?
使用步骤:
- 导入jar包(右键项目properties—>java build path—>Libraries—>Add External JARS)
- 创建log4j.properties文件
- 编写日志代码
- 在程序中添加日志代码
java的异常处理通过哪几个关键字来实现的?
- try catch finally throw throws
异常执行顺序?
- 先try 若无异常直接到finally
- 先try 若有异常执行catch,然后在finally
- 无论哪种情况都会执行finally(唯一不执行finally的情况是 System.exit(1))
- 如果在catch中有return 则顺序是
- try—>catch—>finally—>return
声明异常
throws NullPointerException(空指针异常)
指在方法名后面声明的异常,不进行异常捕获,
谁调用该方法,则由调用者捕获异常,若调用者也不进行异常捕获
最后由java虚拟机进行捕获
手动抛出异常
throw new Exception(“性别只能是男或女”)
写出常见的异常?
- NullPointerException(空指针异常)
- ArrayIndexOutOfBoundsException(数组下标越界异常)
- ArithmeticException(算术错误,除零异常)
- ClassNotFoundException(加载不到所需要的类异常)
- ClassCastException(对象强制转换异常)
- InputMismatchException(输入不合法异常)
结合框架
为什么出现集合类?
- 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,java就提供了集合类。
数组和集合类同是容器,有何不同?
- 数组虽然也可以存储对象,但长度是固定的,集合长度是可变得。
- 数组中可以存储基本数据类型,集合只能存储对象。
集合类的特点?
集合只用于存储对象集合长度是可变的集合可以存储不同类型的对象。
集合的使用步骤?
- 创建集合对象
- 创建元素对象
- 把元素添加到集合
- 遍历集合
java集合框架包含哪些内容?
- 三大块内容,对外的接口、接口的实现和对象集合运算的算法。
- 接口:表示结合的抽象数据类型,如Collection、List、Set、Map、lterator。
- 实现:集合框架中接口的具体实现,如ArraYList、LinkedList、HashMap、HashSet。
- 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,如查找、排序。
java的集合框架共有三大类接口他们有什么共同点?
- 两大类接口:Collection和Map。Collection又有两大子接口:List和Set。
- 三大接口:List、Set和Map都是集合接口,可以存储对象。
区别:
Collection接口存储一组不唯一(允许重复)、无序的对象。
Set接口继承Collection接口,存储一组唯一(不允许重复)、无序的对象。
List接口继承Collection接口,存储一组不唯一(允许重复)、有序(以元素插入的次序来放置元素,不会重新排列)的对象。
Map接口存储一组成对的键-值,提供key(键)到value(值)的映射、Map中key不要求有序,不允许重复、Value同样不要求有序,但允许重复。
Iterator接口是负责定义访问和遍历元素的接口。
List、Set、Map的区别?
List 和 Set 是存储单列数据的集合,Map 是存储键和值这样的双列数据的集合;List 中存储的数据是有顺序,并且允许重复;Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的,Set 中存储的数据是无序的,且不允许有重复,但元素在集合中的位置由元素的 hashcode 决定,位置是固定的(Set 集合根据 hashcode 来进行数据的存储,所以位置是固定的,但是位置不是用户可以控制的,所以对于用户来说 set 中的元素还是无序的)。
HashMap、TreeMap、linkedHashMap的区别?
- HashMap提供了最快的访问技术,没有按照明显的顺序保存元素。
- TreeMap会按照比较结果的升序保存键。
- 按照插入键的顺序保存键,同时还保存了HashMap的保存速度。
ArrayList和LinkList的区别?
ArrayList
- 优点:get和set调用花费常数时间,也就是查询的速度快。
- 缺点:新项的插入和现有项的删除代价昂贵,也就是添加和删除的速度慢。
LinkList
- 优点:新项的插入和现有项的删除开销很小,即添加和删除的速度快。
- 缺点:对get和set的调用花费昂贵,也就是查询的速度慢。
Array和ArrayList的区别?
- ArrayList是Array的复杂版本。
- 储存的数据类型:Array只能储存相同数据类型的数据,而arrayList可以储存不同类型的数据。
- 长度的可变:Array长度是固定的,而ArrayList的长度是可变的。
数组转换成集合的方法,和集合转换成数组的方法:
- 数组转集合的方法:Arrays.asList(数组)(数组转换成集合后add和remove方法都不可以进行操作)。
使用Iterator遍历集合类
Iterator为集合而生,专本实现集合的遍历,他隐藏了各种集合实现类的内部细节,提供了遍历集合唯一编程接口。
在java中共有八个包装类:
Byte、Short、Integer、Long、Float、Double、Boolean、Character。
多线程
进程和线程的区别?
- 一个线程只属于一个进程,但是一个进程可以拥有多个线程,但至少一个线程
- 资源分配个进程,同一进程中所有线程共享该进程的所有资源。
什么是进程,什么是线程?
系统要做一件事,运行一个任务,所有运行的任务通常就是一个程序;
每个运行中的程序就是一个进程,这一点在任务管理器上面可以形象的看到。
当一个程序运行时,内部可能会包含多个顺序执行流,每个顺序执行流就是一个线程。
创建线程的方法有哪几种?
线程常用的创建方式,有两种
第一种是使用Runnable。第二种是继承Thread类型。
- 因为实现Runnable接口可以避免Java单继承的局限性。
当一个类继承了Thread,就不可以在继承其他类了。
而当一个类实现了Runnable,它一样可以继承其他类。
比如 class Demo extends SuperDemo implements Runnable{} - 更符合面向对象的设计。
run()方法的作用是用来封装线程要运行的代码。
那么run()方法所属的对象,就是线程任务对象。
Thread类的子类对象即使线程对象,又是线程任务对象。耦合性很强。
有了Runnable接口,可以将线程任务和线程进行解耦,
提高了程序的扩展性。
所以建议使用Runnable接口的方式完成线程的创建。
线程的生命周期可分为几个阶段,各是什么阶段?
线程整个生命周期,可以分为五个阶段。
- 分别是新建状态New
- 就绪状态Runnable
- 运行状态Running
- 堵塞状态Blocked和死亡状态Terminated。
线程的不同状态,表明了线程当前正在进行的活动
注意,线程只能从新建状态,转换到就绪状态,反之则不能
使用线程的什么方法可以设置线程休眠,线程的强制执行,线程的礼让?
- 调用线程的优先级:java线程有优先级,在同等情况下,优先级高的线程会获得较多的运行机会。Java线程的优先级用1~10的整数表示。
- 线程休眠:sleep(long millis)方法使线程转到堵塞状态。
- 线程的强制运行:join()方法可以强制某一线程运行。
- 线程礼让:yield()方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。
什么情况下需要进行线程的同步,线程同步有几种方式?
-
当多线程并发, 有多段代码同时执行时, 我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步。
-
如果两段代码是同步的, 那么同一时间只能执行一段, 在一段代码没执行结束之前, 不会执行另外一段代码。
多线程同步的方法一共有五个:- 使用synchronized 关键字构成同步方法。
- 使用synchronized 关键字构成同步代码块。
- 使用ReentrantLock类构成同步代码块。
- 使用volatile关键字修饰变量。
- 如果使用ThreadLocal对象管理变量。
进程的特点?
- 进程是系统运行的基本单位。
- 每一个进程都有自己的一块内存空间,一组系统资源。
- 每个进程的内部数据和状态都是完全独立的。
多线程的好处?
- 充分利用CPU的资源
- 简化编程模型
- 带来良好的用户体验
什么是多线程?
- 多线程就是指一个进程中同时有多个执行路径(线程)正在执行。
- 进程:是指在操作系统中正在运行的一个应用程序。
- 线程: 线程是指进程内独立执行某个任务的一个单元。
一个单CPU的机器,如何同时执行多个线程?请简述其原理。
单CPU的计算机中,CPU同时只能执行一条指令,因此,在仅有一个CPU的计算机上不可能同时执行多个任务。而操作系统为了能提高程序的运行效率,将CPU的执行时间分成多个时间片,分配给不同的线程,当一个时间片执行完毕后,该线程就可能让出CPU使用权限交付给下一个时间片的其他线程执行。当然有可能相邻的时间片分配给同一线程。之所以表面上看是多个线程同时执行,是因为不同线程之间切换的时间非常短,也许仅仅是几毫秒,对普通人来说是难以感知的,这样就看似多个线程在同时执行了。
start( )与run( )之间有什么区别?
- run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;直接执行run()方法不会启动多线程。
- start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;也就是说start()方法做了两件事情:启动线程和执行run()方法。
Java中Runnable和Callable有什么不同?
Runnable没有返回值;
Callable有返回值,通过对线程执行结果封装在一个Object里面,然后通过get获取该Object,实现有返回值方式;
Java线程池中submit() 和 execute()方法有什么区别?
submit()有返回值;
execute()无返回值;
Java中CyclicBarrier 和 CountDownLatch有什么不同?
CyclicBarrier(栅栏),用于阻塞多个线程,达到条件同时执行;
CountDownLatch(闭锁),用于等待多个操作执行完(比如多个线程)再执行某个动作(比如执行主线程);
底层都是基于AQS实现,AQS是一个基于volatile共享变量state,双端队列,线程的等待和唤醒共同实现的一个
同步器,典型的模板方法模式,是Java并发包的基础实现。
Java内存模型是什么?
Java内存模型是接机Java线程通信的基础,通过CPU #Lock指令实现线程副本和主内存更新机制,实现线程通信的方式等。
Java中的volatile 变量是什么?
volatile是轻量级的同步机制,具有内存可见性和指令重排序的特性,但是它代替不了Java里面的锁。
FileI/O
什么是流?
流是指一连串流动的字符,是以先进发出的方式发送信息的通道。程序各数据源之间是通过流联系起来的。
使用字节流读文本文件的步骤?
-
字节流:
- 字节流读取的时候,读到一个字节就返回一个字节; 主要用于读取图片,MP3,AVI视频文件。
-
字符流:
- 字符流使用了字节流读到一个或多个字节,如读取中文时,就会一次读取2个字节。只要是处理纯文本数据,就要优先考虑使用字符流。
使用什么流读写字符内容更高效?
BufferedReader和BufferedWriter以字符流的方式读写文本文件,而且效率更高。
简述java中流的分类
按照流的流向进行划分
- 输出流:只能从中读取数据而不能向其中写入数据
- 输入流:只能向其中写入数据而不能从中读取数据
按照程序运行所在的内存角度划分
- 输入流由InputStream和Reade作为基类
- 输出流由OutputStream和Writer作为基类
- 按照操作的数据单元不同可以划分为字节流和字节符
文本文件的读写过程中需要处理的异常有哪些?
答FileNotFoundException和IOException
- 异常处理使用try—catch—finally关键字进行捕获,打印相关信息,并保证数据流的关闭。
什么是IO流?
它是一种数据的流从源头流到目的地。比如文件拷贝,输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。
字节流和字符流的区别?
字节流用于操作包含ASCII字符的文件。JAVA也支持其他的字符如Unicode,为了读取包含Unicode字符的文件,JAVA语言引入了字符流。ASCII作为Unicode的子集,对于英语字符的文件,可以使用字节流也可以使用字符流。
Java中流类的超类(均为抽象类)主要由哪些组成?
- java.io.InputStream(字节输入流)
- java.io.OutputStream(字节输出流)
- java.io.Reader(字符输入流)
- java.io.Writer(字符输出流)
FileInputStream和FileOutputStream是什么?
- 这是在拷贝文件操作的时候,经常用到的两个类。
- 在处理小文件的时候,它们的性能表现还不错,在大文件的时候,最好使用BufferedInputStream(或BufferedReader)和BufferedOutputStream(或BufferedWriter)
字节流和字符流,你更喜欢哪一个?
更喜欢使用字符流。许多在字符流中存在的特性,字节流中不存在。比如使用BufferedReader而不是BufferedInputStream或DataInputStream,它其中包含一个‘readLine()’方法用于读取文本行;又比如BufferedWriter流中有一个独特的向文件写入一个换行符的方法‘newLine()’用来读取下一行,但是在字节流中我们需要做额外的操作。
System.out.println()是什么?
println是PrintStream的一个方法。out是一个静态PrintStream类型的成员变量,System是一个java.lang包中的类,用于和底层的操作系统进行交互。
什么是Filter流?
- Filter Stream是一种IO流。
- Filter流的主要作用是:对存在的流增加一些额外的功能,像给目标文件增加源文件中不存在的行数,或者增加拷贝的性能。
有哪些可用的Filter流?
在java.io包中主要由4个可用的filter Stream组成。两个字节filter stream,两个字符filter stream。分别是:FilterInputStream、FilterOutputStream、FilterReader和FilterWriter。
有哪些Filter流的子类?
LineNumberInputStream:给目标文件增加行号。
DataInputStream:有些特殊的方法如:readInt()、readDouble()和readLine()等可以一次性的读取一个int, double和一个string类型的数据。
BufferedInputStream:增加性能。
PushbackInputStream:推送要求的字节到系统中。
SequenceInputStream的作用是什么?
使用很少的代码实现‘拷贝多个文件到一个目标文件’的目的。
在文件拷贝的时候,哪一种流可用于提升更多的性能?
在字节流的时候,使用BufferedInputStream和BufferedOutputStream。
在字符流的时候,使用BufferedReader和BufferedWriter。
说说管道流(Piped Stream)
有四种管道流:PipedInputStream、PipedOutputStream、PipedReader和PipedWriter。
在多个线程或进程中传递数据的时候管道流非常有用。
什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作
对象序列化,将对象以二进制的形式保存在硬盘上
反序列化;将二进制的文件转化为对象读取
实现serializable接口
不想让字段放在硬盘上就加transient
XML技术
XML是什么?
XML即可扩展标记语言(Extensible Markup language),你可以根据自己的需要扩展XML。XML中可以轻松定义, 等自定义标签,而在HTML等其他标记语言中必须使用预定义的标签,比如
,而不能使用用户定义的标签。使用DTD和XML Schema标准化XML结构。XML主要用于从一个系统到另一系统的数据传输,比如企业级应用的客户端与服务端。
XML概念
- XML 数据以纯文本格式存储
- 实现不同应用程序之间的数据通信
- 实现不同平台间的数据通信
- 实现不同平台间的数据共享
- 使用 XML 将不同的程序、不同的平台之间联系起来
XML 的作用:数据存储和数据传输