Java语言程序设计(一)- 第二部分

第五章 数组和字符串

(一)、知识点

(1)、数组 是 相同数据类型的元素 按一定顺序排列的集合。
(2)、数组可以将同一类型的数据存储在连续的内存位置。
(3)、在 Java 中,数组是对象,数组在使用之前必须先声明。
(4)、数组定义格式为:

类型 数组名 [ ] = new 类型[数组大小]
类型 [ ] 数组名 = new 类型[数组大小]

(5)在数组定义时并不会为数组分配内存,声明的数组名只是引用变量。
(6)二维数组定义格式:

类型 数组名 [ ] [ ]
类型 [ ] [ ] 数组名
类型 [ ] 数组名 [ ]

(7)、二维数组也有 length 属性,但是只表示第一维的长度。
(8)、复制数组System.arraycopy(src, srcPos, dest, destPos, length)。

把数组src从下标srcPos到length长度的值复制到dest,从下标destPos开始赋值。

(9)、字符串是由有限个字符组成的序列,Java 中的字符串是一个对象。
(10)、Java 的标准包 java.lang 中封装了 String 类 和 StringBuffer 类。
(11)、String 类用于处理不变字符串,StringBuffer 类用于处理可变字符串
(12)、Java 程序中的字符串分为常量和变量两种。
(13)、字符串常量是用双引号括起来的一串字符,系统自动为它创建一个 String 对象。
(14)、Java 中引入了 Vector(向量)类,可以看作是可变数组。
(15)、Vector 是 java.util包提供的一个非常重要的工具类。
(16)、如果增加或删除了其中的元素,则 Vector 的大小也相应地变大或变小。其次,保存的元素的类型可以不一样。
(17)、Vector 类的实例 中只能保存对象类型,而不能是基本数据类型,例如 int 类型。
(18)、Vector < String > MyVector = new Vector(100, 50); 100为初始存储容量,50为容量增量,以后一旦100的空间用尽则以 50 为 单位递增。

(二)、题目

(1)、声明数组和创建数组的区别是什么?

1)、声明数据

①、即定义一个数组
②、声明数组时不会为数组分配内存,声明的数组名只是引用变量,用来指向一个数组,还不能访问数组中的任何元素

2)、创建数组

①对声明过的数组进行空间分配,对其进行初始化,给数组的元素赋初值,创建数组以后可以使用数组的元素

②数组创建分为静态初始化和动态初始化
静态初始化是:一对大括号{}将初值括起来,每个元素对应一个引用
动态初始化:使用运算符new为数组分配空间

(2)、二维数组动态初始化的两种方式:

1)、直接分配:

int a [ ] [ ] = new int [2] [3]

2)、按维分配:

int a [ ] [ ] = new int [2] []
a[0] = new int [3]
a[1] = new int [3]
a[2] = new int [3]

(3)、访问数据元素时需注意哪些问题?

访问数组元素时需注意3个问题:

1)、数组必须已经初始化,具有内存空间。
2)、访问数组元素通过数组名加上下标。下标数字从0开始。
3)、数组初始化后其大小是固定不变的,所以访问数组元素时需要注意下标数字值必须小于length的属性值,否则会抛出越界异常。

(4)、简述如何访问数组元素/Java中如何完成数组边界检查的?

1)、数组下标从0开始,数组中的元素个数length是数组类中唯一的数据成员变量
2)、使用new创建数组时系统自动给length赋值,数组一旦创建完毕,其大小就固定下来
3)、程序运行时可以使用length进行数组边界检查。如果发生越界访问,则抛出一个异常。

(5)、字符串操作中“==”与方法“equals()”有什么不同?

运算符“==”:判断两个字符串对象是否是同一实例,即内存中的存储空间是否相等

方法“equals()”:判定两个字符串的值是否相等

(6)、String类和StringBuffer类有什么区别?

1)、String的特点:

①、为一个不可变的实例对象,一旦创建就确定了,对字符串施加操作后并不改变字符串本身,而是又生成了另一个实例。
②、final类型不可被继承。
③、字符串连接可以用运算符 + 来实现。
④、分配内存时,按照对象中实际所含字符的实际个数等量分配。

