Thinking in Java 阅读总结.doc_第1页
Thinking in Java 阅读总结.doc_第2页
Thinking in Java 阅读总结.doc_第3页
Thinking in Java 阅读总结.doc_第4页
Thinking in Java 阅读总结.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Thinking in Java 阅读总结小鸟渊1、 关于什么是索引。未赋予具体对象的变量称为索引,如下语句:Public class IndexString index;/这个就是索引Index=new String(“”);/可以对索引赋予对象的用注意:对象变量中保存的是这个对象的引用,而不是具体内容。2、 小心使用break与continue。一般情况下break语句完全终止当前循环,continue语句停止本次循环并开始下次循环。例:while(true)break;/跳出循环,执行这个循环之后语句continue;/结束本次循环,回到这个循环的开始处开始下一次循环Next ;若搭配标签使用,可实现与goto类似的功能。下面在需要执行递增操作的for语句中讨论break与continue的使用情况与结果public class ForTextpublic static void main(Stringargs)int i=0;int j=0;out:for(;j5;j+)System.out.println(0:现在是外层循环的开始语句);System.out.println(此时j=+j+,i=+i);in:for(;i5;i+)if(i=0) System.out.println(1:这是第一轮循环,此时i值为:+i);if(i=1)System.out.println(2:本次循环我在此处使用continue,此时i值为:+i);continue;if(i=2) System.out.println(3:在我的设想中,这句话应该紧跟在语句2之后,此时i值为:+i);if(i=3)System.out.println(4:现在测试使用break语句,此时的i值为:+i);System.out.println(在我的设想中下一句话应该为第5句话,且i值为3);break;if(i=4)System.out.println(6:现在测试使用continue+标签语句);System.out.println(在我设想中下一句话为第0句话,且i值为5,j值比上一次出现时递增1);I+;continue out;if(i=5)System.out.println(8:现在测试break+标签语句);System.out.println(在我设想中下一句话应该是第7句话,且i值为5);break out;System.out.println(5:现在是外层循环的最后一个语句,j值为+j+,i值为+(i+);System.out.println(7:出现这个语句时,两个循环都已经结束);System.out.println(此时i=+i+,j=+j);仔细阅读上面这个例子,并是运行,查看输出的结果并与你自己设想对比看是否一致。通过运行上例我们可以发现:(1)、在循环内使用continue;语句,则会是循环重新开始,这是for语句中的自动递增就会执行;(2)、在循环内使用break;语句,则会结束这个循环,在例子中我们可以看到用break;跳出内层循环,并执行外层循环的语句。这时候,for循环的自增语句不会执行,因为这个for语句已经结束了;(3)、在内层循环使用continue+标签;语句转到外层循环时,内层循环的自增语句不会执行,但外层循环的自增语句会执行;(4)、在内层循环使用break+标签;语句跳到外层循环,则两个循环都结束。类似于连续使用两个各break;语句。4、 继承中的访问权限控制。仔细下个例子,我们可以从中体会到一些问题的解释。class Fatherpublic void printlnPu()System.out.println(This is a Public moth.);private void printlnPr()System.out.println(This is a Private moth.);protected void printlnPo()System.out.println(This is a Protected moth.);public final void printlnPf()System.out.println(This is a final moth.);class Child extends Father/public void printlnPf()System.out.println(如果去掉注释,看看会发生什么?);public class textexpublic static void main(Stringargs)Child child=new Child();child.printlnPu();/child.printlnPr();/如果去掉这个注释,看看会发生什么?trychild.printlnPo();catch(Exception e)System.out.println(如果看见这句话,表明子类不能继承父类的protected方法);通过运行上面的代码,可以总结出:(1)、在父类中被定义为private的方法在导出类中不能使用,在父类中定义为默认访问权限的方法只能被与父类在同一个包中的导出类继承,若父类与子类不在同于个包中,则导出类只能继承父类中被定义为public与protected的方法;(2)、父类中定义为final的方法不能在其导出类中被覆盖。8、抽象类与接口 (1)、接口中的任何域都会被编译器自动定义为static与final,而抽象类中的域可以自己控制; (2)、抽象类中可以有具体定义的方法,并且可以自己决定这个方法的访问控制权限,接口中只能有方法的声明,并且每个方法都会自动设置为public; (3)、要创建不带任何方法定义和成员变量的基类,应该选择接口,反之你应该选择抽象类; (4)、接口的继承关键字尾implements,抽象类继承关键字为extends。多重继承中,要先写extends,然后再写implements; (5)、从医个抽象类继承,如果你需要使用这个导出类的对象,则你必须覆盖基类中的所有抽象的方法,否则,这个导出类你也必须定义为抽象类,并且抽象类是不能创建对象的; (6)、抽象类和接口可以被包含,就是可以作为内部类定义:例:public class abinabstract class abinterface class in上面这段代码并不会产生编译错误当然也应该可以使用11、关于类中的toString。查看api可以知道,每个类中都有一个方法toString,这个方法是继承自Object基类中的,其返回的为String类型:类名+此对象的的十六进制的哈希码(getClass().getName()+Integer.toHexString(hashCode())如果你想这个toString对你又跟确切的意义很用处,你可以在你的类中覆盖这个方法。13、System.out,System.in,System.err。System.out是标准输出流,System.in是标准输入流,System.err是标准错误输出流,其中System.out与System.err都是PrintStream类型的,所以他们都可以调用println方法向屏幕输出显示。14、能否用常量来格式化输出(format)?在format中使用一个变量来控制输出字符的格式是可以实现的例:format(“%-15 %10.2fn”,”tax”,0.06);等价于下段代码:int a1=15,a2=10;String s=”%-“+a1+”s %”+a2+”.2fn”;format(s,”tax”,0.06);15、Java中的各种数据能否如C中那样互相转换输出?在使用Java中的format时,能否如才c语言中的printf一样用各种格式表示同一个变量呢?下面的代码引用Thinking In Javaimport java.math.*;import java.util.*;public class Conversion public static void main(String args) Formatter f = new Formatter(System.out); char u = a; System.out.println(u = a); f.format(s: %sn, u); / f.format(d: %dn, u); f.format(c: %cn, u); f.format(b: %bn, u); / f.format(f: %fn, u); / f.format(e: %en, u); / f.format(x: %xn, u); f.format(h: %hn, u); int v = 121; System.out.println(v = 121); f.format(d: %dn, v); f.format(c: %cn, v); f.format(b: %bn, v); f.format(s: %sn, v); / f.format(f: %fn, v); / f.format(e: %en, v); f.format(x: %xn, v); f.format(h: %hn, v); BigInteger w = new BigInteger(50000000000000); System.out.println( w = new BigInteger(50000000000000); f.format(d: %dn, w); / f.format(c: %cn, w); f.format(b: %bn, w); f.format(s: %sn, w); / f.format(f: %fn, w); / f.format(e: %en, w); f.format(x: %xn, w); f.format(h: %hn, w); double x = 179.543; System.out.println(x = 179.543); / f.format(d: %dn, x); / f.format(c: %cn, x); f.format(b: %bn, x); f.format(s: %sn, x); f.format(f: %fn, x); f.format(e: %en, x); / f.format(x: %xn, x); f.format(h: %hn, x); Conversion y = new Conversion(); System.out.println(y = new Conversion(); / f.format(d: %dn, y); / f.format(c: %cn, y); f.format(b: %bn, y); f.format(s: %sn, y); / f.format(f: %fn, y); / f.format(e: %en, y); / f.format(x: %xn, y); f.format(h: %hn, y);boolean z = false; System.out.println(z = false); / f.format(d: %dn, z); / f.format(c: %cn, z); f.format(b: %bn, z); f.format(s: %sn, z); / f.format(f: %fn, z); / f.format(e: %en, z); / f.format(x: %xn, z); f.format(h: %hn, z); 通过认真分析这个长长的代码和测试其输出结果:(1)、字符型不能转换成数值类型输出;(2)、整型不能转换成浮点型输出;(3)、浮点型不能转换成整型或者字符型输出。16、关于RTTI与反射RTTI就是:运行时获取类型信息的意思。反射是RTTI的延伸,不同之处在于RTTI是在编译时需要载入class对象边检查,而反射是在运行期间才进行这一项工作的。简单的时候就是,RTTI虽然不需要确切知道运行时需要的是哪一个类,当必须要让编译器知道每个有可能用到的类的信息,而反射则可以在运行时才去获得类的信息,而无需再编译时让编译器知道所有类的相关信息。关于反射与RTTI的内容可以具体参考JDK文档中的java.lang.Class类与java.lang.reflect类库详细介绍。20、关于输入与输出java.io.InputStream类:是抽象类,表示字节输入流的所有类的超类。java.io.Reader:也是抽象类,用于读取字符流的类的超类。java.io.InputStreamReader:继承自Reader,是字节流转向字符流的桥梁。java.io.BufferedReader:继承自Reader,带缓冲的的读取字符,用于包装继承自Reader的类。java.io.BufferedInputStream:继承自InputStream。使用时的原则是尽量尝试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论