A. java8有哪些新特性
jdk1.8的新特性包括如下:
一、接口的默认方法与静态方法,也就是接口中可以有实现方法
二、Lambda 表达式
三、函数式接口与静态导入
四、Lambda 作用域
在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。
五、访问局部变量,等等其他新特性。
B. jdk1.6涓1.7镄勫尯鍒锛
jdk1.7姣攋dk1.6娣诲姞浜嗕竴浜涙柊镄勭壒镐с
C. Java 7链変粈涔堟柊鐗规э纻
鍑犱箮鏂规柟闱㈤溃閮芥湁閲嶅ぇ镟存柊锛屼妇鍑犱釜璇娉曚笂镄勬柊鐗规э纴鍏朵粬鏂归溃寤鸿浣犲幓镆ユ垒鐩稿叧璧勬枡銆
1銆乻witch...case鏀鎸佸瓧绗︿覆銆
2銆佹暟瀛楀瓧闱㈤噺鏀硅繘锛屽姞鍏ヤ簩杩涘埗瀛楅溃閲忚〃绀猴细濡0b001001锛埚崄杩涘埗鏁板瓧9锛夋垨0B001001锛
鏁板瓧瀛楅溃閲忎腑鍙浠ヤ娇鐢ㄤ笅鍒掔嚎鍒嗗壊锛屼互浣块暱鏁板瓧渚夸簬阒呰伙纴濡100000鍙浠ュ啓鎴100_000锛屽氨濂芥瘆鐜板疄鐢熸椿涓鍐欐垚100,000渚夸簬阒呰讳竴镙枫
3銆佷紭鍖栧纾甯稿勭悊锛孴hroable绫诲炲姞addSuppressed鍜実etSuppressed鏂规硶锛岀敤𨱒ヨ板綍琚鍏朵粬寮傚父鎶戝埗钥屾棤娉曟e父鎶涘嚭镄勫纾甯革绂
涓涓猚atch瀛愬彞鍙浠ユ崟銮峰氢釜寮傚父锛屾疮涓寮傚父涔嬮棿浣跨敤钬渱钬濆垎鍓诧纴濡俢atch (ClassNotFoundException cnfe | IOException ioe)锛
杩樻湁鍏朵粬镄勪竴浜涗紭鍖栵纴濡傚纾甯哥被涓鍖呭惈镟村氢俊鎭锛岀簿纭寮傚父鎶涘嚭绛夌瓑銆
4銆丣ava 7涔嫔墠阃氩父鍦╰ry閲屽垱寤鸿祫婧愶纴finally閲屽硅祫婧愯繘琛屽叧闂绛夋搷浣滐纴Java 7涓鍙浠ヤ娇鐢╰ry-with-resources璇鍙ワ纴钥屼笉闇瑕佸叧蹇冭祫婧愮殑鍏抽棴锛屽傗斺
try (InputStream input = new FileInputStream("D:/test1.txt");
OutputStream output = new FileOutputStream("D:/test2.txt")) {
byte[] buffer = new byte[1024];
int len = -1;
while ((len = input.read(buffer) != -1 ) {
output.write(buffer, 0, len);
}
}
灏呜祫婧愮殑鍒涘缓鍐椤湪try钖庣殑𨰾鍙烽噷锛岃繖镙峰氨涓嶉渶瑕佷娇鐢╢inally璇鍙ユ潵淇濊瘉璧勬簮镄勬g‘鍏抽棴锛岀敱铏氭嫙链鸿嚜锷ㄥ畬鎴愶纴绋嫔簭锻桦彧闇瑕佸叧蹇冧笟锷¢昏緫鍗冲彲銆
5銆佸叧浜庡彉闀垮弬鏁扮殑浼桦寲锛屽炲姞浜咢SafeVarargs娉ㄨВ锛孞ava 7涔嫔墠鍦ㄤ娇鐢ㄥ彲鍙橀暱鍙傛暟镄勬柟娉曟椂锛屽傛灉鍙傛暟浼犻掔殑鏄涓嶅彲鍏蜂綋鍖栫殑绫诲瀷锛埚傛硾鍨嬬被鍨婰ist<String>锛変细浜х敓璀﹀憡淇℃伅锛屽傛灉甯屾湜杩涘埗璇ヨ﹀憡锛岄渶瑕佷娇鐢ˊSuppressWarnings("unchecked")娉ㄨВ杩涜屽0鏄庯纴Java 7涓锛屽傛灉寮鍙戜汉锻樼‘淇℃煇涓浣跨敤浜嗗彲鍙橀暱鍙傛暟镄勬柟娉曞湪涓庢硾鍨嬬被涓璧蜂娇鐢ㄦ椂涓崭细鍑虹幇绫诲瀷瀹夊叏闂棰桡纴灏卞彲浠ヤ娇鐢ˊSafeVarargs娉ㄨВ𨱒ュ0鏄庛傛敞镒忚ユ敞瑙e彧鑳界敤浜庡彲鍙橀暱鍙傛暟镄勬柟娉曟垨钥呮瀯阃犳柟娉曪纴骞朵笖鏂规硶蹇呴’澹版槑涓簊tatic鎴杅inal銆
D. 上课要求jdk版本1.8.0而我的版本是jdk11,有什么区别
jdk版本迭代都是根据上一代进行增添新功能。djk11在1.8版本上只是添加了少许新内容以适应现在互联网技术节奏,除了新添加的内容,两者没有什么影响。也就是,如果不用到新添加的内容,运行不受影响。但是需要知道,有哪些内容是新的。
JDK1.8的新特性:
一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。
二、Lambda 表达式在Java 8 中你就没必要使用这种传统的匿名对象的方式了,Java 8提供了更简洁的语法,lambda表达式:
Collections.sort(names, (String a, String b) -> {return b.compareTo(a);});
三、函数式接口Lambda表达式是如何在java的类型系统中表示的,每一个lambda表达式都对应一个类型,通常是接口类型。
而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为默认方法不算抽象方法,所以也可以函数式接口添加默认方法。
四、方法与构造函数引用Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法:
converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted);
五、Lambda 作用域在lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似。你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。
六、访问局部变量可以直接在lambda表达式中访问外层的局部变量:
七、访问对象字段与静态变量 和本地变量不同的是,lambda内部对于实例的字段以及静态变量是即可读又可写。该行为和匿名对象是一致的:
八、访问接口的默认方法JDK 1.8 API包含了很多内建的函数式接口,在老Java中常用到的比如Comparator或者Runnable接口,这些接口都增加了@FunctionalInterface注解以便能用在lambda上。
Java 8 API同样还提供了很多全新的函数式接口来让工作更加方便,有一些接口是来自Google Guava库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到lambda上使用的。
(4)javajdk新特性扩展阅读:
jdk11新特性:
1、字符串加强
// 判断字符串是否为空白" ".isBlank(); // true// 去除首尾空格" Javastack ".strip(); // "Javastack"// 去除尾部空格 " Javastack ".stripTrailing()。
// 去除首部空格 " Javastack ".stripLeading(); // "Javastack "// 复制字符串"Java".repeat(3); // "JavaJavaJava"// 行数统计"A
B
C".lines().count(); // 3
2、HttClient Api
这是 Java 9 开始引入的一个处理 HTTP 请求的的孵化 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在java.net包中找到这个 Api
3、用于 Lambda 参数的局部变量语法
用于 Lambda 参数的局部变量语法简单来说就是支持类型推导:
var x = new A();for (var x : xs) { ... }try (var x = ...) { ... } catch ...
4、ZGC
从JDK 9开始,JDK使用G1作为默认的垃圾回收器。G1可以说是GC的一个里程碑,G1之前的GC回收,还是基于固定的内存区域,而G1采用了一种“细粒度”的内存管理策略,不在固定的区分内存区域属于surviors、eden、old。
而我们不需要再去对于年轻代使用一种回收策略,老年代使用一种回收策略,取而代之的是一种整体的内存回收策略。
这种回收策略在我们当下cpu、内存、服务规模都越来越大的情况下提供了更好的表现,而这一代ZGC更是有了突破性的进步。
从原理上来理解,ZGC可以看做是G1之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化。
在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。只有当整理完成后,线程逻辑才可以继续运行。
E. JDK7.0 与 JDK6.0 区别 及 JDK7的新特性
JDK7.0和JDK6.0有什么区别?
jdk7是模块化程序,模块间的依赖性变小了.jdk的好多功能间有相互依赖性,导致一个配置不对,好多不能用.举例来说:假设你正使用Logging API(java.util.logging)),Logging需要NIO和JMX,JMX需要JavaBeans, JNDI, RMI和CORBA,JNDI需要java.applet.Applet而且JavaBeans依赖AWT.
JDK7 新特性:
JSR203:JDK中会更多的IO API(“NIO.2”)访问文件系统与之前的JDK中通过java.io.File访问文件的方式不同,JDK7将通过java.nio.file包中的类完成。JDK7会使用java.nio.file.Path类来操作任何文件系统中的文件。(这里说的任何文件系统指的是可以使用任何文件存储方式的文件系统)
示例:
Java7之前
File file = new File(“some_file”);
使用Java7
Path path = Paths.get(“some_file”);
在File类中加入了新的方法toPath(),可以方便的转换File到Path
Path path = new File(“some_file”).toPath();
Socket通道绑定和配置在JDK7中面向通道的网络编程也得以更新!JDK7中可以直接绑定通道的socket和直接操作socket属性。JDK7提供了平台socket属性和指定实现的socket属性。
JDK7加入了一个新的字节通道类,SeekableByteChannel
NetworkChannel是面向网络通道编程模块中的又一个新的超接口。利用它可以方便的绑定通道socket,并且方便设置和获取socket的属性。
MulticastChannel接口方便创建IP协议多播。多播实现直接绑定到本地的多播设备。
灵活的异步I/O可以通过真正的异步I/O,在不同的线程中运行数以万计的流操作!JKD7提供了对文件和socket的异步操作。一些JDK7中的新通道:
AsynchronousFileChannel:异步文件通道可以完成对文件的异步读写操作。
AsynchronouseSocketChannel:Socket中的一个简单异步通道,方法是异步的并且支持超时。
:异步的ServerSocket
AsynchronousDatagramChannel:基于数据包的异步socket
JSR292:Java平台中的动态编程语言Da Vinci Machine项目(JSR292)的主旨是扩展JVM支持除Java以外的其它编程语言,尤其是对动态编程语言的支持。所支持的语言必须和Java一样不收到歧视并共同存在。JSR334:Java语言的一些改进OpenJDK项目的创造(JSR334)的主旨是对Java语言进行一些小的改进来提高每天的Java开发人员的工作。这些改进包括:
Switch语句允许使用String类型
支持二进制常量和数字常量中可以使用下划线
使用一个catch语言来处理多种异常类型
对通用类型实例的创建提供类型推理
Try-with-resources语句来自动关闭资源
JSR119:Java编译器APIJSR199是在JDK6中加入的,主要用来提供调用Java编译器的API。除了提供javac的命令行工具,JSR199提供Java编译器到程序交互的能力。Java编译器API要达到三个目标:
对编译器和其它工具的调用
对结构化的编译信息进行访问
对文件输入输出定制化处理的能力
JSR206:Java XML处理的API (JAXP)JSR206即Java API for XML Processing(JAXP),是Java处理XML文档的一个与实现无关,灵活的API。
JAXP1.3的主要特性包括:
DOM3
内建通过XML Schema进行文档校验的处理器
对XML Schema中的数据类型的实现,在javax.xml.datatype包中。
XSLTC,最快的转换器,也是XSLT处理中的默认引擎。
提供对XInclude的实现。这将会方便我们使用文本和其它已有的XML来创建新的文档,这样可以对文档片段进行重用。
JDK7中会包含JAXP1.3,这个是JAXP的最新实现。
绑定技术(JAXB)JSR222即Java Architecture for XML Binding(JAXB)。JAXB的目的是便于Java程序进行Java类到XML文档的映射。
JAXB2的主要特性:
支持全部的W3C XML Schema特性。(JAXB1.0说明了对于W3C XML Schema中某些特性的不支持)
支持绑定Java到XML文档,通过添加javax.xml.bind.annotation包来控制绑定。
大量减少了对于schema衍生出来的类。
通过JAXP1.3的校验API来提供额外的校验能力。
JDK7中将包括JAXB2.2
JSR224:基于XML的Web服务API(JAX-WS)JSR224即Java API for XML-based Web Services(JAX-WS),是一个基于Annotation标注的编程模型,主要针对Web Service应用和客户端开发。
JAX-WS2的主要特性包括:
对JAXB2.1 API的支持(JSR222)
对Web Services Addressing 1.0的支持
EndpointReference(EPR)的API:创建(BindingProvider.getEndpointReference(),Endpoint.getEndpointReference(),MessageContext.getEndpointReference())
事务处理(使用JAXB2.1绑定W3C EPR到W3CEndpointReference类,使用JAXB Marshall/Unmarshall W3CendpointReference类)
提供友好的API来启用和停止某些特性,例如MTOM特性和Addressing特性
JDK7将包含JAX-WS2.2
可插拔的Annotation处理APIJSR269即Pluggable Annotation-Processing API
从JDK5开始,Annotation标注就成了强大的机制用来标注我们的类、属性和方法。通常Annotation标注是在创建阶段或者运行阶段进行处理的,并获取语义结果。JSR269主要用来定义一套API,允许通过可插拔的API来进行标注处理器的创建。
规范包括一部分的API用来对Java编程语言进行构建,还有就对标注处理器声明和控制运行的部分。
有了程序中的Annotation标注,就需要有标注处理器框架来反射程序的结构。
Annotation处理器会指定他们处理的标注并且更多的处理器可以合作运行。
标注处理器和程序结构的API可以在构建阶段访问。
小的改进java.util.Objects提供了一套9个静态方法。其中两个方法用来检测当前对象是null还是非null。两个方法用来提供生成toString()字符串同时支持null对象。两个用来处理hash的方法。两个方法用来处理equals。最后一个compare方法用来进行比较。Swing JLayer组件JXLayer是一个组件装饰器,提供了用来装饰多个组合组件的方式,并且可以捕获所有鼠标、键盘和FocusEvent的事件,并针对所有的XLayer子组件。这个组件只会对public swing的api起作用,对全局设置没有作用,例如对EventQueue或者RepaintManager。(除了这些,Swing还将在JDK7中提供JXDatePicker和CSS方式样式)并发和集合APIJSR166,并发和集合API提供了灵活的异步处理,并发HashMap,传输队列和轻量级的fork/join框架以及本地线程方式的伪随机数生成器。类加载器体系结构类加载器已经升级到了可以在无等级类加载器拓扑中避免死锁。JDK7中包含了一个对于多线程自定义类加载器的增强实现,名字为具有并行能力的类加载器。使用平行能力的类加载器加载class,会同步到类加载器和类名。Locale类的改进Java Locale避免由于小的变化导致数据丢失。除此,Locale应该提供更多的特性,例如IETF BCP 47和UTR 35(CLDR/LDML)。分离用户Locale和用户接口LocaleJDK7分离了UI语言的locale和格式化locale,这个已经在Vista之后的windows系统中实现了。严格的类文件检测通过JavaSE6的规范,version51(SE7)的类文件和之后的版本必须通过类型检测来检验。对于老的推理验证VM不可以宕掉Elliptic-Curve
Cryptography (ECC)椭圆曲线加密
从JDK7开始,Java提供对标准的ECC算法的灵活实现(基于椭圆曲线的公钥加密算法)Swing中的Nimbus外观Nimbus是JDS(Java Desktop System)中的新外观。这个也是Solaris11的GTK主题Java2D中的XRender PipelineJDK7中加入了基于X11 XRender扩展的Java2D图形管道。这将提供更多的对于当前先进的GPUs访问的功能。TLS1.2TLS (Transport Layer Security)是一个用在Internet上的数据传输安全协议,用来避免监听、引诱和消息伪造。TLS的主要目的是提供两个应用间通信的隐私和数据完整。TLS是RFC5246标准,在JDK7中提供1.2JDBC4.0/4.1JDBC4.1特性只在JDK7或者更高版本中存在。JDBC4.1只是对JDBC4.0进行较小的改动。关于一些JDBC4.0/4.1的特性:
数据源—Derby包括了对于javax.sql.DataSource的新的实现
JDBC驱动自动加载—应用不必在通过Class.forName()方法来加载数据库驱动了。取而代之的是DriverManager会根据应用请求连接的情况,自动查找到合适的JDBC驱动。
包装—这是JDBC4.0中的新的概念,主要是通过这种机制可以让应用获取的厂商提供的标准JDBC对象实现,例如Connections,Statements和ResultSets。
Statement事件—连接池可以监听Statement的关闭和错误时间。addStatementEventListener和removeStatementEventListener被加入到了javax.sql.PooledConnection
JDK7提供了JDBC4.1全部的支持
透明窗体和异形窗体为了6u10版本的图形处理,JDK提供了透明效果的支持(简单透明和像素透明)并且提供了对于异形窗体的支持(可以将窗体设置成任意形状),轻重混合并且增强了AWT安全警告。透明效果和异形窗体是通过com.sun.awt.AWTUtilities类实现的。Unicode6.0Unicode6.0提供了诸如2.088字符集、对已经存在字符集的属性改进、格式化改进以及新的属性和数据文件。
JDK7已经更新到对Unicode6.0的支持。
要来关闭URLClassLoader的方法
对JMX代理和MBeans的改进
通过URLClassLoader,应用可以通过URL搜索路径来加载类和资源。JKD7提供了close()新方法来帮助URLClassLoader清理资源。
这个改进来至于JRockit,可以方便连接平台。MBean服务器可以通过防火墙提供一套MBeans,这些暴露了VM中的一些内部操作的信息
新的垃圾回收器JDK7提供了新的垃圾回收器,针对目前的CMS垃圾回收器,这将会让垃圾回收器有更少的停顿时间和更高的语言效果。改进的JSRJSR901:Java Language Specification(JLS)Java语言计划
JSR901包括了从第一版Java规范到现在为止的所有的变化、说明和补充。Java语言通过JLS规范。
对于JLS的改变通过JSR901进行管理
JDK7将会包括最新的JSR901
JSR924:JVM平台规范
JSR924目的是维护Java虚拟机规范的变化,其中第二版是为了J2SE1.5的。
Java SE API
JavaSE APIs保持着对例行维护和小范围改进的加入计划的记录
延期到JDK8或者之后的规范
JSR294:Java语言和虚拟机对模块编程技术的支持—当前JSR主要的目的是提供在编译期和运行期的模块编程支持
JSR308:对于Java类型的Annotation注释—这将是对于当前注释符号系统的扩展,将允许我们在类型中出现注释符号。
JSR296:Swing应用框架—主旨是消除Swing编程中的模板代码并且提供Swing程序更加简单的结构。
模块化—提供一个明确的、简单的、低级别的模块系统,主要目的是将JDK模块化。
JSR TBD:Lambda项目—Lambda表达式(通俗的也称为“闭包“)和对Java编程语言的保护方法
JSR TBD:对于集合支持的语言—常量表达式对于lists、sets和maps的迭代以及通过索引符号对lists和maps的访问。
Swing JDatePicker组件—添加SwingLabs JXDatePicker组件到平台。