文档章节

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

一万
 一万
发布于 2016/05/02 16:23
字数 1606
阅读 113
收藏 2

3.1

本节作者为了简化System.out.println操作,引入了自己写的一个Print类,里面的静态方法print()内部就是调用了System.out.println()。

在使用Print类时运用了静态import。这个1.5添加的新特性,它import具体的类,这样在代码中可以使用该类的静态方法,也可以import类的静态方法,导入单一的静态方法。例如要使用com.test.Print类的静态方法可以:

import static com.test.Print.*;

注意一定要带*,代表静态导入Print类下的所有静态方法,这样在代码中可以直接使用方法名调用方法而不用加类名,要导入一个静态方法就把*替换成方法名即可。

 

3.5

整数之间除法的结果会直接去掉小数位而不是四舍五入的结果。

 

本小节的示例程序中使用了Random类的对象,如果构造函数无参数,则会使用当前时间作为随机数生成器的种子。如果在构造函数的参数中指定固定的种子,那么产生的随机数序列总是相同的。


一元加号的存在是为了与一元减号相对应,它唯一的作用是将较小类型的操作数提升为int。

 

3.6

自增运算符和自减运算符分为前缀式和后缀式两种,前缀式是++或--在变量或表达式前。前缀式是先执行运算再生成值,而后缀式则先生成值再执行运算。

 

3.8

与、或、非操作只可应用于布尔值,与C++不同,C++认为非零为true,而Java只能使用布尔类型。

 

短路:一旦能够明确无误的确定整个表达式的值,就不再计算表达式的余下部分了。

 

3.9

C、C++或者Java中,二进制数没有直接常量表示方法。Java中,使用Integer和Long类的静态方法toBinaryString()可以输出二进制表示的字符串。

如果给变量赋值,字面常量超出了变量的范围,编译器会报错。

 

用小数字面常量给float赋值,编译器通常会将其作为双精度处理,所以如果没有尾随f,会报错。

 

Java的指数字面常量中e或者E代表10的幂次。

 

3.10

按位与、按位或、按位异或也可以用于布尔类型,但是判断表达式时不能短路,按位非不可以用于布尔类型。

 

练习10中要求构造两个int,有交替的二进制位1和0,一个以1结尾一个以0结尾。提示中写到用十六进制是最简单的表示方法,因为十六进制一个数正好代表四个位。

 

3.11

<< 左移操作符,左移位后补零;

>>有符号右移操作符,右移后若符号为正,则在高位插入0,若为负则插入1。

还有一种无符号右移操作符>>>无论正负都插入0

 

char、byte或short移位前会被转换成int,且得到的结果也是int。long移位后得到的结果是long。

 

第二段有这么一段话“对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会有用。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。” 不理解,感谢@阿信sxq的解答,把答案也放在这里供大家参考:

对上面那段话的理解是:移位操作符操作的运算对象是二进制的“位”,int类型是32位也就是2的5次幂 !如果移32位以上,那么原来的数的信息会全部丢失,这样也就没有什么意义了!所以上面的“只有右侧的5个低位才会有用”说的是:移位操作符右端的那个数(化成二进制)的低5位才有用,即
X < <y;
是指y的低5位才有用,即不能大于32。 而对于long型也是同样的道理!
因此,如果对一个int 型,进行移位,X < <y; 当y小于32时,移位后的结果一般都在我们的预料当中;而如果y大于32时,由于移位超出了int所能表示的范围,这时就先把y化成二进制数,然后取该二进制数右端的低5位,再把这5位化成十进制,此时的这个十进制就是要对X移动的位数。
例如: int int a=140;
a << 34
System.out.println(Integer.toBinaryString(a << b));
上面那两个语句的执行过程是:先把a化成二进制数:10001100

执行语句 a << 34 对a左移32位时,先把 34化成二进制:100010,对该二进制数取右边5位,即00010,化成十进制数为2,所以实际上是对a左移两位。现在,地球人都会知道上面程序的输出结果是:1000110000

 

 

 

在使用>>>=应注意,如果对byte或short值进行移位,它们会先被转换成int,再进行右移操作,然后被阶段赋值给原来的类型,这可能会得到-1的结果。

 

练习13中要对char类型以二进制形式展示,调用Integer.toBinaryString()方法将char类型作为参数传入即可。而如果在System.out.println方法直接传入char打印出的是字符,将char转换为int打印出数值。

 

3.15

Java允许把任何基本数据类型转换成其他基本数据类型,除布尔型外。类数据类型不允许转换,除非类族之间的转换。

 

类型提升,对基本类型执行算术操作和按位操作,只要类型比int小,那么运算之前这些值会自动转换成int。

所以要将结果赋值给原类型需要显示类型转换,而+=这样的复合操作符不需要这样的转换,它可以自动转换。

© 著作权归作者所有

一万
粉丝 30
博文 102
码字总数 173386
作品 0
朝阳
程序员
私信 提问
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
3.9K
8
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
685
1
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
733
1
读书笔记之《Java并发编程的艺术》-java中的锁

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
395
0

没有更多内容

加载失败,请刷新页面

加载更多

官方来源的 Duo Mobile App 解决了我的 Network Difficulties 问题

https://help.duo.com/s/article/2094?language=en_US 我利用百度搜索下载了一个 Duo Mobile App (由于 Google Play)在大陆不可用。 在扫描旧手机上的 Duo Mobile App 的二维码时, 显示出错...

圣洁之子
12分钟前
2
0
Zabbix监控Mysql容器(Docker容器)主从是否存活

1、在Zabbix Web端创建模板 2、为该模板创建监控项 3、创建触发器 4、在zabbix-agent端操作 在/etc/zabbix/zabbix_agentd.d新建customize.confw文件 内容如下 UserParameter=mysql.replicat...

abowu
14分钟前
1
0
基于 RocketMQ 的同城双活架构在美菜网的挑战与实践

本文整理自李样兵在北京站 RocketMQ meetup分享美菜网使用 RocketMQ 过程中的一些心得和经验,偏重于实践。 嘉宾李样兵,现就职于美菜网基础服务平台组,负责 MQ ,配置中心和任务调度等基础...

大涛学长
20分钟前
2
0
设计模式之:外观模式和桥接模式

作者:DevYK 链接:https://juejin.im/post/5d7e01f4f265da03b5747aac 外观模式 介绍 外观模式 (Facade) 在开发过程中的运用评率非常高,尤其是在现阶段,各种第三方 SDK “充斥” 在我们周边...

Java架构Monster
21分钟前
1
0
人证合一核验设备

人脸身份验证机,人证合一设备1:N如我们现在在车站或一些重要的场所如步行街、城中村等人流密集的场所应用的人脸识别布控系统,其特点是动态和非配合。所谓的动态也就是识别的不是照 片,不是...

非思丸智能
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部