2)、StringBuffer的特点:

①、为可变的实例对象,来处理可变的字符串,当修改它的字符串时,不再创建新的字符串对象,而是直接操作原字符串。
②、不能通过赋值符号对它直接赋值。
StringBuffer s = "This is a test String" 错误的
③、字符串连接操作StringBuffer效率比String高。
④、除去字符所占空间外,再加16个字符大小的缓冲区。

(7)、是否可以继承String类?

String类是final类型,不可以被继承

(8)、String 类 和 StringBuffer 类中共有的常用方法?

length():返回字符串的长度,即字符个数。
charAt( int index):返回字符串中 index 位置的字符。
subString (int beginlndex):截取当前字符串中从 beginlndex 开始到末尾的子串。
subString (int beginlndex,int endIndex):截取当前字符串中从 beginlndex 开始到endIndex -1 的子串。

(9)、String 类中的常用方法

replace(char oldChar, char newChar):将当前字符串中出现的所有oldChar转newChar。
toLowerCase() :将当前字符串中所有字符转换为小写形式。
toUpperCase() :将当前字符串中所有字符转换为大写形式。
concat( String str):将 str 连接在当前字符串的尾部。
startsWith( String prefix):测试 prefix 是否是当前字符串的前缀。
trim() :去掉字符串前面及后面的空白。
valueOf( type value):将 type 类型的参数 value 转换为字符串形式。

(10)、StringBuffer 类中的常用方法

append (String str):将参数 str 表示的字符串添加到当前串的最后。
replace (int start, int end, String str) :使用给定的 str 替换从 start 到 end 之间的子串。
capacity( ) :返回当前的容量。

(11)、什么时候使用向量?

需要处理的数目不定,类型不同的对象组成的对象序列
需要频繁地对对象序列进行插入/删除/查找操作时,使用向量来替代数组

(12)、Vector 类的成员变量

protected int capacitylncrement:增量的大小。如果值为 0 ,则缓冲区的大小每次倍增。
protected int elementCount :Vector 对象中元素的数量。
protected Object elementData[ ] :元素存储的数组缓冲区。

(13)、Vector 类的方法

1)、构造方法:

①、public Vector( ) :构造一个空向量。
②、public Vector(int initialCapacity) :以指定的初始存储容量 initialCapacity构造一个空的向量 Vector。
③、public Vector(int initialCapacity, int capacitylncrement) :以指定的初始存储容量 initialCapacity 和容量增量 capacitylncrement 构造一个空的向量 Vector。

2)、添加方法

①、addElement(Object obj):将新元素 obj 添加到序列尾部。
②、insertElementAt(Object obj,int index)将指定对象 obj 插入到指定位置 index 处 。
③、add(int index, Object obj):在向量的指定位置 index 插入指定的元素obj。

3)、添加元素
元素的修改或删除方法

①、setElementAt(Object obj, int index):将向量序列 index 位置处的对象元素修 改为 obj。如果下标 index 是负数或超出实际元素的个数,则抛出异常 ArraylndexOutOfBoundsException。
②、removeElement(Object obj):删除向量序列中第一个与指定的 obj 对象相同的元 素,同时将后面的所有元素均前移一个位置。这个方法返回的是一个布尔值,表示删除操作 成功与否。
③、removeElementAt(int index):删除 index 位置的元素,同时将后面的所有元素 均前移一个位置。如果下标 index 是负数或超出实际元素的个数,则抛出异常 ArraylndexOutOfBoundsException。
·removeAllElements() :清除向量序列中的所有元素,同时向量的大小置为 0。

4)、元素的査找方法

