Java-java版本特性
Posted 南瓜__pumpkin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-java版本特性相关的知识,希望对你有一定的参考价值。
概述和文章大纲表
目的:在了解Java版本特性的同时,学习Java语言封装的类和方法等等,夯实语言基础。
java特性 | 相关设计 |
---|---|
特性1 | 查找的快捷设计hashcode,String类两个方法,util工具类库 |
特性2 | 二进制 0b 字面量,数字分隔符_ |
特性3 | try-with-resource解决 内存泄漏和异常屏蔽问题 |
特性4 |
Java 7
switch中添加对String类型的支持
详情见 Java 7~14各个版本新特性详解 ,简单地说:switch有多个case时,先将String转换为hashCode,然后相应的进行处理,JavaCode在底层兼容Java7曾经版本号。
类String
String.hashCode()用于返回字符串的哈希码,计算过程见 Java hashCode() 方法,设计原理见 Java中hashCode的作用,用来在散列存储结构中确定对象的存储地址,主要用于 查找的快捷性 。
相关String.equals(),String 类中重写了 equals() 方法用于比较两个字符串的内容是否相等,详情参考 Java String equals() 方法。
实用工具类库 java.util
在这个包中,Java提供了一些实用的方法和数据结构,详情参考 java.util包详解。
java.util 提供的类 | 用途说明 |
---|---|
日期(Data)类、日历(Calendar)类 | 来产生和获取日期及时间 |
随机数(Random)类 | 产生各种类型的随机数 |
堆栈(Stack) | - |
向量(Vector) | - |
位集合(Bitset) | - |
哈希表(Hashtable) | - |
等等类 | 来表示相应的数据结构 |
数字字面量的改进 / 数值可加下划
参考 Java 7~14各个版本新特性详解 ,字面量_百度百科
字面量:在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。
Java7前支持十进制(123)、八进制(0123)、十六进制(0X12AB)。Java7添加二进制表示(0B11110001、0b11110001)。
Java7中支持在数字量中间添加’_'作为分隔符。更直观,如(12_123_456)。下划线仅仅能在数字中间。编译时编译器自己主动删除数字中的下划线。
int one_million = 1_000_000;
异常处理(捕获多个异常) try-with-resources
参考 Java基础之try-with-resource语法糖, 为什么推荐使用try-with-resources代替try-finally
catch子句能够同一时候捕获多个异常
public void testSequence() {
try {
Integer.parseInt("Hello");
} catch (NumberFormatException | RuntimeException e) {
//使用'|'切割,多个类型,一个对象e
}
}
try-with-resources,涉及 Java内存管理 和 异常处理 两部分。
在Java使用资源必须手动调用.close()关闭资源,否则会产生 Java内存泄漏问题,可能会严重影响性能。关闭的方法有很多种。比如finalizer、try-catch-finally、try-with-resources等等。
try-catch-finally 语句有两个问题:
在 try 语句中调用资源,就必须在 finally 语句中手动关闭资源,如果使用了多个 try 语句,那么就会导致代码复杂不美观的问题。
如果 catch 语块 和 finally 语块同时发生 exception,那么会产生 异常屏蔽。
Java内存泄漏问题:不再会被使用的对象的内存没有回收。
异常屏蔽:由于我们一次只能抛出一个异常,所以在最上层看到的是最后一个抛出的异常,可能会导致某些bug变得极其难以发现。
正题:try-with-resources是jdk1.7引入的语法糖,使用编译器自动关闭资源,使得关闭资源操作无需层层嵌套在finally,同时避免了可能的 Java内存泄漏 问题。并且使用 AutoCloseable接口 解决了异常屏蔽 问题。
语句 | 格式 |
---|---|
try-catch-finally语句 | try {}catch{}finally{} |
try-with-resources语句 | try(资源调用){} |
增强泛型推断
参考 什么是Java的泛型,Java总结篇系列:Java泛型
泛型
“因为集合存放的数据类型不固定,故往集合里面存放元素时,存在安全隐患,如果在定义集合时,可以想定义数组一样指定数据类型,那么就可以解决该类安全问题。JDK1.5后出现了泛型,用于解决集合框架的安全问题。泛型是一个类型安全机制。”
参考
以上是关于Java-java版本特性的主要内容,如果未能解决你的问题,请参考以下文章
译ECMAScript 2016, 2017, 2018 新特性之必读篇