文档章节

《Java编程思想》第四版读书笔记 第七章

一万
 一万
发布于 2016/05/11 16:03
字数 1392
阅读 105
收藏 4

行业解决方案、产品招募中!想赚钱就来传!>>>

复用代码的两种方法:

1、组合,将对象的引用用于新类;

2、继承。

 

7.1

每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而却只有一个对象时,toString()方法将会被调用。

7.1的倒数第二段最后一句话不明白,查了一下英文原版,我觉得可以这么翻译:

如果没有在定义处初始化,将不能保证发送给对象的引用信息前(按作者前文所述,发送给对象的引用信息可以理解为我们常说的调用对象的方法)它会被初始化,这样将会造成运行时异常。

 

7.2

Java中可以为每个类都创建main()方法。即时一个程序中包含多个类,也只有命令行所调用的那个类的main()方法会被调用。即时类Cleanser不是一个public类,如果命令行滴啊用java Cleanser,那么Cleanser.main()仍然会被调用。即使那个类只有包访问权限,其public main()仍然是可访问的。

在一个main内部还可以显示的调用另一个类的main。

当创建了一个导出类的对象时,该类包含了一个基类的子对象。这个子对象与用基类直接创建的对象是一样的。二者的区别在于后者来自于外部,而基类的子对象被包装在导出类对象内部。

练习5是想告诉我们,导出类中如果在定义处初始化的对象,他们执行的顺序是:

基类的构造函数——导出类中定义处初始化的对象——导出类的构造函数。

经过编程测试,这个顺序无论导出类有无默认构造函数,构造函数中是否显示调用super()都成立。

7.4

如果基类拥有某个已经被多次重载的方法名称,导出类中另外定义一个重载的版本并不会屏蔽在基类中的任何版本(这种特性与C++不同)。因此,无论在该层或者它的基类中对方法进行定义,重载机制都可以正常工作。

这种机制可能是会代码变得混乱,从1.5开始增加了@Override注解。当要覆写某个方法时,可以选择添加这个注解,在不留心重载而不是覆写了这个方法,编译器就会报错。简言之,@Override注解可以防止在不想重载时意外的进行了重载。

 

7.7

作者认为,虽然继承在OOP编程中占用重要的位置,但是应该谨慎使用。到底是使用组合还是继承,一个最清晰的判断方法是想一想是否需要从新类向基类进行向上转型。如果必须向上转型,则继承是必要的;但如果不需要,应当好好考虑是否需要继承。

练习17在给我们预习多态的概念,虽然函数函数是基类的引用,但是函数体内是实参(导出类)的方法被调用,而不是基类的。

7.8

使用到final有三种情况:数据、方法和类。

final数据:

final用于基本类型则定义了该类型的一个常量;用于对象,表示该对象的引用恒定不变(而改对象的属性是可以更改的)。

文中说:“在对这个常量进行定义的时候,必须对其进行赋值。”这句话不能理解为必须在定义处赋值,经过编程验证,对于static final可以在static语句块中对其进行赋值,而对于final可以在构造函数中进行赋值。也许作者想表达的意思是定义了常量,就必须在某处进行赋值。

一个既是static又是final的字段只占据一段不能改变的存储空间。带有恒定初值的final static基本类型全用大写字母命名,并且字与字之间用下划线隔开。

我们不能因为某数据是final的就认为在编译时可以知道它的值。在运行时可使用随机生成的数值为其初始化。

在参数列表中以声明的方式将参数指明为final。这意味着无法在方法中更改参数引用所指向的对象,或者基本类型的值。这一特性主要用来想匿名内部类传递数据。

final方法:

使用final方法的主要原因是防止任何继承类覆盖这个方法。

在Java早起实现,使用final方法代表该函数内联,以便来提高代码效率。在Java 5/6中,不再需要使用final方法来进行优化了。

类中所有的private方法都隐式的指定为final的。因为无法取用private方法,所以也就无法覆盖它。

final类:

不能被继承。final类中的方法隐式的被指定为final的。

7.9

类加载发生于创建类的第一个对象或访问了static域或static方法之时。构造函数是隐式static的。因此更准确的说,类是在其任何static成员被访问时加载。所有的static对象和static代码段都会在加载时依定义类时的书写顺序依次初始化。

一万
粉丝 30
博文 102
码字总数 173386
作品 0
朝阳
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
6
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6K
18
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0

没有更多内容

加载失败,请刷新页面

加载更多

【重讲拉勾】5 MySQL索引失效

文章内容输出来源:拉勾教育Java高薪训练营 【重讲拉勾】1 JVM内存结构 https://my.oschina.net/u/4033707/blog/4444869 【重讲拉勾】2 Java容器 https://my.oschina.net/u/4033707/blog/44...

不正经的大叔
24分钟前
16
0
每个程序员应阅读的最具影响力的单一书籍是什么? [关闭]

问题: If you could go back in time and tell yourself to read a specific book at the beginning of your career as a developer, which book would it be? 如果你可以回到过去并告诉自己......

技术盛宴
40分钟前
5
0
Spring Cloud系列之微服务介绍

相信我,请认真读完,点开每一个链接,或许你才能真正了解什么是微服务?什么是分布式?什么是云计算?绝对没有多余! 1 微服务 微服务架构是“新常态”。构建小型的、自包含的、随时可以运行...

冯文议
55分钟前
6
0
在Visual Studio中使用Git [关闭] - Using Git with Visual Studio [closed]

问题: As a long-time Visual SourceSafe user (and hater) I was discussing switching to SVN with a colleague; 作为一个长期的Visual SourceSafe用户(和仇恨)我正在讨论与同事转换到S......

富含淀粉
今天
26
0
第三讲:毕业论文(设计)开题报告

本讲讲解开题报告的设计。 一、字体与格式 参看第二讲的内容,这里不再赘述。 二、头部信息 如下图所示,样式不要有太多的差异化。 三、选题的背景与意义 2.1背景 选题背景即阐述做这件事情(...

刘日辉
今天
250
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部