①、elementAt(int index):返回指定位置处的元素。如果下标 index 是负数或超出 实际元素的个数,则抛出异常 ArraylndexOutOfBoundsException。这个方法的返回值是 Object 类型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成 Object 类的某个具体子类的对象。例 如 :String str = ( String) My Vector.elementAt (0)。
②、contains (Object obj):检査向量序列中是否包含指定的对象元素 obj。
③、indexOf ( Object obj, int start_index) :从指定的 start_index 位 置开始 向后搜索,返回所找到的第一个与指定对象 obj 相同的元素的下标位置。若指定的对象不存 在,则返回-1。
④、lastlndexOf(Object obj, int start_index) :从指定的 start_index 位置开始 向前搜索,返回所找到的第一个与指定对象 obj 相同的元素的下标位置。若指定的对象不存 在,则返回-1。

(14)、简单说明数组与Vector类的显著区别

1)、数组初始化后其容量大小固定不变,不能缩小或追加空间。而Vector类实例的大小可以根据需要改变。
2)、Vector保存的数据类型和数组不一样,数组只能保存同一种数据,而Vector实例可以保存不同类型的数据。
3)、数组元素的类型可以是基本数据类型,也可以是类对象,而Vector类实例只能保存类对象,不能保存基本类型的数据。

第六章 继承和多态

(一)、知识点

(1)、Java 中的类层次结构为树状结构
(2)、子类与父 类的关系是:子类对象“is a”父类对象
(3)、新类称作子类,原来的类称作父类,也称为基类或超类
(4)、两个类中共同的内容放到父类中,特殊的内容放到子类中
(5)、在 Java 中,用关键字 extends 表示派生
(6)、如果一个类的定义中没有出现 extends 关键字,则表明这个类派生于Object类.
(7)、如果子类已经重写了父类中的方法,但在子类中还想使用父类中被隐藏的方法,可以使 用super关键字.
(8)、Object 类是所有类的父类或祖先类,处在类层次的最高点。
(9)、同一的对象一定相等,但相等 的对象不一定同一。
(10)、继承 Object 中的 equals 方法只能判断两个引用变量是否是同一个对象。
(11)、一个子类可以 从父类及祖先类中继承所有能继承的方法和成员变量,但它不能继承构造方法
(12)、子类不能直接访问其父类中定义的私有属性及方法,但可以使用父类中定义的公有(及保护)方法访问私有数据成员。
(13)、类的变量既可以指向本类实例,又可以指向其子类的实例,这表现为对象的多态性
(14)、允许把子类的实例赋给父类 的引用。但反过来是错误的,不能把父类的实例赋给子类的引用
(15)、判断一个引用到底指向哪个实例,这可以通过 instanceof 运算符 来实现
(16)、此需要修改父类中已有的方法。这就是 方法覆盖(Override),也称为方法重写或隐藏。
(17)、覆盖的同名方法中,子类方法不能比父类方法的访问权限更严格
(18)、子类 Manager 的实例赋给父类变量 e 这称为对象转型(Casting)
(19)、如果子类已经重写了父类中的方法,但在子类中还想使用父类中被隐藏的方法,可以使 用 super 关键字。
(20)、如 果—个类被定义为 final,则它不能有子类;如果一个方法被定义为 final,则不能被覆盖;如果一个变量被定义为 final,则它的值不能被改变。
(21)、不能用抽象类作为模板来创建对象,必须生成抽象类的一个非抽象的子类后才能创建实例
(22)、只有抽象类才能具有抽象方法,抽象类的子类所继承的抽象方法 同样还是抽象方法
(23)、包含抽象方法的类一定是抽象 类,但抽象类中的方法不一定都是抽象方法。抽象类是不能创建对象的。

(二)、题目

(1)、Object类中主要方法

1)、public final Class getClass():获取当前对象所属的类信息,返回 Class 对象。
2)、public String toString():按字符串对象返回当前对象本身的有关信息。
3)、public boolean equals(Object obj):比较两个对象是否是同一个对象,是则返 回 true。

(2)、在java中如何判断两个对象各个属性(成员变量)的值是否相同

需要在类的声明中对equals方法进行覆盖,即重写这个方法。在方法中对对像的值是否相等一一判断

(3)、什么是继承?

将一个已有类的数据和方法保留,并加上自己特殊的数据和方法,从而构成一个新类,这就是继承的概念

(4)、说明父类与子类的联系与区别

