Java Language Specification Java SE 9 Edition学习笔记-语言特性主线
2018-01-06 21:58
711 查看
JSL的内容比较多,比较细,先以各版本语言特性的主线进行选择性学习:
J2SE各版本新引入的语言特性如下:
Assertion Facility
Generics(泛型)
Enhanced for Loop
Autoboxing/Unboxing
Typesafe Enums
Varargs
Static Import
Annotations
无
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
Lambda Expressions
Improved Type Inference
Annotations on Java Types
Repeating Annotations
Method Parameter Reflection
Java Platform Module System
New Version-String Scheme
这些类型变量也称之为类的类型参数(type parameters)。类型参数紧接着类名,并用尖括号分隔,如<T,K,V>。
这些类型变量称之为方法的类型参数。
这些类型变量称之为构造函数的类型参数。
这些类型变量称之为接口的类型参数。类型参数紧接着类名,用尖括号分隔,如<K,V,T>。
9.6.1 注解类型元素
9.6.2 注解类型元素的默认值
9.6.3 可重复的注解类型
9.6.4 预定义的注解类型
@Target
@Retention
@Inherited
@Override
@SuppressWarnings
@Deprecated
@SafeVarargs
@Repeatable
@FunctionalInterface
有三种类型的注解。第一类是最常用的,而其他种类是第一类的简化。
9.7.1 普通注解
9.7.2 Marker Annotations
9.7.3 单元素注解
9.7.4 什么地方会出现注解?
9.7.5 同一个类型的多个注解
Lambda表达式通常是一个poly expressions。
Lambda表达式只能出现在以下三个地方:
赋值上下文
调用上下文
转换上下文
否则,将会报编译时错误。
lambda表达式的赋值生成了一个函数接口的实例。lambda表达式赋值并没有导致lambda表达式主体的执行;相反,表达式的执行将会在晚些时候发生,当函数接口的适当方法被调用的时候将会执行lambda表达式的主体。
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 LiteralsUnderscores 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 ExpressionsImproved Type Inference
Annotations on Java Types
Repeating Annotations
Method Parameter Reflection
1.6 J2SE 9
Java Platform Module SystemNew Version-String Scheme
一、Generics(泛型)
涉及章节:8.1.2、8.4.4、8.8.4、9.1.28.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.79.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.2715.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.914.11 switch语句
相关文章推荐
- Java Language Specification Java SE 9 Edition学习笔记-基本概念
- java language specification Java SE 8 Edition 中文版(第一章)
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(2)
- JAVA语言规范学习笔记(1)
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(二)
- [学习笔记]Thinking in Java (the 2nd edition) Study Note (4)
- [学习笔记]Thinking in Java (the 2nd edition) Study Note (4)
- JAVA核心技术学习笔记(第七版,Ⅱ高级特性)
- Velocity学习笔记3——Velocity 模板语言(VTL: Velocity Template Language)简介
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(一)
- JAVA核心技术学习笔记(第七版,Ⅱ高级特性之集合)
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(2
- [学习笔记]Thinking in Java (the 2nd edition) Study Note (1)
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(1
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(三)
- JAVA语言规范学习笔记(3)
- [学习笔记]Thinking in Java (the 2nd edition) Study Note (3)
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(2)
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(四):
- JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(1)