-
包(1-2)
- import
- package
import用于引入java工具包,java.lang不需要手工引入。引入import三种用法:
import java.util.List;// 单个导入
import java.util.*;// 分类导入
import static java.util.Arrays.asList;// 静态导入
package用于包定义,包类似于命名空间的概念,解决了命名冲突问题。
-
访问修饰(3-5)
- public
- protected
- private
public 公共,加上这个修饰的属性和方法,可以在程序的任何其它地方访问;
protected 保护,位于public和private中间,加上这个修饰的属性和方法,只能在子类(extends)和同包下的程序访问,别的的地方不能访问。
private 私有的,和public相反,加上这个修饰的属性和方法,只允许在自己本身这个类里访问,程序的任何其它地方都不能访问;
默认缺省(不加任何修饰),缺省,位于private和protected中间,加上这个修饰的属性和方法,只能在同包下的程序访问,别的的地方不能访问。
结论是:public > protected > 默认 > private。
-
类、接口(6-9)
- class
- interface
- extends
- implements
class继承使用extends关键字,interface实现使用implements,允许实现多个接口,但只能继承一个父类
public class Son extends Father implements IStrong, IBrave, ISmart{
}
-
基本数据类型(10-21)
- boolean
- char
- byte
- short
- int
- long
- float
- double
- null
- true
- false
- void
强制转换类型: long>int>short>byte>char>boolean,double>float
equals比较时,可能为null的值建议放在equals后边,示例如下:
String variable = null;// variable可能为null
if ("test".equals(variable)) {
}
true、false用于等值比较时,不建议用”==”或”!=”作比较,以下为三种判断boolean类型值为true的方式:
boolean bVal;
if (bVal == true) {}// 不建议
if (bVal != false){}// 不建议
if (bVal) {} // 建议用法
-
类、方法、属性、变量修饰(22-29)
- abstract
- static
- final
- sychronized
- volatile
- transient
- strictfp
- native
下图表示类、方法、属性、变量是否能被修饰符修饰:
修饰符 | 类 | 方法 | 属性 | 全局变量 | 局部变量 |
---|---|---|---|---|---|
abstract | 是 | 是 | 否 | 否 | 否 |
static | 是 | 是 | 是 | 是 | 否 |
final | 是 | 是 | 是 | 是 | 是 |
sychronized | 是 | 是 | 是 | 是 | 是 |
volatile | 否 | 否 | 是 | 是 | 否 |
transient | 否 | 否 | 是 | 是 | 否 |
strictfp | 是 | 是 | 否 | 否 | 否 |
native | 否 | 是 | 否 | 否 | 否 |
浅析:
1. abstract、strictfp只可用于修饰类和方法;
2. static可修饰内部类,静态方法不能访问非静态方法(需要this实例调用)[参考];
3. final修饰的类不能被继承,final修饰的方法不能被覆写,final修饰的变量不能修改引用,匿名内部类只能访问其所在方法中的final类型的局部变量;
4. sychronized与volatile均可用于线程同步,volatile保证了内存的可见性,sychronized保证了内存的可见性和原子性[参考];
5. private final修饰的方法或变量可被内部类访问;
6. transient修饰属性时,表示该属性不会被序列化(类实现Externalizable 接口时,transient关键字失效[参考]);
-
对象实例(30-32)
- super
- this
- new
super指向父对象实例、this指向当前对象实例
new是一个运算符。与+、-、*、/等运算符具有相同或类似的优先级。new关键字补充[参考]:
1.创建一个Java对象需要三部:声明引用变量、实例化、初始化对象实例。
2.实例化:就是“创建一个Java对象”—–分配内存并返回指向该内存的引用。
3.初始化:就是调用构造方法,对类的实例数据赋初值。
-
流程控制(33-44)
- if
- else
- for
- do
- while
- switch
- case
- default
- break
- continue
- return
- instanceof
条件判断有两种实现写法:if else、switch case
// bVal只能是布尔值
if (bVal) {
} else {
// val 可以是等价整形(byte、short、int等)、字符串、枚举
switch(val) {
case VALUE:
default :
}
循环判断有三种写法:for、while、do while
// expr中不建议写复杂表达式
// cycle code中不建议创建实例变量,不建议try catch,不建议使用sychronized
for (expr) {
// TODO cycle code
}
while(expr) {
// TODO cycle code
}
do {
// TODO cycle code
} while(expr)
break关键字表示中断当前循环,执行循环后的逻辑;continue关键;字表示跳过本次循环,继续下一次循环逻辑;return表示中断当前方法,直接返回。
instanceof关键字建议匹配接口,而不是具体的实现类
-
异常(45-49)
- try
- catch
- finally
- throw
- throws
异常关键字用于异常捕捉情况,java异常类分Error和Exception,二者都继承自Throwable。Error是系统错误,不建议捕获,Exception分运行时(UnChecked)和非运行时两种。虚拟机对运行时异常有相应处理逻辑,不需要也不建议程序员处理(能偷懒为啥要装勤快);程序员只需处理非运行时异常。
throw用于方法内部抛出异常,throws用于方法向外抛出异常。
try、finally捕获异常模式,因为异常没有catch,程序报错中断,finally后逻辑不会被执行。
常用异常场景 [参考]:
try {
// TODO code maybe throw Exception
return expectedVal;
} catch (XXException ex) {
// TODO handle Exception
} finally {
return actualVal;
// 错误用法,会覆盖try中return的结果
// finally中不应该包括return语句
}
-
jdk后续(50-51)
- assert
- enum
assert为jdk1.4新增关键字,需要在运行时候显式开启(-enableassertions或-ea)才能生效,所以与应用程序正常逻辑相关的部分不能用assert实现。[参考]
-
保留字(52-53)
- const
- goto