jdk17语法新特性Word文件下载.docx
- 文档编号:16907613
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:15
- 大小:19.87KB
jdk17语法新特性Word文件下载.docx
《jdk17语法新特性Word文件下载.docx》由会员分享,可在线阅读,更多相关《jdk17语法新特性Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
inta=10_0000_0000;
longb=0xffff_ffff_ffff_ffffl;
bytec=0b0001_1000;
注意:
你只能将下划线置于数字之间,以下使用方法是错误的,
1.数字的开头或者结尾
2.小数点的前后
3.‘F’或者‘f’的后缀
4.只能用数字的位置
interr1=_11,err2=11_;
floaterr3=3._4,err4=3_.4;
longerr5=0x888_f;
3.switch语句允许使用字符串
这个功能千呼万唤,终于出来了
private
static
void
switchString(String
str){
switch(str){
case
"
one"
:
System.err.println("
1"
);
break;
two"
System.out.println("
2"
default
err"
}
}
4.泛型实例的创建可以通过类型推断来简化
以后你创建一个泛型实例,不需要再详细说明类型,只需用<
>
编译器会自动帮你匹配
//例如
Map
myMap
new
HashMap();
//可以简化为
HashMap<
();
//例如
Map>
myMap=newHashMap>
//可以简化为
myMap=newHashMap<
5.在可变参数方法中传递非具体化参数(Non-ReifiableFormalParameters),改进编译警告和错误
有些参数类型,例如ArrayList和List,是非具体化的(non-reifiable).在编译阶段,编译器会擦除该类型信息。
Heappollution指一个变量被指向另外一个不是相同类型的变量。
例如
List
l
ArrayList();
ls
l;
//
unchecked
warning
l.add(0,
Integer(42));
another
String
s
ls.get(0);
ClassCastException
is
thrown
Listl=newArrayList();
Listls=l;
//uncheckedwarning
l.add(0,newInteger(42));
//anotheruncheckedwarningStrings=ls.get(0);
//ClassCastExceptionisthrown
回到我们的主题,在jdk7中,当你定义下面的函数时
public
addToList
(List
listArg,
T...
elements)
{
for
(T
x
listArg.add(x);
你会得到一个warning
warning:
[varargs]
Possible
heap
pollution
from
parameterized
vararg
type
publicstaticvoidaddToList(ListlistArg,T...elements){for(Tx:
elements){
listArg.add(x);
}
}
你会得到一个warning
[varargs]Possibleheappollutionfromparameterizedvarargtype
在jdk7之前,当你调用一个含有非具体化参数的可变参数方法,你必须自行保证不会发生“heappollution”。
这有一个问题,如果调用者对方法不熟悉,他根本无法判断。
JDK7对此做了改进,在该方法被定义时久发出警告
要消除警告,可以有三种方式
1.加annotation@SafeVarargs
2.加annotation@SuppressWarnings({"
unchecked"
"
varargs"
})
3.使用编译器参数–Xlint:
varargs;
6.try-with-resources语句
jdk7提供了try-with-resources,可以自动关闭相关的资源(只要该资源实现了AutoCloseable接口,jdk7为绝大部分资源对象都实现了这个接口)
readFirstLineFromFile(String
path)
throws
IOException
try
(
BufferedReader
br
BufferedReader(new
FileReader(path))){
return
br.readLine();
staticStringreadFirstLineFromFile(Stringpath)throwsIOException{
try(
BufferedReaderbr=newBufferedReader(newFileReader(path))){
returnbr.readLine();
try语句块中还可以同时处理多个资源,可以跟普通的try语句一样catch异常,有finally语句块
(
java.util.zip.ZipFile
zf
java.util.zip.ZipFile(zipFileName);
java.io.BufferedWriter
writer
java.nio.file.Files.newBufferedWriter(outputFilePath,
charset)
)
}
catch(…){
finally{
7.Catch多个Exception,throwexception改进了类型检测
try(
java.util.zip.ZipFilezf=newjava.util.zip.ZipFile(zipFileName);
java.io.BufferedWriterwriter=java.nio.file.Files.newBufferedWriter(outputFilePath,charset)
){}
catch(…){}
finally{}
很多时候,我们捕获了多个异常,却做了相同的事情,比如记日志,包装成新的异常,然后rethrow。
这时,代码就不那么优雅了,例如
catch
(IOException
ex)
logger.log(ex);
throw
ex;
(SQLException
catch(IOExceptionex){
throwex;
catch(SQLExceptionex){
throwex;
Jdk7允许捕获多个异常
(IOException|SQLException
catch(IOException|SQLExceptionex){
注意,catch后面的异常参数是final的,不能重新再复制
RethrowException更具包容性的类型检测
当你重新抛出多个异常时,不再需要详细定义异常类型了,编译器已经知道你具体抛出的是哪个异常了。
你只需在方法定义的时候声明需要抛出的异常即可
call()
ReflectiveOperationException,
callWithReflection(arg);
(final
Exception
e)
logger.trace("
in
reflection"
e);
e;
8.菱形语法
菱形语法(泛型实例化类型自动推断)
List<
String>
list
ArrayList<
<
这个真的很像菱形
9.不可具体化的泛型(任意类型)可变参数
list=newArrayList<
//<
在目前版本中,不可具体化的泛型(任意类型)可变参数,在编译时,会在调用处产生警告,JDK7里将这个警告挪到了方法定义处。
变化前:
static<
T>
List<
asList(T...elements){...}
staticList<
Callable<
stringFactories(){
Callable<
a,b,c;
...
//警告处
returnasList(a,b,c);
asList(T...elements){...}
stringFactories(){
...
//警告处
变化后:
//警告处
3,switch现在可以支持字符串了
Strings=...
switch(s){
case"
quux"
processQuux(s);
//没有break,继续往下
foo"
bar"
processFooOrBar(s);
break;
baz"
processBaz(s);
default:
processDefault(s);
Strings=...
switch(s){
//没有break,继续往下
asList(T...
...
stringFactories()
a,
b,
c;
警告处
asList(a,
c);
{
...
警告处
变化后:
3,switch现在可以支持字符串了
switch(s)
processQuux(s);
//没有break,继续往下
processFooOrBar(s);
processBaz(s);
default:
processDefault(s);
//没有break,继续往下
10.支持二进制语法和单位级别的数字表示方式
8位byte
aByte
(byte)0b00100001;
16位short
aShort
(short)0b1010000101000101;
32位int
anInt1
0b10100001010001011010000101000101;
8位byte
16位short
32位int
支持单位级别的数字,提高可读性
underScores
9_223_372_036_854_775_807L;
每三位加一下划线,等同于
9,223,372,036,854,775,807
9,223,372,036,854,775,807
11.从语法层面上支持集合,不再是数组的专利
final
Integer>
piDigits
[3,
1,
4,
5,
9,
2,
6,
3,
9];
Set<
primes
7,
31,
127,
8191,
131071,
524287
};
Map<
Integer,
platonicSolids
4
tetrahedron"
6
cube"
8
octahedron"
12
dodecahedron"
20
icosahedron"
12.JSR292动态类型语言支持
Dynamic
(动态语言脚本);
Object
y
x.foo("
ABC"
).bar(42).baz();
13.动态资源管理
Dynamicx=(动态语言脚本);
Objecty=x.foo("
\
在目前版本的java中,当你操作流时,一定会加try..finally以保证出现异常时,流能被正确关闭。
FileReader(path));
tr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jdk17 语法 特性