①、大的更一般的类作为父类,包含特殊的,具体的类是子类
②、子类与父类的关系是:子类对象“is a”父类对象。
③、从层次关系上讲,子类继承父类,父类的对象引用可以指向子类对象,反之则不行
④、从成员上讲,子类可以比父类拥有更多的成员变量和成员方法,这些成员变量和成员方法是子类独有的,父类不具有也不能使用,反过来,父类中具有公共、保护权限的成员变量和成员方法同时也属于子类,子类可以使用

(5)、什么是对象转型?

Java允许将子类的对象赋给父类的变量,这称之为 对象转型。
对象引用的赋值兼职原则允许把子类的实例赋给分类的引用,但反过来是错误的。
可以用instanceof运算符来判定真正的对象类型

对象引用转型的规则:

①、类层次向“上”转型总是合法的,此种方式不需要转型运算符,简单赋值语句就可以
②、对于向“下”转型,只能是祖先类转型到后代类,其他类之间是不允许的。且需要显式转换

(6)、什么是多态

类的变量既可以指向本类实例,又可以指向其子类的实例,这表现为对象的多态性。
重载一个方法名可以看着是多态,父子类之间直接或间接重写的方法名要由对象在运行时确定将调用哪个方法,这也是多态。

(7)、什么是构造方法重载?

在进行对象实例化时可能会遇到许多不同的情况,于是要求针对所给定的不同参数,调用不同的构造方法。通过在一个类中同时定义若干个构造方法来实现,这就是构造方法的重载

(8)、什么叫方法重载?什么叫做方法覆盖?他们之前的区别是什么?

Override覆盖:父类中原有的方法不能满足新的需求,需要修改父类中已有的方法。这就是方法覆盖(Override),也称为方法重写或隐藏。子类中定义方法所用的名字、返回类型 及参数列表和父类中方法使用的完全一样,也就是具有相同的方法签名。重写的方法分属于父类、子类中。

Overload重载:方法名相同,参数列表不同,则是对方法的重载。调用重载方法时,编译器将根据参数的个数和类型,选择对应的方法执行;重载的方法属于同一个类

(9)、使用方法覆盖必须注意以下两条重要规则。

①、允许访问范围不能小于原方法
②、所抛出的异常不能比原方法更多

(10)、关键字 super 在成员方法中的特殊作用是什么?

如果子类已经重写了父类中的方法,但在子类中还想使用父类中被隐藏的方法,可以使用super关键字
使用时注意两个问题:

①、super.method()调用父类中的方法,将执行父类方法中的所有操作,可能原本不希望进行的操作。调用要谨慎
②、super.method()方法不一定是父类中的,也可能是祖先类中继承的,可能需要按继承层次关系向上查询才能够找到。

(11)、什么是终极类、终极方法和终极变量?定义终极类型的目的是什么?

终极类:被标记为final的类将不能被继承,这样的类称为终极类
目的:

1)、为了保证一个方法中有一个指向String类的引用,那么他肯定是一个String类型,而不是已被更改的String子类。

2)、某个类的结构已经很完整,不需要生成它的子类。
终极方法:被标记为final的方法将不能被覆盖,这样的方法。。
目的:

①、确保调用的方法是最原始的方法,儿不是已被更改的子类中的方法。
②、有时被用于优化,从而提高编译运行效率
终极变量:被标记为final的变量不能被改变,实际上会成为一个常量。这样的变量。。

(12)、什么是抽象类?什么是抽象方法?他们有什么特点和用处?

抽象类:定义了方法但没有定义具体实现的类

抽象方法:在java中可以通过关键字abstract把一个类定义为抽象类,没一个未被定义具体实现的方法也应标记为abstract,这样的方法称之为抽象方法

作用:创建某个类来代表一些基本行为,规范定义方法,但又无法或不宜在这个类中对这个行为加以具体实现,希望子类根据实际情况去实现这些方法。

特点:

①、不能用抽象类作为模板来创建对象,必须生成抽象类的非抽象类的子类后才能创建实例
②、抽象类中包含抽象方法,只有方法声明,没有方法实现,这些方法在抽象类的子类中实现
③、抽象类中也可以包含非抽象方法,只有抽象类才具有抽象方法

