本质
枚举是一种类。
并且,所有的枚举类型都是 java.lang.Enum
的子类。
定义
下面演示如何定义一个枚举类型,它刚好有3个实例:
1 | public enum State { |
如果需要的话,还可以在枚举类型中添加一些属性、构造器和方法。
当然,构造器只是在构造枚举常量的时候被调用。
1 | public enum State { |
枚举是一种类。
并且,所有的枚举类型都是 java.lang.Enum
的子类。
下面演示如何定义一个枚举类型,它刚好有3个实例:
1 | public enum State { |
如果需要的话,还可以在枚举类型中添加一些属性、构造器和方法。
当然,构造器只是在构造枚举常量的时候被调用。
1 | public enum State { |
首先,数组本质上是一个类,从 2 个方面可以很明显地判断出来:
第一,它的初始化使用了 new
;
第二,它有 length
属性,它还实现了 Object
这个超类所有的方法。
建议使用这样的方式:int[] array
,而不是: 。int array []
原因很简单:int[]
是类型, array
是变量名,不应混在一起。
建议在任何情况下(哪怕是只有一个语句)都使用大括号 {}
包裹控制语句块。
例如:
1 | if( true ) { |
原因是,结构更加清晰,后续也更易于维护代码(例如,需要添加代码,直接在 {}
中添加即可)。
String
类代表字符串。
它是 final
修饰的类,不可继承。
1 | public final class String |
也就是说,Java 的设计者,不允许任何人定义 String
的子类。
因此,如果有一个 String
的引用,那么它引用的一定是 String
对象。
String
对象是常量,是不可变的,所以可以共享。
1 | private final char value[]; |
反过来想,正是因为字符串的使用频率非常高,所以需要通过一种共享机制来保证性能
String
的 API 比较稳定(1.8 新增了 join()
方法),大部分方法都需要熟练掌握。
但是有一些方法确实容易让人混淆,例如:split()
、 substring()
。
具体用法,可以参考我编写的 StringApiTest
。
另外,第三方类库 org.apache.commons.lang3.StringUtils
是 String
很好的补充,建议使用。
如果要比较字符串的内容是否相等,不用想,直接使用 equals()
或者 equalsIgnoreCase()
就对了。==
只能用来确定两个字符串是否存放在同一个位置。
命名,大小写敏感,尽量使用有意义单词组合命名,风格统一即可。
可以在任何地方声明,但是建议声明应尽量靠近其第一次被使用的位置。
一方面是便于阅读,另一方面也有利于缩小变量的作用域。
每行只声明一个变量。
一方面是便于阅读,另一方面也有利于 debug 。
先初始化后使用。
+
-
*
/
很好理解。
除法里面,整型除以 0 ,会抛异常,合情合理。
浮点数除以 0,就有点奇葩了:
正浮点数除以 0 ,结果为正无穷大;
负浮点数除以 0 ,结果为负无穷大;
浮点数 0 除以 0 ,结果为 NaN;
这些知道就好,保证不除 0 ,才是关键。
还有 %
表示取余数,有时候会用到。
例如:判断奇偶数。这种情况,建议“判偶不判奇”。
因为:1 % 2 = 1
是奇数,-1 % 2 = -1
,也是奇数。
不如 i % 2 == 0
判断条件简单,且不易出错。
数据类型长度是固定的,与操作系统无关。
没有任何 unsigned
类型,也就是都包含负数。
强烈建议在使用 long
和 float
类型时,显式声明后缀(并且是大写的后缀:L
、D
)。
因为:
没有后缀的浮点数,例如:3.14,默认为 double
类型。
没有后缀的整数,例如:1024,默认为 int
类型。
前往 Oracle 的官方网站下载:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
建议:
例如:D:\dev\java\jdk1.8.0_25