您的位置:首页 > 编程语言 > Java开发

Java Language Specification Java SE 9 Edition学习笔记-语言特性主线

2018-01-06 21:58 711 查看
JSL的内容比较多,比较细,先以各版本语言特性的主线进行选择性学习:

J2SE各版本新引入的语言特性如下:


1.1 J2SE 1.4

Assertion Facility


1.2 J2SE 5.0

Generics(泛型)
Enhanced for Loop 
Autoboxing/Unboxing
Typesafe Enums
Varargs
Static Import 
Annotations


1.3 J2SE 6




1.4 J2SE 7

Binary Literals
Underscores in Numeric Literals
Strings in switch Statements
Type Inference for Generic Instance Creation
Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
The try-with-resources Statement
Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking


1.5 J2SE 8

Lambda Expressions
Improved Type Inference
Annotations on Java Types
Repeating Annotations
Method Parameter Reflection


1.6 J2SE 9

Java Platform Module System
New Version-String Scheme

一、Generics(泛型)

涉及章节:8.1.2、8.4.4、8.8.4、9.1.2

8.1.2 泛型类和类型参数

如果一个类声明了一个或多个类型变量(type variables,用于描述类型,泛指任意类型或相关一类类型,用大写字母标示,如K、V、E等),那么这个类就是一个泛型类。

这些类型变量也称之为类的类型参数(type parameters)。类型参数紧接着类名,并用尖括号分隔,如<T,K,V>。

8.4.4 泛型方法

如果一个方法声明了一个或多个类型变量,那么这个方法就是一个泛型方法。

这些类型变量称之为方法的类型参数。

8.8.4 泛型构造函数

如果一个构造行数声明了一个或多个类型变量,那么这个构造行数就是一个泛型构造函数。

这些类型变量称之为构造函数的类型参数。

9.1.2 泛型接口和类型参数

如果一个接口声明了一个或多个类型变量,那么这个接口就是一个泛型接口。

这些类型变量称之为接口的类型参数。类型参数紧接着类名,用尖括号分隔,如<K,V,T>。

二、Annotations(注解)

涉及章节:9.6、9.7、13.5.7

9.6 注解类型

注解类型声明指定了一个新的注解类型,注解类型是一种特殊的接口(interface)。为了区分注解类型的声明与普通接口声明,关键字interface之前增加一个@符号。

9.6.1 注解类型元素

9.6.2 注解类型元素的默认值

9.6.3 可重复的注解类型

9.6.4 预定义的注解类型

@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();
}


@Retention

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* Returns the retention policy.
* @return the retention policy
*/
RetentionPolicy value();
}


@Inherited 

@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();
}


 @Deprecated 

@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 <em>containing annotation type</em> for the
* repeatable annotation type.
* @return the containing annotation type
*/
Class<? extends Annotation> value();
}


 @FunctionalInterface

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}


9.7 注解

        注解是一个标记,它用一个程序构造关联了相关信息,然而,它不会对运行时有影响。注解表示了一个注解类型的特定调用,通常为这个注解类型的元素提供了值。

        有三种类型的注解。第一类是最常用的,而其他种类是第一类的简化。
Annotation:
NormalAnnotation
MarkerAnnotation
SingleElementAnnotation


9.7.1 普通注解

9.7.2 Marker Annotations

9.7.3 单元素注解

9.7.4 什么地方会出现注解?

9.7.5 同一个类型的多个注解


13.5.7 注解类型的发展

三、静态导入(static import)

相关章节:7.5.3、7.5.4

四、类型接口

相关章节:18

五、lambda表达式

相关章节:15.13、15.27

15.13 方法引用表达式

方法引用表达式用于引用方法的调用而没有实际执行调用

15.27 Lambda表达式

Lambda表达式就像一个方法一样,它提供了形式参数列表和主体

LambdaExpression:
LambdaParameters -> LambdaBody


Lambda表达式通常是一个poly expressions。

Lambda表达式只能出现在以下三个地方:

赋值上下文
调用上下文
转换上下文
否则,将会报编译时错误。

lambda表达式的赋值生成了一个函数接口的实例。lambda表达式赋值并没有导致lambda表达式主体的执行;相反,表达式的执行将会在晚些时候发生,当函数接口的适当方法被调用的时候将会执行lambda表达式的主体。

15.27.1 Lambda参数

        lambda表达式的形式参数要么是声明的类型,要么是推断的类型。这些参数的类型不能混用(不能出现一些参数是声明的类型,另一些参数是推断的类型)。

        

        



15.27.2 Lambda主体

15.27.3 Lambda表达式的类型

15.27.4 Lambda表达式的运行时赋值(Run-Time Evaluation of Lambda Expressions)

六、switch语句

相关章节:14.11、16.2.9

14.11 switch语句

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java J2SE
相关文章推荐