Java Rules中文版3

所需积分/C币:15 2013-02-27 11:53:26 5.61MB PDF
10
收藏 收藏
举报

本书全面、深入地论述了Java语言www.bocaitong3.com的方方面面,包括编译单元、基本数据类型和对象、类和接口的五种类型、容器和内部类层次、字符串等。  对于希望精通Java编程语言复杂细节的应用程序员来说,本书是一本全面的参考书,内容详尽,深入浅出。本书彻底地讲述了Java编程语言和Java虚拟机(JVM)的核心细节,使读者能够有效地深入理解Java平台。  基于Java语言规范的第二版和Java虚拟机规范,本书以更加友好的教程风格,展现了这些规范的一个子集。从平台基础到API,这本百科全书式的指南全面地展示了Java语言的方方面面——包括以前没有文档化的一些特性。实用的指导遍布全书,都由官方的语言文档或权威技
长科 www.zzbaike.com 本教程由站长百科收集整理 第5章 System, out. println(name = name F 执行这个程序将打印 name John brown name JOHN BROWN name= john br。wm 我所说的可逆转,是指有些程序员可能会期望下面的结果输出: Iame name JOHN BROWN hn Brown 名字的大写字母被“转换回来”(变为原来的状态),但这并不是这些方法的实际功能。为了 避免Smng类中的可能更改操作的方法覆盖原来的字符串,有时做一个原来字符串的备份是 必要的 至少在德语中,字符串返回的长度很可能和原来的不同,因为在德语中大写是映射为 “SS”,反之亦然。 5.72字符串比较 这类方法在两个字符串相同或者字符串的不同位置的子串匹配的时候返回tue,共有三 组方法和Smng类中惟个 public成员变量值得考虑: public boolean equals (Object anObject public boclean equalsIgnoreCase(string anotherstring) public int compareTo(String anctherstring) public int corpareToIgnorecase(String stry public boolean regionMaLches(int toffset String other 1 int le public boolean regiorMatches(boolean ignoreCase int toffset string other int ooffset int len) public static final Comparator cASB_ INBENSITIVE_ORDER 第一组方法包括 equals(object o)方法,只是参数名 anobject被替换成o。所有从 Object继承 下来的类的 equals(object o)方法都是人小写敏感的,而 equalsIgnore Case(String 是大小写不敏感的。这两个方法在两个字符串长度不相同时都会返回 false anothe5mn9) compareTo(String another String)方法实现了Sung类中的 Comparator接口应用程序员在 使用它时总是按照字典的顺序对其进行排序的。字典顺序在4125中进行了详细地讨论。第 个方法 compareToIgnore Case(string str)支持大小写不敏感的比较。并且,有一个 1.如果考虑到最后一节中,德文的到“Ss”的大小写转换,则这句话实际上是有问题的 224 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。 长科 www.zzbaike.com 本教程由站长百科收集整理 字符串和其他懣用数据类型 eQUIS CASE INSENSITIVE ORDER成员变量,它是核心AP中两个重要的 Compareto对象之一。 相关见6.151节的讨论。 在 Unicode中,关于大小写不敏感的问题有一个有趣的现象,小写可能是不匹配,但大 写是匹配的:反之亦然。这使得你必须决定以哪种情况来判断,大写还是小写。所以有下 列的接口规范: 如果认为两个字符c和c2在不区分大小写的情况卜相同,则二者必须至少满足下面条 件之-: ●两个字符用“=”操作符比较相同; 两个字符在使用 Charactcr. toUpper Case(cha)操作后得到相同的结果 两个字符在使用 Character. toLowerr Case(char)操作后得到相同的结果 注意,这里说的是“至少满足条件之一”,不是所有的都要满足。换句话说,不区分大小写的 相等意味着只要两个字符串有可能相等就可以,而不必都转换成大写或都转换成小写后才判 断是否相同 第一个 regionmatches方法调用第-个 regionMatches方法并且把参数 ignore case设置成 false注意!比较范围的长度值一定要相同(因为两个不同长度的字符串是不可能相同的), 但是它们不必要在同一个位置起始。 offset和 ooffset分别是它们的起始字符的索引值。通常 情况下, ooffset是0, length参数利另一个字符串的长度相等。例如: it(regionMat ches(toffset, oter, 0, other length() (译者注:这个例子的方法调用中缺少目标对象,即应该是仗用if( str region aches (Toffset, other, 0, otherlength))) 有时, other也被称为模式字符串,囚为这种方法常被用来在目标字符串中搜寻一个模式 的字符串 重载的 regionMaches方法返回 false,而不是抛出 StringIndexOutofBounds Exception异常 这使得一些循环操作变得非常筒单,如下一节里讨论的循环操作 573访问单个字符或子字符串 每一个字符或者子字符串都可以直接用索引进行访问。我们要考虑两组方法: public char charAt(int index pubic string substring;int beginIndex) public string substring iint beginIndex, int endIndex charat,( int index)方法返回指定位置的单个字符,第一个 subString方法用默认的参数设置 ( beginindex为0, endindex为字符串的长度)调用第二个 subString方法。泮意, endIndex 通常是 beginIndex加上子字符串的长度(也就是一个右开区间)。方法 charAt(int index)会抛 出 StringIndex OutofBounds Exception异常,其他的两个方法会返回空字符串,而不是抛出这 种异常 在讨论搜索单个字符或者子宇符串时,我们要考虑四组方法 2 java. lang String类屮中的 equalsIgnore Caseo法的A文档。 225 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。 长科 www.zzbaike.com 本教程由站长百科收集整理 第5章 public int indexof(int ch) public int indexof(int ch, int fromindex public int lastIndexof(int ch public int lastIndexof(int ch, int fromIndex) dexof (string str public int indexof(String str, int fromIndex) public int last Indexof( public int lastIndexof(String str, int fromIndex) 所有的情况都是第一个方法用 fromIndex=0来调用第二个方法。前两组方法搜寻某个字符的 第一次或者最后一次出现,后两组方法搜寻某个子字符串的第一次或者最后一次出现。返 回值通常是单个字符或者子字符串的索引值。如果没有找到这个字符或者子字符串,则返 为了搜寻一个字符或者子字符串的所有出现,经常用一个循环方法来实行,直到达到这 个串的头部或尾部,例如 ciass test public static void main(string[] args)( string s ="How much wood would a woodchuck chuck, nif a woodchuck could chuck wood? w int index. /indexof(int ch, int fromIndex) index sindexof(w 0) whi1e( index!=-1〉 System, out. print (index a n) index = sindexof(w,++index System. cut, println() //1as=Indexof(int ch int fromIndex) index=s. 1a8tIndexof('w, B,length()); while(inacx !=-1)[ It. p index =slastIndexof(w. Syst at printin( /indexof(string str, int =romIndex) index indexof("wood", 0 hile(indt System. out. print (index + n"y ndex indexof( wood",index+4) Systerm. our printin( l/lastIndexof(String str, int fromIndex) index s.1礁Bt工nexf("woo”,自1 ength(}); while(index 1) system, out. print(inde inex=s.1a醒t工 mde("wooa",±dex-4) 225 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。 长科 www.zzbaike.com 本教程由站长百科收集整理 字符串和其他通用数据类型 执行这个程序将打印: 2914224466 6644221492 9224466 5644229 这些方法都是专门为这样的循环操作设计的(直到返回-1,而不管 fromIndex值是什么)。这 就是为什么它不会抛出 StringIndex outofBoundsException异常的原因。 下面的个 boolean型方法用于测试某个子字符串是合在另一个字符串的头部或者尾 部。 public boolean startswith (String prefix) public boolean startsWith( string prefix, int toffset) pubiic boolean endswithiString suffix) starts with( string prefix, int toffset)方法就是 indexof( String str, int fromIndex返回 boolean型的情 况第一个 starts with方法用toet=0来调用第二个方法这些方法抛出的惟一异常是在 prefix 或sui的值为mul时所抛出的 NullPointerException异常。如果prex或sux值为空串、 toffset.负数或者 toffset大于等于串的长度,则返回 false 方法 endswithi( string suffix)的通常用法是查询文件的扩展名。例如 Import jaⅴa.io, import java.ltil.* cle public static void main(String[] args)i File directory nlew File( System. get property("user. dir M)); tring] list =directory - istinew FilenameFilter 4 pub ic boolean accept(Fie directory, String name)( return name endswith(.java") Arrays,Eort(⊥ist for (int i=0; i< list length; 1++) system. out. printin(list[i] 执行这段程序将得到当前目录下所有以java为扩展名的源代码文件。 574char和 String之间的相互转换 构造方法一般都是把char转换成 String。在本节中将讨论 valueof和 copy ValueOf这类 工具方法的用法。下面是所有可以把cha转换成Sing的构造方法和工具方法的列表 public string(char[] value) public string(char.] value int oFFset 1nt count) 227 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。 长科 www.zzbaike.com 本教程由站长百科收集整理 第5章 public static s-ring valueof(char[ da-a) public static String valueof(char[] daD int offset nt. count) public static string copyValueOf(char data[i public static String copyValueof(char data[] int offset nt count 所有的情况都是第一个方法或者构造方法用 offset等于0、 count等于字符串数组的长度来 调用第二个方法。这里只列举了两个完全重载的 Valueof方法。在字符串连接操作中,它 们也隐含地用作字符串转换操作。关于 String类 Valueof工具方法的全面讨论参见51122节 的内容。 除了方法名之外,方法 copy Valued和 valueof相同。 copy ValueOf方法早就应该被淘汰 掉了,因为它的几余在这里只能使大家对 String类的接口更加迷惑。很早的时候, String类 的构造方法是拷贝char们参数的引用,而不是拷贝实际的数据(也就是创建一个新的字符串数 组),在那个时候 Copy valueOf就应该淘汰。就像 Patrick Naughton解释的那样: 在早些的版本中,运行环境没有真正的拷贝char数组,实际上,有另一个版本称作 copy Valueof 它做真正的拷贝。 copy valueOf、 Valueof以及后来的版本的 substring都做实际的拷贝操作,这是 为了安全的考虑 这就是为什么有两组与拷贝字符串内容操作相关的方法的由来。这已经是很古老的历史了。 正如我说过的那样,你应该用构造方法来拷贝char数组的内容,完全重载的 valueof方法也 可以隐含地用作字符串转换操作, copy ValueC应该被淘汰了 下来讨论一下把 String转换为char数组的操作。考虑两组工具方法: public char tocharArray public void getChars(int srcBegin, int srcEnd, char dst[], iat dstBegin 这两组方法都建立在61531节中讨论的 rraycopy(object sro, Int reposition, Object dst,int dst_position, int length)方法之上。方法 getChars与那些直接建立在它之上的方法很像,它是 核心AP中的主要工作方法。它在调用 System. arraycopy之前首先进行边界检查。方法 to CharArrayO建立在 getChars之上,它会首先为你创建一个字符数组,然后调用 getChars 方法来拷贝数组中的内容。 57.5转换本地编码的字符串 下面这些构造方法和方法用来转换本地编码的字符串。有两组构造方法和一组方法值得 考虑。Sing类的构造方法通常是把本地的编码转换成 Unicode,而重载的 getByte方法用于 执行相反的操作: public String(byte[] bytes) public String(byte[] bytes, String enc) public String(byte[] bytes, int offset, int length) 3. Patrick Naughton, The Java Handbook(Berkeley: Mcgray Hi,1996),16 228 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。 长科 www.zzbaike.com 本教程由站长百科收集整理 字符串和其他通用救据类型 public string(byte[] bytes, int offse=, int length, String enc pub_ic byte] getBytes( pub-ic byte[ getBytes(string enc 在这三组构造方法或方法中,第一个与第二个除了第二个多出一个enc参数外完全相同。enc 参数被称为字符编码宇符串。有时候,它们也被称作编妈标识符。每组的第一个构造方法或 方法中用一个默认的字符编码的引用来调川第二个。就像API文档中提到的有关 java. lang 包的内容 ava. lang和 Java.I0包中的很多构造方法和方法都能够以传递字符串参数的方式来决定在原始的8 位和16位的 Unicode编码进行转换的时不用何种字符編码方式 每个JVM的实例都有一个默认的字符编码,这个默认的字符编码在鹿拟机启动时就己经确定下来 了,它主要取决于下层操作系统的编码和当时的区域 默认的字符编码储存在系统属性的 file encoding中,例如: public static void nain(SLr ing[] args)i System. out.println( System, getproper-y("file encoding")) 在 windows操作系统中执行这段代码得到Cp1252,这是 windows操作系统使用的Lain1编 码机制。5世界上有数百个编码机制,因此在Java编程语言中也有数百个字符丰对它们进行 认证。如果某个JVM不支持传递给构造方法或方法参数的字符编码字符中,那么在运行时 就会抛出 UnsupportedEncoding Exccption异常。 在默认字符编码(或其他字符编码)和 Unicode之间进行转换通常是 Java.10包中的 InputStreamReader和 OutputStreamReader类的职责。这些类可以将整个文件进行转化,但是 String类也可以做到这一点,而且易用得多,例如: LeInput.St ream fis flew FileInputstream("Whatever. txt " byte[ data -new byte [fis. available()]; Eis. read( data string text. lew string(data) 这四行代码把一个文本文件的内容读到了一个字符串中,同时将默认字符编码转换为 Unicode编码。是否应该在一次读操作中把一个文件的所有内容都读到缓冲区中是另一类问 题,主要取决于文件的大小。 5.7.6 String类的杂项方法 String类屮有一些杂项方法,它们不属于任何一部分: public string trim public String replace(char oldchar, char newchar) 4. java. lang包的AP文档。 5.全名是“微徽软Windows代码页:1252(Lain1)”这部分内容可以在网站wwwi.microsof.com!globale/ reference/sbcs/1252Am中找到。缩写词Cp代表代妈页,是微软的术语,在 Unicode标图中称为代码图(code 229 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。 长科 www.zzbaike.com 本教程由站长百科收集整理 ariE 第5章 AP文档中对如m0方法的描述是:这个方法把字符串开头和结尾的空格去掉,它可以 Character类中已经过时的方法 isSpace( char ch)交叉参照。正如我在第一章介绍的,方法 iSSpace( char ch)现在被枧为 sO Latin-!中的空格,它包括ASCI中的空格字符和32个C0控 制字符中的4个。方法 s White Space(char ch)是空白的一个国际化的定义,它包括除了 Unicode 标准中的4个空格字符以及32个C0字符中的9个之外的所有空白字符 String类中的tmO 方法把所有的ASCⅡ空格字符和所有的32个C0字符都去掉了,其实这一点并不重要,但是 你要记住有三种不同的空格,参见1.2节 replace( char oldchar, char new Char)的语法非常明显在返回的字符串中,每一个 oldchar 都由 new char代替。这种方法是大小写敏感的。 String Buffer类中还有功能更加强大的 replace 方法, replace(int start, int end,. String str) 577 String类中的特殊构造方法 下面几个 String类的构造方法都有着特殊的用途 public String() g(string val String(StringBuffer buffer j 程序员很少使用无参构造方法,它代表一个空的字符串""主要在装载一个包含有空字符串"" 的类文件时使用。记住,直接书写的字符串常量从语义上是Stng类的一个实例。每当一个 零字节长度的字符串从一个类文件的常量池中装载的时候,都要调用一个 String构造方法。 仅仪有一个这样的字符串被加到Sing类自身所支持的惟一字符串池中。这样,对于每一个 运行的JVM,该构造方法仅被调用一次。注意,在不想用""来作为一个空字符串常量时,它 也可以用来代替空字符串。 String( String value构造方法是一个复制构造方法,它复制参数中字符丰的内容。例如: class Test public static void main(String (] args)[ String original ="whatever string copy new String(original); System, out. print ln(copy equals(original)); System. out. println(copy = original)i 执行这个程序将输出: false 由于Stng对象是不可改变的,所以这个构造方法很少使用。注意,由构造方法返回的这个 字符串我们称为计算字符串( computed string),例如: I ass Test i public static void main(String[] args) string copy new string("whatever m) System. out. println(ccpy =="whatever")i 执行这段代码将输出 false。这是因为计算字符串( computed string)并不是自动转换成字符 230 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。 长科 www.zzbaike.com 本教程由站长百科收集整理 字符串和其他通用数据类型 串常量和Sing类型的编译时常量。这意味着,下面两行代码并不相同 SLr iny S ="Hello World! String s llew string("Hello World!") 其中一个用等价引用创建了一个等于“ Hello world!”的新字符串,而另个没有。般来讲, 字符申拷贝操作只是简单地把一个字符串分配给另个 String类型的变量。换句话说,拷贝 的是引用,而不是内容。 关于构造方法特殊性的最后一部分内容将在5,4节讨论。 String Buffer类的 tostring 方法调用构造方法,这是大多数程序员经常使用的方法,不是直接使用构造方法。 58 StringBuffer类 被完全重载的两个方法 append和 insert是 String Buffer类中最重要的方法。下列方法也 称为基础方法: length0、 setLength0)、 capacity和 ensure Capacity(int mininum Capacity),这些 方法分别在53节和54节中做了介绍。12版本中 String Buffer类中的方法增加了两倍以上。 尽管如此,还是有些方法没有包括进来,相关内容将在582节讨论。 581重载的方法 append和 insert 这些方法视为 String Buffer类的基本娘奶它们是完全重我的,也就是说,可以把任何 数据类型传递给它们。6下面是这些方法的完整列表 public StringBuffer append(object obj) public StringBuffer append(string str) public stringBuffer append(char] str) public StringBuffer append(boolean b) public stringBuffer append(char c) public stringBuffer append(int i) public StringBuffer append(long 1) public stringBuffer append(float f) public Stri-gRuffer append(double c) public stringBuffer append(char[ str int offset int len) public StringBuffer insert(int offset, object obj) public StringBuffer insert(int offset string str) public StringBuffer insert(int offset, charAl public stringBuffer insert (int offset boolean b public StringBuffer insert (int offset, char c) public stringBuffer insert(int of fset int i) public StringBuffer insert(int offset, long 1) public StringBuffer insert(int offset, float f) 6.如同在本书中使用的那样,完全至载总是包括所有的原始数据类型和 Object,但是这个术语在哪个数 组可以被传递上没有严格的定义,这个术语通常至少包括 Objecti,但并非总是(如这里的情况)。我想说的 是,当使用pint和 println向标准输出写入时,这两个方法应和 String Buffer中的 append和 Insert方法一样, 定义为完全重载的。这个术语是我自己创造的 231 更多电子书教程下载请登陆trp// down zzbai ke. codebook 本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。

...展开详情
试读 118P Java Rules中文版3
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚钱or赚积分
最新推荐
Java Rules中文版3 15积分/C币 立即下载
1/118
Java Rules中文版3第1页
Java Rules中文版3第2页
Java Rules中文版3第3页
Java Rules中文版3第4页
Java Rules中文版3第5页
Java Rules中文版3第6页
Java Rules中文版3第7页
Java Rules中文版3第8页
Java Rules中文版3第9页
Java Rules中文版3第10页
Java Rules中文版3第11页
Java Rules中文版3第12页
Java Rules中文版3第13页
Java Rules中文版3第14页
Java Rules中文版3第15页
Java Rules中文版3第16页
Java Rules中文版3第17页
Java Rules中文版3第18页
Java Rules中文版3第19页
Java Rules中文版3第20页

试读结束, 可继续阅读

15积分/C币 立即下载 >