对于类的清理,首先在于按照一定次序销毁成员变量,但是对于有些类,创建了多个对象,有的变量在多个对象中被引用(无法销毁),清理工作变得复杂,需要计数器来记录创建的对象数目 。
构造器是隐性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》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。
JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造...
《Thinking+in+Java》读书笔记共38页.pdf.zip
Java》学习笔记 [TOC] 阅读计划 章节列表 对象导论 一切都是对象 操作符 控制执行流程 初始化与清理 访问权限控制 复用类 多态 接口 内部类 持有对象 通过异常处理错误 字符串 类型信息 泛型 数组 容器深入研究 Java...
在学习java的适合看看!有学习笔记,经过整理的。
学习笔记
java学习资料/笔记整理,含java语言入门中文版、JDK1.4.2手册、JSP由浅入深、Think In Java(中英文)、Thinking_in_Java_chinese_version、精通swing程序设计等8个编译的HTML帮助文档....
我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。
该资源包含了本人学习java时的笔记整理,还包含华为编程规范,以及thinking in java等多方面的学习资料,对于java从业者来说javaAPI文档以及经典书目必须要读,另外为了更具实践性还附了java实验指导书,希望对于...
自己写的java学习笔记,有完整的体系结构,有思维导图帮助理解和记忆
我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》 视频课程主要来自于:廖雪峰老师《Java 基础课程》 如涉及版权侵犯请联系我更正。 初来乍到,文笔稚嫩,学识浅薄,请多指教。
找了5本学习java的好书和一些例子代码和大家分享,希望能够对您能有所帮助。
春天思考 春天学习笔记
java软件笔试题 my notebook 我的笔记本,大部分是在大二大三的时候写的笔记,对于已经毕业的来说可能比较基础甚至naive。对面临校招和实习的同学应该会有所帮助。这里将不再更新,请移步我的博客:。 part 1:...
春天学习笔记 Bean初始化 BeanDefinitionBuilder 新的GenericBeanDefinition Bean的命名(非强制性) BeanNameGenerator AnnotationBeanNameGenerator Bean的别名(一般XML配置) 别名 BeanDefinition的注册 ...
[目录]用法一个包含...Thinking in Java》一书的源代码书行动中的Java并发有效的Java(第二) Java 8实战用Java思考(第四)深度JVM Java网络编程博客笔记包和类的名称设法具有描述性,但可能违反了建议的名称样式。