JSL的内容比较多,比较细,先以各版本语言特性的主线进行选择性学习:
J2SE各版本新引入的语言特性如下:
无
涉及章节:8.1.2、8.4.4、8.8.4、9.1.2
如果一个类声明了一个或多个类型变量(type variables,用于描述类型,泛指任意类型或相关一类类型,用大写字母标示,如K、V、E等),那么这个类就是一个泛型类。
这些类型变量也称之为类的类型参数(type parameters)。类型参数紧接着类名,并用尖括号分隔,如
如果一个方法声明了一个或多个类型变量,那么这个方法就是一个泛型方法。
这些类型变量称之为方法的类型参数。
如果一个构造行数声明了一个或多个类型变量,那么这个构造行数就是一个泛型构造函数。
这些类型变量称之为构造函数的类型参数。
如果一个接口声明了一个或多个类型变量,那么这个接口就是一个泛型接口。
这些类型变量称之为接口的类型参数。类型参数紧接着类名,用尖括号分隔,如
涉及章节:9.6、9.7、13.5.7
注解类型声明指定了一个新的注解类型,注解类型是一种特殊的接口(interface)。为了区分注解类型的声明与普通接口声明,关键字interface之前增加一个@符号。
@Target
package java.lang.annotation;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* Returns the retention policy.
* @return the retention policy
*/
RetentionPolicy value();
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}
@Override
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
@SuppressWarnings
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
@SafeVarargs
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
public @interface SafeVarargs {}
@Repeatable
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Repeatable {
/**
* Indicates the containing annotation type for the
* repeatable annotation type.
* @return the containing annotation type
*/
Class extends Annotation> value();
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
Annotation:
NormalAnnotation
MarkerAnnotation
SingleElementAnnotation
相关章节:7.5.3、7.5.4
相关章节:18
相关章节:15.13、15.27
Lambda表达式就像一个方法一样,它提供了形式参数列表和主体
LambdaExpression:
LambdaParameters -> LambdaBody
Lambda表达式通常是一个poly expressions。
Lambda表达式只能出现在以下三个地方:
lambda表达式的形式参数要么是声明的类型,要么是推断的类型。这些参数的类型不能混用(不能出现一些参数是声明的类型,另一些参数是推断的类型)。