a) 重载:Java重载分两个阶段运行,首先是选取所有可用的方法(构造函数),然后是在其中选择最精确的一个。(“精确”的含义是参数可选范围相对比较小。如果要求选择特定重载方法,需要把实参类型强制转换为某个方法的形参类型。重载方法是静态(编译时)选择的。理想状态下,重载是不被鼓励的。此时,像构造器可以用静态工厂方法代替,参数多得方法可以用Builder模式。
b) 静态域:每一个静态域在声明它的类及其所有子类中共享一份单一的拷贝。
c) 静态方法:静态方法的调用不存在任何动态的分配机制。(因此静态方法是不能被重构的。)基于此,静态方法最好直接用类名调用,而不是用类实例。
d) final:final类型的静态域在被初始化之前存在被读取值的可能性。因此需要在使用final前适当确认其已被初始化。(比如某类的一个静态域是属于本类型的(调用本类的构造函数),如果它后面有静态final域是由本类的方法初始化的,那么这个域可能就不能被初始化。
e) instanceof:instanceof在其左操作符为null时返回false。(比如 null instanceof String)另外,instanceof要求其左右两个操作符如果都是类的话(原书上是这么说的),必须是子类父类的关系。(难道操作符还可以为简单类型吗?)
f) 在构造器里调用被重构(覆写)的方法,可能导致域值未被初始化就被使用。比如创建一个子类对象Child(调用子类构造方法)时,会调用其父类Father构造函数,而Father的构造函数如果调用了某个被重构的方法,那么显然在Child构造函数中super() 语句之后初始化的域如果在那个重构的方法中被调用,就会出现“域值未被初始化就被使用”的情况。
这种情况可以用惰性初始化解决。(惰性初始化形如:
if(XXX=null){
XXX=…;
}
return XXX; 的方式。
具体的惰性初始化的定义由于现在不能上网,还不能确定:(
g) 惰性初始化和积极初始化不要混合使用。(待解, P119)
h) 子类构造函数中,super() 只能写在程序的第一句:如果super的参数是需要函数计算获得的,那么显然这与前面所要求的super作为第一句的说法就矛盾了。这种问题的解决:交替构造器调用机制( alternate constructor invocation)。即首先使用一个构造函数(公有,如_Constructor()),其中调用形如this(arg_fun ())的语句(在这里完成参数的计算);然后再定义一个带参数的构造函数(私有,如_Constructor(arg)),其中调用super(arg),这样问题就解决了。这样的方法实质上是一个函数的连环调用。这种私有构造器捕获( Private Constructor Capture)是一种很实用的设计模式。
i) 静态方法调用的限定表达式(如text.stat_fun()中的限定表达式是text)的值将被忽略。(比如有public static void text(), ((ClassTest)null).text();也是可以正常调用text函数的。)
j) 循环中的声明:Java不允许一个本地变量声明语句作为一条语句在while, for, do循环中重复执行。在某些编译器中这种形式(如while(true){ test_class s = test_class()})将不被通过(书上这么说,JC中可以)。v
分享到:
相关推荐
Java Puzzlers 中文版(Java解惑) Java 谜题 1——表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转 吗? public static boolean isOdd(int i){ return i % 2 == 1...
《JAVA PUZZLERS》是一本深受欢迎的Java编程书籍,旨在揭示编程语言中的微妙陷阱和易犯错误,帮助开发者提升编程技能和理解。这本书以其独特的“谜题”形式,通过一系列精心设计的问题,引导读者探索Java语言的深奥...
谜题 40:不情愿的构造器 尽管在一个方法声明中看到一个 throws 子句是很常见的,但是在构造器的声明 中看到一个 throws 子句就很少见了。下面的程序就有这样的一个声明。那么, 它将打印出什么呢?...
本書包含了Java程式語言和核心函式庫中的各種謎題,任何具備使用Java經驗的讀者都可以看得懂,但是書裡有不少謎題的難度頗高,即便是對經驗豐富的Java程式設計師而言,都是一項挑戰,所以如果你解不出來,別覺得難過...
通过源码,我们可以深入理解Java的OOP特性,避免在设计类和接口时犯错。 总之,《Java Puzzlers》结合源码,为我们提供了一个深入了解Java语言特性和陷阱的宝贵资源。通过对这些puzzlers的解密,我们不仅可以避免...
Java Puzzlers(韩语版) 讲述了java中容易混淆的问题。 值得一看!
java puzzlers 中文版
此外,Java Puzzlers 还会探讨一些多线程问题,如线程安全、synchronized关键字的使用以及并发工具类的正确操作。这些谜题揭示了多线程编程中的常见误解和陷阱,帮助你构建出更健壮的并发应用程序。 总的来说,...
6. 集合框架:Java集合框架包含了大量的类和接口,如List、Set、Map等。书中可能讲解它们之间的区别,以及如何选择合适的数据结构,如ArrayList与LinkedList,HashMap与TreeMap的区别。 7. Java API使用:书中还...
《Java Puzzlers Sampler》是由Java领域的权威专家Joshua Bloch和Neal Gafter共同编著的一本书,书中收录了一系列令人困惑、出乎意料的Java编程问题,旨在帮助开发者更好地理解和避免这些潜在的陷阱。书中的...
《Java+Puzzlers》是一本深受欢迎的Java编程书籍,它主要探讨了在Java编程中容易被忽视或误解的一些小细节。这本书分为中文和英文两个版本,同时附带源代码,帮助读者深入理解问题并进行实践。"Puzzlers"在这里指的...
这本书通过一系列精心设计的编程谜题(即"puzzlers"),帮助读者深入理解Java语言的内在机制和陷阱。源代码是书中各个谜题的实现,对于学习和理解Java的微妙之处非常有帮助。 首先,我们来看"java-puzzlers"这个...
综上所述,`java_puzzlers`中文版中的这两个谜题,揭示了Java编程中容易忽视的细节,包括取余运算的符号敏感性和浮点数计算的不精确性。通过深入理解这些问题及其解决方案,开发者可以编写更加健壮和准确的代码。
JAVA解惑 中文和英文 Like many books, this one had a long gestation period. We've collected Java puzzles for as long as we've worked with the platform: since mid-1996, in case you're curious. In early...
- **Java语言特性**:书中可能会详细介绍Java语言的基础特性,如面向对象编程(OOP)、类与对象的概念、封装、继承和多态等。 - **数据类型**:包括基本数据类型(如int、float)和引用数据类型(如String、Array)...
《JAVA解惑》是一本专为Java爱好者设计的书籍,旨在帮助读者解决在学习和使用Java过程中遇到的各种问题。这本书以PDF格式提供,方便电子阅读和保存。在深入探讨Java编程语言的过程中,它覆盖了从基础概念到高级特性...
Java™ Puzzlers: Traps, Pitfalls, and Corner Cases.chm,英文版本,chm 格式,大小 1 Mb,作者:Joshua Bloch、Neal Gafter。 内容预览: Chapter 1. Introduction Chapter 2. Expressive Puzzlers Puzzle 1: ...
这本书的标题《Java Puzzlers: Traps, Pitfalls, and Corner Cases》揭示了其内容核心——解决Java编程语言中的陷阱、缺陷和边缘案例。在描述中提到,本书旨在帮助读者对Java编程中看似棘手的问题进行讲解,从而使...
本书深入研究Java编程语言及其核心类为的细微之处,特写95个有关Java或其他类库的陷阱和缺陷的谜题,其中大多数谜题都采用短程序的形式给出。在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上...