(13)、请写出一个接口中能够包含的元素、及这些元素各自默认的修饰符

①、终极静态(成员)变量 static、final
②、抽象(成员)方法 abstract

(14)、什么是接口?接口的作用是什么?它与抽象类有何区别?

接口是体现抽象类功能的另一种方式,可将其想象为一个“纯”的抽象类。接口中的所有方法都是抽象方法,都没有方法体
作用:规定一个类的基本形式,包括方法名、参数列表以及返回值类型,但不规定方法体。java允许一个类实现多个接口,从而实现了多重继承的能力

相似:

①、都不能被实例化,需要被其他非抽象子类继承或实现
②、接口和抽象类一样,可以使用接口名作为引用变量的类型,该引用可以指向实现了该接口类的实例,使用时根据动态绑定原则,指向具体的操作实例
③、都可以包含抽象方法,实现接口或继承抽象类都必须实现这些抽象方法

区别:

①、接口中方法必须是抽象方法,抽象类中可以包含非抽象方法
②、接口中定义的成员变量都默认为终极静态变量必须赋初值,抽象类里面可以定义成员变量和静态变量
③、接口中不能不含构造函数,抽象类可以
④、一个类可以实现多个接口,只可以继承一个抽象类

(15)、Java如何实现多重继承?

Java程序中,可以在implements后面声明多个接口名,也就是一个类可以实现多个接口。接口实际上就是一个特殊的抽象类,同时实现多个接口也就意味着具有多重继承的能力。

第七章 输入和输出流

(一)、知识点

(1)、数据流是指一组有顺序的、有起点和终点的字节集合
(2)、中文在编码表中默认占 2 个字节
(3)、字节流:一次读入或读出是 8 位二进制。
(4)、字符流:一次读入或读出是 16 位二进制。
(5)、数据流分为输入数据流和输出数据流。

输入数据流只能读不能写
输出数据流只能写不能读

(6)、从数据流中读取数据时,必须有一个数据源与该数据流相连。
(7)、java.io 包中提供了表示数据流的 4 个基本抽象类,分别是 InputStream、 OutputStream、Reader 和 Writer。

引入语句:import java.io.*;

(8)、java.io 包中 所有输入数据流都是从抽象类 InputStream 继承而来,读取数据、标记位置、重置读写指针、获取数据量等。

(9)、int read()返回一个0~255的 int类型返回。
(10)、当输入流读取结束时,会得到-1,以标志数据流的结束
(11)、对数据流中字节的读取通常是从头到尾顺序进行,如果需要反方向读取,需要回推Push Back 操作。

(12)、一般在关闭一个缓冲区输出流之前,应先使用 flush( )方法,强制输出剩余数据,以确保缓冲区内的所有数据全部写入输出流。

(13)、能够记录自己的状态以便将来得到复原的能力,称为对象的持久性
(14)、序列化只能保存对象的非静态成员变量,而不能保存任何成员方法和静态成员变量,并且保存的只是变量的值,对于变量的任何修饰符都不能保存

(15)、 如 Thread 对象或流对象,对于这样的成员变量,必须用 transient 关键字标明,否则编译 器将报错。

任何用 transient 关键字标明的成员变量,都不会被保存。

(16)、用transient关键字标记的引用是可以被持久化

(17)、Java 语言提供了 RandomAccessFile 类像访问数据库,到一个位 置读一条记录,到另一个位置读另一条记录,然后再读另一条——每次都在文件的不同位置 进行读取。

(18)、mkdir( )和 mkdirs( )是用来创建目录的。
两者的区别在于用 mkdirs( )可以一次生成多个层次的子目录。

(二)、题目

(1)、字节流和字符流的区别:

