Java8官方文档学习笔记

本文介绍了Java SE 8中的新特性,包括Lambda表达式、类型推断改进、Java类型注释、重复注释和方法参数反射等功能。通过这些新特性,Java开发者能够编写更加简洁高效的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文档地址:

http://docs.oracle.com/javase/8/docs/


Oracle有两个实现了Java平台标准版本(Java SE)8,即Java标准开发工具(JDK)8和Java标准运行时环境(JRE)8.

JDK8是JRE8的超集,包含了JRE8的所有内容,还包括诸如编译器和调试器等在开发applet和application时必要的开发环境。JRE8提供函数库,java虚拟机(JVM)以及其他用于运行用Java编程语言编写的applets和applications。注意,JRE包含了在Java SE规范中并不作要求的组件,包括标准和非标准Java组件。


图1. Java概念图



Descriptionof Java Conceptual Diagram

JDK JavaLanguage
JavaLanguage
  
Tools &
Tool APIs
javajavacjavadocjarjavapjdepsScripting
SecurityMonitoringJConsoleVisualVMJMCJFR
JPDA JVM TI IDLRMIJavaDB Deployment
Internationalization WebServicesTroubleshooting
JREDeployment
Java WebStartApplet / Java Plug-in
User Interface
Toolkits
JavaFX
SwingJava 2DAWT Accessibility
Drag andDropInput MethodsImageI/OPrintServiceSound
Java SE
API
Integration
Libraries
IDLJDBC JNDIRMIRMI-IIOPScripting
Compact
Profiles
OtherBase
Libraries
BeansSecuritySerializationExtensionMechanism
JMX XML JAXPNetworking OverrideMechanism
JNIDate andTimeInput/Output Internationalization
lang and util
Base Libraries
lang andutil
MathCollectionsRefObjectsRegularExpressions
LoggingManagementInstrumentationConcurrencyUtilities
ReflectionVersioningPreferences APIJARZip
Java VirtualMachine
Java HotSpot Clientand Server VM
  


Java8中的增强功能

http://docs.oracle.com/javase/8/docs/technotes/guides/language/enhancements.html#javase8

1. lambda表达式(Lambda Expressions):让你能够将一个动作单元进行压缩,并将其传递给其他代码。如果你希望当某个过程结束后,或当某个过程发生异常后,在collection内的每个元素上执行一个特定动作,你可以用lambda表达式来达到目的。lambda表达式由以下特点所支持:

(1)方法引用(Method References):对于已命名的方法,方法引用是紧凑且易读的lambda表达式;

(2)默认方法(Default Methods):让你能够将新功能添加到函数库的接口,并且确保于旧版本接口的二进制兼容性(binary compatibility)。他们是被实现了的接口方法,并且是方法签名起始处的默认关键词。此外,你可以在接口中定义静态方法。

(3)基于Java8中lambda表达式和Streams的新的增强版API(New and Enhanced APIs That Take Advantage of Lambda Expressions and Streams in Java SE 8);

2. 类型推断个改进:Java编译器利用目标类型来判断通用方法调用(generic method invocation)中的参数类型。一个表达式的目标类型,是java编译器依据该表达式出现位置所期望的数据类型。例如,你可以在Java SE7中将赋值语句的目标类型用于类型推断。然而,在Java SE 8汇总,你可以在更多场景中将目标类型用于类型推断。最突出的例子是使用方法调用的目标类型来判断其参数的数据类型。

考虑如下例子:

List<String> stringList = new ArrayList<>();
stringList.add("A");
stringList.addAll(Arrays.asList());

先暂且忽略泛型(generics),addAll方法期望一个Collection实例作为参数,并且Arrays.asList方法返回了List实例。该代码是可行的,因为List是Collection的子类。

现在考虑泛型,addAll的目标类型是Collection<? exends String>,而Arrays.asList返回了一个List<T>实例。在这个例子中,Java SE8编译器能够将类型变量T的值推断为String。编译器是由目标类型Collection<? extends String>推断出这个结果的。

Java SE8或更早版本的编译器则不能接受这样的代码,因为他们不能利用目标类型来判断方法调用参数的类型。例如,Java SE7编译器会生成类似如下的错误信息:

error: no suitable method found for addAll(List<Object>) ...
method List.addAll(Collection<? extends String>) is not applicable (actual argument List<Object> cannot be converted to Collection<? extends String> by method invocation conversion)

因此,在类似这样的场景中,当Java编译器不能判断类型时,你必须用type witnesses显式指定类型变量的值。

例如,如下代码在Java SE7中是允许的:

List<String> stringList = new ArrayList<>();
stringList.add("A");
stringList.addAll(Arrays.<String>asList());

See the following sections in the Java Tutorials for more information:



3. java类型注释:可以将注释用于任何用到类型的地方。这一特性与可插拔类型系统联合使用,允许对代码进行更强的类型检查。For more information, seeType Annotations and Pluggable Type Systems in the new Annotations lesson in the Java Tutorial.


4. 重复注释:可以将同一个注释类型在同一个声明或类型使用中应用多次。For more information, see Repeating Annotations in the new Annotations lesson in the Java Tutorial.


5. 方法参数反射:利用java.lang.reflect.Executable.getParameters, 可以获得任何方法或构造器的形式参数名。(类Method和Constructor继承自类Executable,因此继承了方法Executable.getParameters)。然而,.class文件默认情况下并不存储形式参数名。为了在一个特殊的.class文件中存储形式参数名,并因此启用Reflection API来检索形式参数名,要用javac编译器的-parameters选项编译源文件。SeeObtaining Names of Method Parameters in the Java Tutorials.










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值