2012-03-30
80-97/913
Java编程思想第四版——第九天
3.9 直接常量
一般来说,使用直接常量,编译器可以准确的知道要生成什么样的类型,但有时候却是模凌两可的,这种时候必须对编译器加以适当的指导,用与直接量相关的某些字符来额外增加一些信息。
直接常量后面的后缀字符标志了它的类型:大写(或小写)的L,代表long(使用小写字母l容易造成混淆,因为它看起来很像数字1),大写(或小写)字母F,代表float,大写(或小写)字母D,则代表double。
十六进制数适用于所有整数数据类型,以前缀0x(或0X),后面跟随0-9或小写(或大写)的a-f来表示。
将一个变量初始化超出自身表示范围的值(无论这个值得数值形式如何),编译器都会报告一条错误信息。超出范围,会进行窄化转型。
八进制数由前缀0以及后续的0~7的数字来表示。
在C、C++或者java中,二进制数没有直接常量表示方法,但是,在使用十六进制和八进制记数法时,以二进制形式显示结果将非常有用。通过使用Integer和Long类的静态方法toBinaryString()可以很容易地实现这一点。如果将比较小的类型传递给Integer. toBinaryString()方法,则该类型将自动被转换为int。
3.9.1 指数记数法
在科学与工程领域,“e”代表自然对数的基数,约等于2.718(java中的Math.E给出了更精确的double型的值)。
C、C++以及java都用e代表“10的幂次”。
3.10 按位操作符
按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件寄存器内的二进制位。Java的设计初衷是嵌入式电视机机顶盒内,所以这种面向底层的操作仍被保留了下来。不会过多地用到位操作符。
按位操作符和逻辑操作符都使用了同样的符号:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。由于位是非常小的,所以按位操作符仅使用了一个字符。按位操作符可与等号(=)联合使用,以便合并运算和赋值:&=、|=、^=(~是一元操作符,不可与=联合使用)。
布尔类型作为一种单比特值,有些独特。可以对它执行按位“与”、按位“或”和按位“异或”运算,但不能执行按位“非”(大概是为了避免与逻辑NOT混淆)。对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是它们不会中途短路。针对布尔值进行的按位运算新增了一个“异或”逻辑操作符,没有包括在“逻辑”操作符列表中,移位表达式中,不能使用布尔运算。
3.11 移位操作符
移位操作符操作的运算对象也是二进制的“位”,只可用来处理整数类型。
按位和移位操作符都不是很理解,后面需要着重了解下。
3.12 三元操作符if-else
三元操作符也称为条件操作符,有三个操作数,属于操作符的一种,最终也会生成一个值,与普通if-else语句是不同的。
boolean-exp ? value0 : value1
如果boolean-exp结果位true,计算value0,计算结果为最终值,如果false,计算value1,结果为最终值。也可以用普通if-else,但这样更简洁。C发明了该操作符,此操作符的引入多半就是为了这种高效率的编程。如果打算频繁使用它,需要多作思量,它很容易产生可读性极差的代码。
3.13 字符串操作符+和+=
Java中的特殊用途:链接不同的字符串。
C++中引入操作符重载(operator overloading)机制,以便C++程序员可以为几乎所有操作符增加功能。但与C++的另外一些限制结合在一起,使得操作符重载成为了一种非常复杂的特性。Java中更易实现,但java程序员不能像C++和C#程序员那样实现自己的重载操作符。
表达式以一个字符串起头,后续所有操作数都必须是字符串型(编译器会把双引号内的字符序列自动转换成字符串)。
最先计算括号内
一个空的String后面跟随+和一个基本类型变量,转换成String。
3.14 使用操作符时常犯的错误
对表达式如何计算有点不确定,也不愿意使用括号。
Java中不会把int转换成布尔值
Java不允许随便把一种类型当作另一种类型来用。
3.15 类型转换操作符
类型转换(cast)的原意是“模型铸造”。在适当的时候,java会将一种数据类型自动转换成另一种。
窄化转换(narrowing conversion):将容纳更多信息的数据类型转换成无法容纳那么多信息的类型,有可能面临信息丢失的危险。编译器会强制进行类型转换。
扩展转换(widening conversion):不必显示地进行类型转换,新类型肯定能容纳原来类型的信息不会造成任何信息的丢失。
Java允许把任何基本数据类型转换成别的基本数据类型,布尔类型除外,后者根本不允许进行任何类型的转换处理。“类”数据类型不允许进行类型转换,将一种类型转换成另一种,必须采用特殊的方法(后面会讲到,对象可以在其所属类型的类族之间进行类型转换)。
3.15.1 截尾和舍入
执行窄化转换时,必须注意截尾与舍入问题。
float或double转型为整数值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
round()是java.lang的一部分,使用时不需要额外地导入。
3.15.2 提升
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
3.16 Java没有sizeof
C和C++中,sizeof()操作符可以知道数据项分配的字节数,使用的最大原因是为了“移植”。移植是令C和C++程序员颇为头痛的一个问题。
Java不需要sizeof(),因为所有数据类型在所有机器中的大小都是相同的,不必考虑移植的问题,已经被设计在语言中了。
3.17 操作符小结
能够对布尔型值进行的运算非常有限,只能赋予它true和false值,测试它为真还是假,不能将布尔值相加,或对布尔值进行其他任何运算。
如果对两个足够大的int值执行乘法运算,结果可能会溢出,但编译器不会报错或警告,运行时也不会出现异常,这说明java虽好,但也没有想象中那么好。
对于char、byte或者short,复合赋值并不需要类型转换。尽管它们执行类型提升,但也会获得与直接算术运算相同的结果,某些时候省略类型转换可使代码更加简练。
除了boolean以外,任何一种基本类型都可通过类型转换变为其他基本类型,当类型转换成一种较小的类型时,必须留意“窄化转换”的结果,否则会在类型转化过程中不知不觉地丢失了信息。
3.18 总结
Java中的操作符与C相似。
80-97/913
Java编程思想第四版——第九天
3.9 直接常量
一般来说,使用直接常量,编译器可以准确的知道要生成什么样的类型,但有时候却是模凌两可的,这种时候必须对编译器加以适当的指导,用与直接量相关的某些字符来额外增加一些信息。
直接常量后面的后缀字符标志了它的类型:大写(或小写)的L,代表long(使用小写字母l容易造成混淆,因为它看起来很像数字1),大写(或小写)字母F,代表float,大写(或小写)字母D,则代表double。
十六进制数适用于所有整数数据类型,以前缀0x(或0X),后面跟随0-9或小写(或大写)的a-f来表示。
将一个变量初始化超出自身表示范围的值(无论这个值得数值形式如何),编译器都会报告一条错误信息。超出范围,会进行窄化转型。
八进制数由前缀0以及后续的0~7的数字来表示。
在C、C++或者java中,二进制数没有直接常量表示方法,但是,在使用十六进制和八进制记数法时,以二进制形式显示结果将非常有用。通过使用Integer和Long类的静态方法toBinaryString()可以很容易地实现这一点。如果将比较小的类型传递给Integer. toBinaryString()方法,则该类型将自动被转换为int。
3.9.1 指数记数法
在科学与工程领域,“e”代表自然对数的基数,约等于2.718(java中的Math.E给出了更精确的double型的值)。
C、C++以及java都用e代表“10的幂次”。
3.10 按位操作符
按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件寄存器内的二进制位。Java的设计初衷是嵌入式电视机机顶盒内,所以这种面向底层的操作仍被保留了下来。不会过多地用到位操作符。
按位操作符和逻辑操作符都使用了同样的符号:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。由于位是非常小的,所以按位操作符仅使用了一个字符。按位操作符可与等号(=)联合使用,以便合并运算和赋值:&=、|=、^=(~是一元操作符,不可与=联合使用)。
布尔类型作为一种单比特值,有些独特。可以对它执行按位“与”、按位“或”和按位“异或”运算,但不能执行按位“非”(大概是为了避免与逻辑NOT混淆)。对于布尔值,按位操作符具有与逻辑操作符相同的效果,只是它们不会中途短路。针对布尔值进行的按位运算新增了一个“异或”逻辑操作符,没有包括在“逻辑”操作符列表中,移位表达式中,不能使用布尔运算。
3.11 移位操作符
移位操作符操作的运算对象也是二进制的“位”,只可用来处理整数类型。
按位和移位操作符都不是很理解,后面需要着重了解下。
3.12 三元操作符if-else
三元操作符也称为条件操作符,有三个操作数,属于操作符的一种,最终也会生成一个值,与普通if-else语句是不同的。
boolean-exp ? value0 : value1
如果boolean-exp结果位true,计算value0,计算结果为最终值,如果false,计算value1,结果为最终值。也可以用普通if-else,但这样更简洁。C发明了该操作符,此操作符的引入多半就是为了这种高效率的编程。如果打算频繁使用它,需要多作思量,它很容易产生可读性极差的代码。
3.13 字符串操作符+和+=
Java中的特殊用途:链接不同的字符串。
C++中引入操作符重载(operator overloading)机制,以便C++程序员可以为几乎所有操作符增加功能。但与C++的另外一些限制结合在一起,使得操作符重载成为了一种非常复杂的特性。Java中更易实现,但java程序员不能像C++和C#程序员那样实现自己的重载操作符。
表达式以一个字符串起头,后续所有操作数都必须是字符串型(编译器会把双引号内的字符序列自动转换成字符串)。
最先计算括号内
一个空的String后面跟随+和一个基本类型变量,转换成String。
3.14 使用操作符时常犯的错误
对表达式如何计算有点不确定,也不愿意使用括号。
Java中不会把int转换成布尔值
Java不允许随便把一种类型当作另一种类型来用。
3.15 类型转换操作符
类型转换(cast)的原意是“模型铸造”。在适当的时候,java会将一种数据类型自动转换成另一种。
窄化转换(narrowing conversion):将容纳更多信息的数据类型转换成无法容纳那么多信息的类型,有可能面临信息丢失的危险。编译器会强制进行类型转换。
扩展转换(widening conversion):不必显示地进行类型转换,新类型肯定能容纳原来类型的信息不会造成任何信息的丢失。
Java允许把任何基本数据类型转换成别的基本数据类型,布尔类型除外,后者根本不允许进行任何类型的转换处理。“类”数据类型不允许进行类型转换,将一种类型转换成另一种,必须采用特殊的方法(后面会讲到,对象可以在其所属类型的类族之间进行类型转换)。
3.15.1 截尾和舍入
执行窄化转换时,必须注意截尾与舍入问题。
float或double转型为整数值时,总是对该数字执行截尾。如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
round()是java.lang的一部分,使用时不需要额外地导入。
3.15.2 提升
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
3.16 Java没有sizeof
C和C++中,sizeof()操作符可以知道数据项分配的字节数,使用的最大原因是为了“移植”。移植是令C和C++程序员颇为头痛的一个问题。
Java不需要sizeof(),因为所有数据类型在所有机器中的大小都是相同的,不必考虑移植的问题,已经被设计在语言中了。
3.17 操作符小结
能够对布尔型值进行的运算非常有限,只能赋予它true和false值,测试它为真还是假,不能将布尔值相加,或对布尔值进行其他任何运算。
如果对两个足够大的int值执行乘法运算,结果可能会溢出,但编译器不会报错或警告,运行时也不会出现异常,这说明java虽好,但也没有想象中那么好。
对于char、byte或者short,复合赋值并不需要类型转换。尽管它们执行类型提升,但也会获得与直接算术运算相同的结果,某些时候省略类型转换可使代码更加简练。
除了boolean以外,任何一种基本类型都可通过类型转换变为其他基本类型,当类型转换成一种较小的类型时,必须留意“窄化转换”的结果,否则会在类型转化过程中不知不觉地丢失了信息。
3.18 总结
Java中的操作符与C相似。
发表评论
-
Java编程思想第四版——第二十一天
2012-05-04 12:56 5772012-05-04 163-170/913 Java编 ... -
Java编程思想第四版——第二十天
2012-05-03 13:45 7022012-05-03 158-163/913 Java编程思 ... -
Java编程思想第四版——第十九天
2012-05-02 11:08 8162012-05-02 149-158/913 Java编程思 ... -
Java编程思想第四版——第十八天
2012-04-27 13:12 10022012-04-27 142-149/913 Java编 ... -
Java编程思想第四版——第十七天
2012-04-25 11:18 7422012-04-25 138-142/913 Java编程思 ... -
Java编程思想第四版——第十六天
2012-04-24 13:50 7502012-04-24 131-138/913 Java编 ... -
Java编程思想第四版——第十五天
2012-04-23 17:14 7542012-04-23 121-131/913 Java编程思 ... -
Java编程思想第四版——第十四天
2012-04-19 11:28 6252012-04-19 118-121/913 Java编程思 ... -
Java编程思想第四版——第十三天
2012-04-18 12:08 6662012-04-18 108-118/913 Java编 ... -
Java编程思想第四版——第十二天
2012-04-09 10:58 7342012-04-09 102-108/913 Java编 ... -
Java编程思想第四版——第十一天
2012-04-05 12:21 8192012-04-05 Java编程思想第四版——第十一天 ... -
Java编程思想第四版——第十天
2012-03-31 12:03 5592012-03-31 97-102/913 Java编程思想 ... -
Java编程思想第四版——第八天
2012-03-29 12:09 4832012-03-29 76-80/913 3.6 自动递增和 ... -
Java编程思想第四版——第七天
2012-03-28 12:24 6572012-03-28 70-76/913 昨天找 ... -
Java编程思想第四版——第六天
2012-03-27 13:02 5282012-03-27 66-70/913 最近两 ... -
Java编程思想第四版——第五天
2012-03-23 15:09 9432012-03-23 60-66/913 2.5 方法、参数 ... -
Java编程思想第四版——第四天
2012-03-22 12:41 5892012-03-22 54-60/913 第二章 ... -
Java编程思想第四版——第三天
2012-03-21 12:40 5692012-03-21 47-54/913 1.12 并 ... -
Java编程思想第四版——第二天
2012-03-20 13:54 729今天本来以为进度可以 ... -
Java编程思想第四版——第一天
2012-03-19 15:57 784Java已经丢手一年了 ...
相关推荐
《Thinking in Java》是Bruce Eckel创作的一部Java编程经典著作,英文版的第四版更是深受全球程序员喜爱的参考资料。这本书全面深入地介绍了Java语言,不仅适合初学者,也对有经验的程序员提供了宝贵的洞见。它以...
《Java编程思想》是 Bruce Eckel 的经典著作,第四版更是深受广大Java程序员喜爱。这本书深入浅出地讲解了Java语言的核心概念和技术,包括面向对象编程、类与对象、继承与多态、接口、异常处理、集合框架、泛型、...
第四版在原有的基础上进行了更新,加入了更多现代Java特性,如泛型、枚举、集合框架等。 1. **面向对象编程**:Java是一种纯面向对象的语言,理解类、对象、接口以及它们之间的关系至关重要。类是对象的蓝图,通过...
### 《用Java思考》第四版 —— Bruce Eckel 著 #### 书籍概述 本书为《用Java思考》的第四版,作者是Bruce Eckel,MindView公司的总裁。这本书自出版以来就受到了广大Java程序员的高度评价。本书并非扫描版本,...
第四版作为最新的版本,涵盖了从基础语法到高级特性的全面内容,旨在帮助读者理解并掌握Java编程的精髓。这本书的练习题是检验学习成果、提升编程技能的重要途径。以下是对这些练习题答案的一些关键知识点的解析: ...
- **第九章:图算法** —— 涵盖了图的表示法(邻接矩阵和邻接表)、图遍历算法(深度优先搜索和广度优先搜索)以及图上的最短路径问题等。 - **第十章:算法设计技巧** —— 提供了一些高级的设计思路和技术,如...
第9章“抽象类和接口.ppt”则涉及到了Java中的高级特性,抽象类用于定义规范,接口则提供了一种实现多继承的方式,这两者都是设计复杂系统时的关键工具。 第15章“异常捕获和枚举类型.ppt”涵盖了错误处理和异常...
Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程思想,使得代码更加模块化、可维护和可重用。张亦辉版的教材是许多初学者和专业人士学习这一主题的参考资料。该压缩包包含了该教材1-10章的...
- **子程序(方法)**:第四章解释了如何定义和使用子程序,以及它们在程序设计中的作用。 - **复合数据类型**:第六章详细阐述了数组、列表等复合数据类型的使用。 2. **面向对象程序设计的基本思想**: - **类...
通过以上五个星期的学习与实践,不仅掌握了Java编程的基础知识,还深入了解了面向对象编程的思想与高级特性,并通过实际项目加深了对技术的理解与运用能力。这样的实习经历对于成为一名合格的Java开发者至关重要。
《Java面向对象程序设计(第2版)》是一本深入探讨Java编程的教材,尤其注重面向对象编程思想的讲解。本书通过丰富的实例代码,帮助读者理解并掌握Java语言的核心概念和面向对象编程的关键要素。在提供的压缩包文件...
- **1996年1月:** 第一个Java开发工具包(JDK)——JDK 1.0发布,开启了Java编程的新纪元。 - **1996年4月:** 主要的操作系统供应商宣布支持Java技术,增强了Java的影响力。 - **1997年2月18日:** JDK 1.1发布,...
在Java编程中,面向对象的程序设计(Object-Oriented Programming,简称OOP)是核心概念之一。这一章通常会深入讲解OOP的四大基本特征:封装、继承、多态和抽象。封装是将数据和操作数据的方法绑定在一起,形成一个...