Annotation:
Annotation 是 JDK1.5 最大的特色,利用注释的形式来实现程序的不同功能实现;
在Java SE里面支持自定义的 Annotation 开发,并且提供了3个最常用的基础Annotation:@Override、@Deprecated、@SuppressWarnings;
准确覆写:@Override:
class Book {
@Override // 用于检查覆写的方法
public String toString() {
return "hello";
}
}
public class test {
public static void main(String args[]) {
System.out.println(new Book());
}
}
如果不加 @Override ,在覆写的时候,方法的名称大小写出错,只有在编译之后才能检查出来,加入了 @Override 之后,在编写的过程中就可以发现;
过期声明:@Deprecated:
class Book {
@Deprecated // 这个方法已经过期
public String toString() {
return null;
}
}
public class test {
public static void main(String args[]) {
Book book = new Book();
book.toString();
}
}
@Deprecated 用于声明这个方法已经过期了,开发者不要继续使用,但是在以前的开发程序中已经使用过的,还是可以继续使用该方法;
压制警告:@SuppressWarnings:
开发着在开发的过程中知道会出现哪些问题,为了不出现警告提示信息而存在,是强迫症的福利;
Java8新特性:
接口定义增强:
interface IMessage {
public abstract void print();
default void fun() {
System.out.println("hello");
}
}
class Message implements IMessage {
public void print() {
System.out.println("world");
}
}
public class test {
public static void main(String args[]) {
IMessage msg = new Message();
msg.fun();
}
}
接口是由全局常量和抽象方法组成,如果需要在接口里面定义普通函数,需要使用default关键字来定义方法,如上代码输出的是hello;除了使用default关键字,还可以使用static关键字定义,这时可以直接使用类名称进行调用;
JDK1.8 有一个最重要概念,内部类访问参数时,可以不加 final 关键字;
- 接口总结:
- 接口使用default 和 static关键字的作用在于避免子类重复实现同样的代码;
- 接口的使用还应该以抽象方法为主;
Lamda表达式:
属于函数式编程的概念;需要联系匿名内部类;
interface IMessage {
public abstract void print();
}
public class test {
public static void main(String args[]) {
fun(() -> System.out.println("hello"));
}
public static void fun(IMessage msg) {
msg.print();
}
}
- 对于Lamda语法有3种形式:
- (参数)-> 单行语句;
- (参数)-> {多行语句};
- (参数)-> 表达式
利用Lamda表达式避免了匿名内部类过多无用的定义,简化了代码格式;
方法引用:
方法引用就为一个方法设置别名,相当于一个方法有了不同的名字,有如下 4 种定义:
- 引用静态方法:类名称::static 方法名称;
- 引用某个对象的方法:实例化对象::普通方法;
- 引用特定类型的方法:特定类::普通方法;
- 引用构造方法:类名称::new;
如果要实现函数的引用,必须要用到接口,但是一个接口里面只能有一个方法,如果存在多个方法将不能引用;
可以加上@FunctionalInterface表示函数式编程,并且一个接口里面只能有一个方法;