`
laststand
  • 浏览: 9933 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Thinking in Java 学习笔记 三

阅读更多

对于类的清理,首先在于按照一定次序销毁成员变量,但是对于有些类,创建了多个对象,有的变量在多个对象中被引用(无法销毁),清理工作变得复杂,需要计数器来记录创建的对象数目 。

 

构造器是隐性static,private是隐性final。记住这两点有助于理解许多问题。


一个两难的问题:构造器用于创建对象,需要在对象被创建时调用。对于多态 ,如类中的对象方法绑定,直到运行时才能确定(也只有这样,才能发挥多态的效力)。如果在构造器中调用多态方法,会有什么样的结果?构造执行之时,整个对象之时初始化一半,直接调用的结果可能使用了未初始化的变量,这将造成风险 。


简单来说,一个类、方法最终被编译为中间代码(可能是本机环境的汇编),然后编译为可以运行的执行代码,对于最后生成的代码而言毕竟是写死的了,所为多态的实现,运行时确定的概念又有什么意义?多态的概念应该只是对于一个类、一个方法而言的,对于整个项目,没有什么是不能确定的(随机忽视);对与类、方法而言,它自身确实不能确定传入的参数是原型还是向上转型的产物,此即多态。


初始化的顺序:
1) 在其他任何事物发生之前 ,将分配给对象的存储空间初始化成二进制的零 。
2) 调用基类的构造器。如有与子类同名的方法(覆盖),调用的为覆盖的方法。
3) 按照声明的顺序调用成员初始化方法 。
4) 调用子类的构造器。


由于基类中调用方法可能会产生不确定性(因为你也不知道什么时候自己会变成基类,你的public或protected方法被覆盖了~),最好在构造器中调用final(不可覆盖)或private(隐性final)的方法。这是为了避免未知的错误(在C++中的表现更为合理些)。


Java SE5之后的新特性:协变返回类型。之前强制返回类型、参数 、方法名都一致才能形成覆盖。新特性允许,覆盖方法的返回类型可以是子类(而非强制基类)


多态是继承灵活应用的表现,但是在设计之初考虑继承会加重设计负担 ,还有优先使用组合来解决问题。组合、继承的关系也是耦合的话,继承是强关系(编译时确定),组合要若上很多(在运行时仍然可以改变)


Java提供抽象方法的机制,abstract关键字,包含一个或多个抽象方法的类称为抽象类。(不限定编译报错),对于抽象类编译器限定无法创建对象。


一个接口 表示:所有实现了这个接口的类看起来都像这样。Java没有多重继承,但实现多个接口可以实现这个需要,相比C++,这样的优势在于,interface都是没有任何实现的类,这样就避免了多个基类中相同方法实现间的冲突。在组合类与接口的时候,类必须放在前面声明,后面才跟着接口。


放入接口中的任何域都是默认隐式static和final的。

 

分享到:
评论

相关推荐

    Thinking in Java 自学笔记——第二章 一切皆对象

    Thinking in Java 自学笔记——第二章 一切皆对象 个人原创,不喜勿喷。

    Thinking in java学习笔记

    这是我经过半年的认真研读《thinking in java》这本书的读书笔记,涉及到从容器一章开始的所有后续章节的内容,只有把握我笔记中的内容我想你就差不多弄懂了<thinking in java>这本书的精华

    Thinking In java学习笔记

    这是我看Thinking in java 做的笔记,和大家分享下,如有不明白的的地方可与我私信,或者直接问度娘。

    Java学习笔记.pdf

    我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。

    java基础补足和thinking In Java学习.rar

    JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造...

    《Thinking+in+Java》读书笔记共38页.pd

    《Thinking+in+Java》读书笔记共38页.pdf.zip

    恒生电子JAVA笔试试题-Thinking-In-Java-Notes:ThinkinginJava学习笔记

    Java》学习笔记 [TOC] 阅读计划 章节列表 对象导论 一切都是对象 操作符 控制执行流程 初始化与清理 访问权限控制 复用类 多态 接口 内部类 持有对象 通过异常处理错误 字符串 类型信息 泛型 数组 容器深入研究 Java...

    Thinking in Java

    在学习java的适合看看!有学习笔记,经过整理的。

    Thinking_in_Java(第四版_).rar

    学习笔记

    java学习资料/笔记整理(二)

    java学习资料/笔记整理,含java语言入门中文版、JDK1.4.2手册、JSP由浅入深、Think In Java(中英文)、Thinking_in_Java_chinese_version、精通swing程序设计等8个编译的HTML帮助文档....

    windows10上安装mysql详细图文教程.pdf

    我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。

    java日常学习资料整理

    该资源包含了本人学习java时的笔记整理,还包含华为编程规范,以及thinking in java等多方面的学习资料,对于java从业者来说javaAPI文档以及经典书目必须要读,另外为了更具实践性还附了java实验指导书,希望对于...

    String学习笔记

    自己写的java学习笔记,有完整的体系结构,有思维导图帮助理解和记忆

    Tomcat安装、配置和部署笔记 - 辛伯达 - 博客园.pdf

    我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。

    5本java学习用书

    找了5本学习java的好书和一些例子代码和大家分享,希望能够对您能有所帮助。

    thinking-in-spring:春天学习笔记

    春天思考 春天学习笔记

    java软件笔试题-MyNotebook:我大学时期的笔记本

    java软件笔试题 my notebook 我的笔记本,大部分是在大二大三的时候写的笔记,对于已经毕业的来说可能比较基础甚至naive。对面临校招和实习的同学应该会有所帮助。这里将不再更新,请移步我的博客:。 part 1:...

    thinking-in-spring:学春天

    春天学习笔记 Bean初始化 BeanDefinitionBuilder 新的GenericBeanDefinition Bean的命名(非强制性) BeanNameGenerator AnnotationBeanNameGenerator Bean的别名(一般XML配置) 别名 BeanDefinition的注册 ...

    java-study:JAVA示例,关于并发和缓存

    [目录]用法一个包含...Thinking in Java》一书的源代码书行动中的Java并发有效的Java(第二) Java 8实战用Java思考(第四)深度JVM Java网络编程博客笔记包和类的名称设法具有描述性,但可能违反了建议的名称样式。

Global site tag (gtag.js) - Google Analytics