1)、读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
2)、处理对象不同:字节流能处理所有类型的数据(如图片、avi 等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。

(2)、什么是数据流,数据流分为哪些类,各类的特点是什么?

数据流:是指一组有顺序的、有起点和终点的字节集合。
数据流分类:输入数据流、输出数据流

特点:输入数据流只能读不能写,输出数据流只能写不能读。
从数据流中读取数据时,必须有一个数据源与该数据流相连。

(3)、完成所有输入/输出操作所需的类都包含于哪个包中?

java.io.* 包

(4)、什么叫作流?输入/输出分别对应哪两个抽象类?

java中,把这些不同类型的输入、输出源抽象为流。

1)、输入:InputStream

①、int read( ):从输入流中读取一个字节的二进制数据。
②、int read(byte[ ] b):将多个字节读到数组中,填满整个数组。
③、int read(byte[ ] b,int off,int len):从输入流中读取长度为 len 的数据, 从数组 b 中下标为 off 的位置开始放置读入的数据,读毕返回读取的字节数。
④、void close( ):关闭数据流。
⑤、int available( ):返回目前可以从数据流中读取的字节数(但实际的读操作 所读得的字节数可能大于该返回值)。
⑥、long skip(long l):跳过数据流中指定数量的字节不读取,返回值表示实际跳过的字节数。

2)、输出:OutputStream

①、void write(int i):将字节 i 写入到数据流中,它只输出所读入参数的最低 8 位。 该方法是抽象方法,需要在其输出流子类中加以实现,然后才能使用。
②、void write(byte b[ ]):将数组 b[ ]中的全部 b.length 个字节写入数据流。
③、void write(byte b[ ],int off,int len):将数组 b[]中从下标 off 开始的 len 个字节写入数据流。
④、void close():关闭数据流。
⑤、void flush():刷新输出流并强制写出所有缓冲的输出字节。

(6)、InputStream/OutputStream有哪些直接子类?其功能是什么?

InputStream/OutputStream类是抽象类,不能进行实例化。
常常使用的是她们的子类

1)、FileInputStream/FileOutputStream:文件数据流
用来进行文件I/O处理,其数据源或数据终点都是文件。
如果指定的文件不存在,会产生FileNotFoundException异常. 如果在读、写文件或生成新文件发生错误,会产生IOExcepiton异常。
不支持mark()和rest()方法。

2)、BufferedlnputStream/BufferedOutputStream:缓冲区数据流
在数据流上增加了一个缓冲区。 当读写数据时,数据以块为单位先进入缓冲区,其后的读写操作则作用于缓冲区。采用这个办法可以降低不同硬件 设备之间速度的差异,提高 I/O 操作的效率。
在关闭一个缓冲区输出流之前,应先使用flush()方法,强制输出剩余数据。
FilelnputStream fis = new FilelnputStream(“myFile”);
InputStream is = new BufferedlnputStream(fis,1024);
FileOutputStream fos = new FileOutputStream(“myFile”);
OutputStream os = new BufferedOutputStream(fos);

3)、DatalnputStream/DataOutputStream:数据数据流
允许通过数据流来读写Java基本类型,包括布尔型、浮点型。
InputStream is=new BufferedlnputStream(fis,1024);
DatalnputStreamd is=new DatalnputStream(is);

4)、ObjectInputStream/ObjectOutputStream:
把对象写入文件数据流或从文件流中读出的功能。能够输入/输出对象的流称为对象流

(7)、请简述过滤器数据流的概念及其种类

过滤器数据流在创建时与一个已经存在的数据流相连,从这样的数据流中读取数据时,它提供的是对一个原始数据流的内容进行了特定处理的数据。
分为:缓冲区数据流、数据数据流 两种

(8)、使用缓冲区输出流的好处是什么?为什么关闭一个缓冲区输出流之前,应该使用flush方法?

①、目前的存储介质中,内存的访问速度是最快的。
②、因此为了加快数据的传输速度,提高数据的输出效率,有时候数据流会在提交数据之前把所要输出的数据先暂时保存在内存缓冲区中,然后成批进行输出,每次传输过程都以特定数据长度为单位进行传输。
③、这种方式下,数据的末尾一般会有一部分数据由于数量不够一批次,而存留在缓冲区里,调用flush()可以将这部分数据强制提交

(9)、请说明Java基本字符流中读者、写者出现的原因及作用

