使用String、StringBuffer和StringBuilder
*String对象是不变的,String引用变量则不是。
*如果创建新的String,而没有给它赋值,则对程序来说它将被丢失。
*如果把String引用重定向到新的String,则旧的String可能丢失。
*除了substring()的第二个参数之外,String方法使用基于零的索引。
*String类是final类--其他类不能重写。
*当JVM发现String常量时,将把该常量添加到常量池中。
*String有一个名为length()的方法,数组有一个名为length的属性。
*StringBuffer的API与新的StringBuilder的API相同,只不过StringBuilder的方法并未针对线程安全进行同步。
*StringBuilder的方法应该运行得比StringBuffer的方法更快。
*以下列出的各项同时适用于StringBuffer和StringBuilder:
它们都是可变的--无需创建新对象即可改变它们;
StringBuffer方法作用于调用对象上,无需在语句中显示赋值即可改变对象;
StringBuffer的equals()没有被重写;它不比较值。
*请记住链接方法是从左至右计算。
*要记住的String方法有:charAt()、concat()、equalsIngoreCase()、length()、replace()、substring()、toLowerCase()、toString()、toUpperCase()和trim()。
*要记住的StringBuffer方法有:append()、delete()、insert()、reverse()和toString()。
文件I/O
*java.io中需要理解的类有:Fle、FileReader、BufferReader、FileWriter、BufferedWriter和PrintWriter。
*新的File对象并不意味着在你的硬盘驱动器上有新的文件。
*File对象可以表示文件或目录。
*File类允许管理(添加、重命名和删除)文件和目录。
*createNewFile()和mkDir()方法用于添加条目到你的文件系统中。
*FileWriter和FileReader是低级I/O类。可以使用它们读写文件,但是通常应该包装它们。
*java.io中的类被设计成链接或包装(这是修饰器设计模式的常见用法)。
*把BufferedReader包装在FileReader周围十分常见,用于获得对更高级(更方便)方法的访问权限。
*把BufferedWriter包装在FileWriter周围十分常见,用于获得对更高级(更方便)方法的访问权限。
*PrintWriter可用于包装其他Writer,但是,从Java5起,可以直接从File或String构建它们。
*Java5的PrintWriter具有新增的append()、format()和printf()方法。
串行化
*需要理解的类全都在java.io包中:它们主要包括:ObjectOutputStream和ObjectInputStream,以及FileOutputStream和FileInputStream,因为你将使用它们创建ObjectXxxStream类将使用的低级流。
*在可以串行化一个类的对象之前,该类必须实现Serializable接口。
*ObjectOutputStream.writerObject()方法用于串行化对象,而ObjectInputStream.readObject()方法用于反串行化对象。
*如果把一个实例变量标识为transient,它将不会被串行化,即使将对余下的对象状态进行串行化也是如此。
*可以通过实现writeObject()和readObject()方法来补充类的自动串行化过程。如果这样做,对defaultWriteObject()和defaultReadObject()的嵌入式调用将分别处理正常发生的串行化部分。
*如果一个父类实现了Serializable,则它的子类也会自动实现Serializable。
*如果一个父类没有实现Serializable,则当反串行化一个子类对象时,将会运行父类构造函数。
*DataInputStream和DataOutputStream实际上不会出现在考试中,尽管Sun目标中是另一种说法。
日期、数字和货币
*需要理解的类有:java.util.Date、java.util.Calendar、java.text.DateFormat、java.text.NumberFormat和java.util.Locale。
*Date类的大多数方法都不赞成使用。
*Date被存储为long,它是从1970年1月1日起的毫秒数。
*Date对象是Calendar类和Locale类之间的媒介。
*Calendar提供了一组用于操作日期的强大方法,可以执行诸如获取星期几,或者添加月数或年数(或其他增量)到日期中之类的任务。
*使用静态工厂方法(getInstance())创建Calendar实例。
*应该理解的Calendar方法包括:add(),它允许添加或减去多个日期成分(分钟、天数、年数等);roll(),它的工作方式与add()一样,但是不会递增日期的较大部分(例如:添加10个月到October日期中会把月份更改为August,但是不会递增Calendar的年度值)。
*使用静态工厂方法(getInstance()和getDateInstance())创建DateFormat实例。
*DateFormat类中有多种格式样式可用。
*可以针对多个不同的Locale应用DateFormat样式,以为任何给定的日期创建一组广泛的输出。
*DateFormat.format()方法用于创建包含有正确格式化日期的字符串。
*Locale类与DateFormat和NumberFormat一起使用。
*DateFormat对象和NumberFormat对象可以用特定的不可变的Locale来构造。
*对于考试,你应该理解使用语言或者使用语言和国家的组合来创建Locale。
解析、分解和格式化
*regex是正则表达式(regularexpression)的简写,它是用于在大型数据源中查找数据的模式。
*正则表达式是存在于Java以及其他语言(如Perl)中的子语言。
*正则表达式允许使用字面量字符或元字符创建查找模式。元字符允许查找稍微抽象一点的数据,如数字或空白。
*学习\d、\s、\w和.这些元字符。
*正则表达式提供了一些量词,它们允许指定像在一行中寻找一个或多个数字这样的概念。
*学习?、*和+这些贪婪匹配量词。
*记住:元字符和字符串不能混合,除非你记住正确地转义它们。例如:Strings=;。
*Pattern类和Matcher类具有Java的最强大的正则表达式能力。
*你应该理解Pattern的compile()方法和Matcher的matcher()、pattern()、find()、start()和group()方法。
*你不必理解Matcher的面向替换的方法。
*你可以使用java.util.Scanner执行简单的正则表达式查找,但是它主要用于分解。
*分解是把定界的数据分裂成小段数据的过程。
*在分解的过程中,你想要的数据成为标记,分隔标记的字符串则称为定界符。
*可以利用Scanner类或者利用String.split()执行分解。
*定界符可以是单一字符(如逗号),或者复杂的正则表达式。
*Scanner类允许从一个循环内分解数据,这允许随时停止分解。
*Scanner类允许分解字符串或流,或者文件。
*String.split()方法将会同时分解整个源数据,因此,大量的数据处理起来可能相当慢。
*Java中新增了两个方法用于格式化输出的数据,这两个方法是format()和printf()。可以在PrintStream类中找到这两个方法,这个类的实例是System.out中的out。
*format()方法和printf()方法具有相同的功能。
*用printf()(或format())格式化数据是利用与基本类型或字符串参数关联的格式化字符串完成的。
*format()方法允许把字面量混合在格式字符串中。
*你应该知道的格式字符串值有:
标志:-、+、0、,和(;
转换:b、c、d、f和s。
*如果你的转换字符与参数类型不匹配,就会抛出一个异常。
0 评论:
发表评论