Java 对大小写敏感
Java 中定义类名的规则很宽松。名字必须以字母开头,后面可以跟字母和数字的任意组合。长度基本上没有限制。但是不能使用 Java 保留字作为类名。
标准的命名规范为:类名是以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母都应该大写。
源代码的文件名必须与公共类的名字相同,并用 .java 作为扩展名。
如果 main 方法正常退出,那么 Java 应用程序的退出代码为 0,表示成功地运行了程序。如果希望在终止程序时返回其他的代码,那就需要调用 System.exit 方法。
与大多数程序设计语言一样,Java 中的注释也不会出现在可执行程序中。因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。
在 Java 中,有三种写注释的方式。最常用额是使用 //,其注释内容从 // 开始到本行结尾。当需要长篇注释时,既可以在每行的注视前面标记 //,也可以使用 /* 和 */ 将一段比较长的注释括起来。在 Java 中,这种注释不能嵌套。第三种注释可以用来自动地生成文档。这种注释以 /** 开始,以 */ 结束。
Java 是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在 Java 中,一共有 8 种基本类型,其中有 4 种整型、2种浮点类型、1种用于表示 Unicode 编码的字符单元的字符类型 char 和 1 种用于表示真值的 boolean 类型。
整型用于表示没有小数部分的数值,它允许是负数。Java 提供了 4 种整型。
类型
存储需求
取值范围
int
4 byte
-2147483648 ~ 2147483647 ( -2^31 ~ (2^31)-1 )
short
2 byte
-32768 ~ 32767 ( -2^15 ~ (2^15)-1 )
long
8 byte
-9223372036854775808 ~ 9223372036854775807 ( -2^63 ~ (2^63)-1 )
byte
1 byte
-128 ~ 127 (-2^7 ~ (2^7)-1)
在 Java 中,整型的范围与运行 Java 代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。
长整型数值有一个后缀 L。十六进制数值有一个前缀 0x。八进制有一个前缀 0。
从 Java 7 开始,街上前缀 0b 就可以写二进制数。另外,从 Java 7 开始,还可以为数字字面量加下划线。这些下划线只是为了让人更易读,Java 编译器会去除这些下划线。
1 packagedatatype;2
3 public classDemo1 {4
5 public static voidmain(String[] args) {6
7 System.out.println(0b1001);8
9 int a =1_000;10 System.out.println(a);11
12 int b =2_004;13 System.out.println(a +b);14 }15
16 }
Java 没有任何无符号类型。
浮点类型用于表示有小数部分的数值。
类型
存储需求
取值范围
float
4 byte
大约 -3.4E38 ~ 3.4E38 (有效位数为 6 ~ 7 位)
double
8 byte
大约 -1.7E308~ 1.7E308 (有效位数为 15 位)
double 表示浮点型的数值精度是 float 的两倍,绝大部分应用程序都采用 double 类型。实际上,只有很少的情况适合使用 float 类型,例如,需要快速地处理单精度数据,或者需要存储大量数据。
float 类型的数值有一个后缀 F。没有后缀 F 的浮点数职默认为 double 类型。当然,也可以在数值后面添加后缀 D。
在 JDK 5.0 中,可以使用十六进制表示浮点数值。例如,0.125 可以表示成 0x1.0p-3。在十六进制表示法中,使用 p 表示指数,而不是 e。注意,尾数采用十六进制。指数的基数是 2,而不是 10。
1 packagedatatype;2
3 public classDemo1 {4
5 public static voidmain(String[] args) {6
7 System.out.println(0x1.0p-3);8
9 }10
11 }
所有的浮点数值计算都遵循 IEEE 754 规范,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
正无穷大
负无穷大
NaN (不是一个数字)
http://blog.163.com/take_make/blog/static/2082122102013102334720381/
浮点数不适合用于禁止出现舍入误差的金融计算中。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数 1 / 10 。这就好像十进制无法精确地表示 1 / 3 一样。如果需要在数值计算中不含有任何舍入误差,就应该使用 BigDecimal 类,注意使用构造函数为传入 String 类型的,直接传入浮点类型会带来吊炸天的问题。
Unicode 编码单元可以表示为十六进制值,其范围从 \u0000 到 \uffff。
除了可以采用转义序列符 \u 表示 Unicode 代码单元的编码之外,还有一些用于表示特殊字符的转义序列符。所有这些转义序列都可以出现在字符常量或字符串的引号内。
在 Java 中,char 类型用 UTF-16 编码描述一个代码单元。强烈建议不要在程序中使用 char 类型,除非确实需要对 UTF-16 代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示。
21. boolean 类型有两个值:false 和 true,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。
如果想要知道哪些 Unicode 字符属于 Java 中的字母(这里指可以作为变量名一部分的字符),可以使用 Character 类的 isJavaIdentifierStart 和 isJavaIdentifierPart 方法进行检测。
尽管 $ 是一个合法的 Java 字符麻烦不要在你自己的代码中使用这个字符。它只用在 Java 编译器或其他工具生成的名字中。
声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未被初始化的变量。
在 Java 中,利用关键字 final 指示常量。
习惯上,常量名使用全大写。
在 Java 中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字 static final 设置一个类常量。
>>> 运算符用 0 填充高位; >> 运算符用符号位填充高位; 没有 <<< 运算符。
对以为运算符右侧的参数需要进行模 32 的运算(除非左边的操作数是 long 类型,这种情况下需要对右侧操作数模 64)。
如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用 StrictMath 类。它使用自由发布的 Math 库实现算法,以确保在所有平台上得到相同的结果。
Math.round
运算符优先级
如果虚拟机始终将相同的字符串共享,就可以使用 == 运算符检测字符串是否相等。但实际只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不是共享的。因此,千万不要使用 == 运算符测试字符串的相等性,以免在程序中出现糟糕的 bug。
构建字符串使用字符串连接的方式效率比较低。每次连接字符串,都会构建一个新的 String 对象,既耗时,又浪费空间。使用 StringBuilder 类就可以避免这个问题发生。