①有些程序设计语言使用ASCII字符集,而Java使用Unicode字符集表示字符和字符串。
②ASCII字符集一个字节表示一个字符,一个字符就是一个字节。Java使用两个字节表示一个字符,字节和字符不再相同
③Java为实现与其他程序语言及不同平台的交互,提供了新的数据流处理方案,称为读者Reader和写者Writer。
④读者和写者的作用是在字节流和字符流之间作中介,在构造方法中应指定一定的平台规范,以便把以字节方式表示的流转换为特定平台上的字符表示。

(10)、读者和写者的作用是什么?

Reader 和 Writer 也是抽象类,只提供了一系列用于字符流处理的接口。Java 通过读者和写者,实现了对不同平台之间数据流中的数据进行转换。同其他程序 设计语言使用 ASCII 字符集不同,Java 使用 Unicode 字符集来表示字符串和字符。

BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new FileReader(“abc.txt”));
String s = in.readLine();

BufferedReader的方法:
readLine() 从输入流中读取一行字符,行结束标志为“\n”、“\r”或者两者连在一起

BufferedWriter的方法:
newLine() 向输出流中写入一个行结束标志。

(11)、什么叫作对象的序列化?如何实现对象的序列化?

对象的序列化:对象转换为字节序列的过程
对象的反序列化:字节序列恢复为对象的过程
如何实现对象的序列化:

①、一个类声明实现了java.io.Serializable接口,表明该类的对象是可以序列化的,否则不能序列化。
②、与特定的对象输出/输入流联系起来,通过对象输出流将对象状态保存下来,或者将对象保存到文件中,之后再通过对象输入流将对象状态恢复。ObjectOutputStream和ObjectInputStream两个类实现的。writeObject()保存,readObject()读取

(12)、简介回推操作?

对数据流中字节的读取通常是从头到尾顺序进行的,如果需要反方向读取,就需要回推操作。
支持回推操作的数据流需要用到以下方法:

①、boolean markSupported():测试是否支持回推操作
②、void mark(int markarea):用于标记数据流当前的位置,并划出一个缓冲区,其大小至少为指定参数大小。
③、void reset():将输入流重新定位到对此流最后调用mark方法时的位置。

(13)、File类

File 对象可以用来生成与文件(及其所在的路径)或目录结构相关的对象。
用File类可以达到与系统无关的目的,这里使用的是抽象的路径表示法。

①、第一种方式:

File myFile;
myFile = new File(“Mymotd”);

②、第二种方式:

File myFile = new File("/",“Mymotd”);

③、第三种方式:

File myDir = new File("/");
myFile = new File(myDir,“Mymotd”);

与文件名相关的方法
·String getName( ):获取文件名。
·String getPath( ):获取文件路径。
·String getAbsolutePath( ):获取文件绝对路径。
·String getParent( ):获取文件父目录名称。
·boolean renameTo(File newName):更改文件名,成功返回 true,否则返回 false。

文件测定方法
·boolean exists( ):文件对象是否存在。
·boolean canWrite( ):文件对象是否可写。
·boolean canRead( ):文件对象是否可读。
·boolean isFile( ):文件对象是否是文件。
·boolean isDirectory( ):文件对象是否是目录。
·boolean isAbsolute( ):文件对象是否是绝对路径。

常用文件信息和方法
·long lastModified( ):获取文件最后修改时间。
·long length( ):获取文件长度。
·boolean delete( ):删除文件对象指向的文件,成功则返回 true,否则返回 false。

(14)、RandomAccessFile 类

RandomAccessFile:像访问数据库那样,到一个位置读取一条记录,到另外一个位置读另一条记录,然后再读另一条,每次在不文件的不同位置进行读取
①、myRAFile=new RandomAccessFile(String name,String mode);
②、myRAFile=new RandomAccessFile(File file,String mode);

参数mode决定是以只读方式(“r”),还是以读写方式(“rw”)访问文件

(15)、目录工具

·boolean mkdir( ):创建新目录。
·boolean mkdirs( ):创建多个新目录。
·String[ ]list( ):列出符合模式的文件名。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值