Java语言的规范是描述Java语言的官方文档。
Java虚拟机规范并没有要求main方法一定是public,并且“修复这个BUG有可能带来其他的隐患”。在JAVA SE 1.4之后,main方法被强制为public
在Java中,整型的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者同一个平台中的不同操作系统之间进行移植带来的诸多问题。在C和C++中,int表示的整型和目标机器相关。
Java虚拟机的最初设计规范规定所有的中间计算结果都必须进行截断,但是这种行为遭到数值计算团体的反对。为此,Java程序设计语言承认了最优性能与理想结果之间的冲突,并给予了改进。默认情况下,虚拟机设计者允许将中间计算结果采用扩展的精度。但是对于使用strictfp关键字标记的方法必须使用严格的浮点计算来产生理想的结果。strictfp可以加在方法和类中,表明该方法或类中的所有方法使用严格的浮点运算。
Java的变量名必须以字母开头,后面可以跟字母,数字,下划线和美元符号,变量名的长度没有限制。
java中没有无符号的整型或浮点型!!!!!char类型是无符号的,Unicode采用16位对字符进行编码。书本上说,转义字符\u可以出现在字符常量或字符串的内外,而其他的所有转义字符不可以,但实际上所有的转义字符都必须在字符常量或字符串中。
绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求,只有在很少的情况下适合使用float类型,比如需要快速处理单精度数据,或者需要存储大量数据。
Java中,int是默认的整型,double是默认的浮点型
在JDK5.0中,可以使用十六进制表示浮点数之。
整数(包括整数0)被0除会产生一个异常,但是浮点数被0除会得到正无穷大或负无穷大,0.0/0.0或负数的平方根会得到NaN
不能通过==来检测一个特定的值是否是Double.NaN,但可以用来检测Double.POSITIVE_INFINITY或Double.NEGATIVE_INFINITY,检测是否是NaN,只能用Double.NaN()方法。Double.isInfinity()方法能检测一个值是否是无穷大。
Java中,浮点数是以二进制系统表示的,所以System.out.println(2.0-1.1);的结果不是精确的0.9,而是0.899999999999。
const是Java的保留字,目前还没有使用。
关系运算符:< > <= >= != ==
逻辑运算符:&&(逻辑‘与‘) || (逻辑'或') !(逻辑‘非‘) 注意:这两个也是逻辑运算符 & |,但他们是非短路逻辑运算符
位运算符: & ('与'运算) | (‘或’运算) ^(‘异或’运算) ~(‘非’运算) << ‘左移‘运算 >>‘右移’运算 >>> 也是‘右移’注意:没有<<<运算符
对于>>,或<<,一般情况下,对移位运算符右侧的参数进行模32的运算(除非左边的操作数是long类型,而在这种情况下需要对右侧的操作数进行模64),例如1<<35和1<<3的结果是相同的,因此移位后的结果是int型(如果左边的操作数是long,那么移位后的结果是long型),除非使用<<=,>>= 或>>>=移位赋值运算符,这样结果的类型不变。
>>>用0填充高位,>>用符号位填充高位 << 用0填充低位
注意:在C/C++中,>>运算符无法确定是算术移位还是逻辑移位,不同的编译平台处理的结果不同
逻辑运算符只能用于布尔值,不同于C/C++
数值之间的转换:double->float->long->int
当对两个数值进行二元操作时,先将两个操作数转换为同一种类型,然后再进行计算。转换的规则如下:
如果两个操作数中有一个是double类型,那么另一个操作数也会转换成double类型;
否则,如果两个操作数中有一个是float类型,那么另一个操作数也会转换成float类型;
否则,如果两个操作数中有一个是long类型,那么另一个操作数也会转换成long类型;
否则,两个操作数都会被转换为int类型
关于类型的转换:隐式强制类型转换和显式强制类型转换
隐式类型转换中,只有int->float long->float long->double会出现可能精度丢失外,其余的隐式类型转换都不会出现精度丢失
显式类型转换中,要注意由高精度类型向低精度类型转换的过程中可能出现的精度丢失,
一般的整型常量是int,浮点型常量是double。在定义变量的初始化中,可以直接用常量赋值,但是如果超过了该类型的表示范围,则编译器会报错,此时可以使用强制类型转换(这样精度肯定会丢失),也可以使用一个精度更高的类型。
不要在boolean类型和其他类型进行强制转换。
背运算符的优先级和结合性