JAVA学习笔记

Java 关键字

下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。

类别 关键字 说明
访问控制
private 私有的
protected 受保护的
public 公共的
default 默认
类、方法和变量修饰符
abstract 声明抽象
class
extends 扩充,继承
final 最终值,不可改变的
implements 实现(接口)
interface 接口
★★★ native 本地,原生方法(非 Java 实现)
new 新,创建
static 静态
★★★ strictfp 严格,精准
★★★ synchronized 线程,同步
★★★ transient 短暂
★★★ volatile 易失
程序控制语句
★★ break 跳出循环
case 定义一个值以供 switch 选择
★★ continue 继续
★★★ default 默认
do 运行
else 否则
for 循环
if 如果
instanceof 实例
return 返回
switch 根据值选择执行
while 循环
错误处理
★★★ assert 断言表达式是否为真
catch 捕捉异常
finally 有没有异常都执行
★★★ throw 抛出一个异常对象
★★★ throws 声明一个异常可能被抛出
try 捕获异常
包相关
import 引入
package
基本类型
boolean 布尔型
byte 字节型
char 字符型
double 双精度浮点
float 单精度浮点
int 整型
long 长整型
short 短整型
变量引用
super 父类,超类
this 本类
void 无返回值
保留关键字
goto 是关键字,但不能使用
const 是关键字,但不能使用

注意:Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。

Java 5 (2004 年 9 月)

Java 注解(Annotation)

Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

作用在代码的注解是

  • @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
  • @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
  • @SuppressWarnings - 指示编译器去忽略注解中声明的警告。

作用在其他注解的注解(或者说 元注解)是:

1
2
3
4
5
6
7
8
9
//定义一个注解类
// Target表示我们的注解可以用在哪些地方
@Target(value ={ElementType.METHOD,ElementType.TYPE} )
// Retention 表示注解在什么地方还有效
@Retention(value = RetentionPolicy.RUNTIME)
@Documented // 表示是否将为注解生成在 Javadoc中
@Inherited // 子类可以继承父类的注解
@interface MyAnnotation {
}

此后的更新

  • @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
  • @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
  • @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

Java 8 (2014 年 3 月 )

lambda表达式

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

典型示范

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 使用 java 7 排序
private void sortUsingJava7(List<String> names){
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
}

// 使用 java 8 排序
private void sortUsingJava8(List<String> names){
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}
  • lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。

方法引用

方法引用通过方法的名字来指向一个方法。

1
2
3
4
5
6
7
8
9
//java 8 写法
Arrays.asList(strs).forEach(System.out::println);
//或者
Arrays.asList(strs).forEach((str)->{System.out.println(str);});

//java 5 写法
for (String str : strs) {
System.out.println(str);
}

函数式接口

定义函数式接口

1
2
3
4
5
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
}

JDK 1.8 新增加的函数接口:

接口的默认方法(default )

1
2
3
4
5
public interface Vehicle {
default void print(){
System.out.println("我是一辆车!");
}
}

流(Stream)

流水线式处理,以一种声明的方式处理数据

Java 10(2018年 3 月)