欢迎来到天天文库
浏览记录
ID:14756109
大小:74.80 KB
页数:31页
时间:2018-07-30
《达内java学习心得之易犯错误》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第1部分语法程序员们总是被层出不穷的复杂问题所困扰假如我们最基本的开放工具——设计和编写程序的语言本身就是复杂的那么这个语言自己也会成为这些复杂问题的一部分而非它们的解决方案了——C.A.R.Hoare,TheEmperor’sOldClothesJava语言从C++派生而来并借鉴了ObjectiveCEiffelSmalltalkMesa和Lisp这些语言的一些特性当使用其他语言的程序员转用Java来编程时他们很快就会发现Java的一些特性和自己以前所熟悉的语言非常相似因此这些程序员通常会认为这些特性在Java中和在以前所使用的语言中表现一致其实完全不是这样这些想法在C++程序员中尤其普
2、遍这一部分重点强调了Java语言上经常会绊倒新手的陷阱和语言行为本部分包括以下10个单元Item1什么时候被覆盖的方法并非真的被覆盖了本单元解释了调用子类的实例方法和静态方法之间的微妙差别Item2String.equals()方法与==运算符的用法比较”本单元解释了这两种方法比较字符串的不同之处并指出了常量池是如何混淆这两种用法的第1部分语法2tItem3Java是强类型语言本单元解释了基本类型的转换和提升的规则这对从C++转到Java的程序员尤为重要Item4那是构造函数吗本单元给出了一个经典的然而又非常简单的语言陷阱当我们培训新的Java学员时这个陷阱总是让学员们问出这样的问题编译器
3、怎么会没发现它Item5不能访问被覆盖的方法本单元又一次讨论了Java语言中的方法调用读完以后你将完全理解这个知识点Item6避免落入隐藏变量成员的陷阱本单元讨论了这一最常见的陷阱所有Java语言的入门课程都应该提及这个问题并且和this引用一起讨论Item7提前引用这一较短的单元向我们演示了什么是提前引用以及如何去避免它Item8设计可继承的构造函数本单元是取自来之不易的实践经验对于每一个想开发可重用Java类的程序员来说这个单元是必读的Item9通过引用传递基本类型本单元对从C++转换到Java的程序员特别有价值它解答了在Java中传递引用的相关问题Item10布尔运算符与短路运算符本
4、单元解释了Java编程中另一个常见的陷阱使用逻辑运算符单元中也举了一个使用短路short-circuit运算符的清晰例子Item1:什么时候被覆盖的方法并非真的被覆盖了好吧我承认本单元的标题确实带有一定的欺骗性虽然它的本意并非欺骗你而是帮助你理解方法覆盖的概念想必你已经阅读了一两本这样的Java书籍它们在开头都指出了面向对象编程的3个主要概念封装继承和多态理解这3个概念对于领会Java语言来说至关重要而搞懂方法的覆盖又是理解继承概念的关键部分覆盖实例方法会在Item5谈到本单元介绍静态方法的覆盖如果你还不明白两者的区别那么Item1和Item5正适合你假如你已经急不可待地喊出不能覆盖静态方
5、法那么你也许需要放松片刻再继续往下看不过在此之前先看看你是否能够猜出下面例子的输出结果Item1:什么时候被覆盖的方法并非真的被覆盖了u3这个例子摘自Java语言规范8.4.8.5节01:classSuper02:{03:staticStringgreeting()04:{05:return"Goodnight";06:}07:08:Stringname()09:{10:return"Richard";11:}12:}01:classSubextendsSuper02:{03:staticStringgreeting()04:{05:return"Hello";06:}07:08:Stri
6、ngname()09:{10:return"Dick";11:}12:}01:classTest02:{03:publicstaticvoidmain(String[]args)04:{05:Supers=newSub();06:System.out.println(s.greeting()+","+s.name());07:}08:}运行Test类的结果如下Goodnight,Dick要是你得出了同样的输出结果那么你或许对方法的覆盖有了较好的理解如果你的结果和答案不一致那就让我们一起找出原因我们先分析一下各个类Super类由方法greeting和name组成Sub类继承了Super类而且
7、同样含有greeting和name方法Test类只有一个main方法第1部分语法4t在Test类的第5行中我们创建了一个Sub类的实例在这里你必须明白的是虽然变量s的数据类型为Super类但是它仍旧是Sub类的一个实例如果你对此有些迷惑那么可以这样理解变量s是一个被强制转换为Super型的Sub类的实例下一行(第6行)显示了s.greeting()返回的值加上一个字符串紧随其后的是s.name()的返回值关键问题就在这里
此文档下载收益归作者所有