常用的jdk10新特性
Jdk从9以后就不在提供32位版本了,均是64位
1局部变量类型推断
var:保留类型。不是关键字
1.只针对局部变量
2.var 是保留类型不是关键字。意味着我们还可以用var来定义变量名或者是方法名
3.需要提供一个确切的值来推断变量的类型
4.var 不允许赋值null
基本数据类型,list,set,Map,其他引用类型(例如:User),均可以使用var 来定义。
例如:
var num = 100;
var str = “abcd”;
var list = new ArrayList<>();
var set = new HashSet<>();
var map = new HashMap<String,String>();
var user = new User();
//var index = null; 报错
2垃圾收集器的优化
JDK9:新生代:ParNew收集器。老年代:Parallel Old收集器
Stop The World
JDK10:G1(Garbage-Frist)全收集器
JDK10 通过并行Full GC,改善G1的延迟
jmc.exe监控java运行的情况
3.新增73个新功能扩展API类库
(1)copyOf方法
在java.util.List、java.util.Set、java.util.Map新增加了一个静态方法copyOf
这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合。
var list2 = List.copyOf(list);
var set2 = Set.copyOf(set);
var map2 = Map.copyOf(map);
如果修改:
例如:list2.add(something);
会报错:
Java.lang.UnsupportedOperationException
(2)Java.io.ByteArrayOutputStream:toString(Charset)
添加有参数的toString©方法(重载)
重载toString()方法,通过使用指定的字符集编码字节,将缓冲区的内容转换为字符串。
String str = "北京欢迎你";
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes("gbk"));
//以gbk编码方式读取,默认以utf-8编码方式读取
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int c = 0;
while((c = bis.read()) != -1) {
bos.write(c);
}
//bos.toString() 默认的使用的UTF-8编码
System.out.println(bos.toString());//乱码
System.out.println(bos.toString("gbk"));//以gbk编码方式输出
(3)Java.io.PrintStream、java.io.PrintWriter
这两个类都增加了三个新的构造方法,这些方法都需要额外的参数charset
var str = "北京欢迎你";
var p = new PrintWriter("e:/wel.txt", "gbk");
//将str以gkb的编码方式输出到e盘下的wel.txt文件(windows下是ANSI编码,与gbk对应)
(4)Java.io.Reader 新增:transferTo方法
从这个Reader中读取所有字符串,并按照所读取的顺序将字符串写入给指定的Writer中
相当于文件拷贝,copyOf方法
var reader = new BufferedReader
(new InputStreamReader(new FileInputStream("e:/wel.txt"), "gbk"));
//以gbk编码方式读取e:/wel.txt 文件
var p = new PrintWriter(new File("e:/welc.txt"));//新建e:/welc.txt文件
reader.transferTo(p);//按照所读取wel.txt文件内容顺序将字符串写入给指定的welc.txt文件中
(5)java.util.Formatter、java.util.Scanner
新增三个构造方法,除了其他参数之外,都需要一个charset参数
//以gbk编码方式读取e:/wel.txt
var scan = new Scanner(new FileInputStream(new File("e:/wel.txt")),"gbk");
//useDelimiter 可以传入多个分隔符,用‘|’隔开,表示将读取的文件内容以‘分//隔符’的方式分隔并输出
scan.useDelimiter(" |,");
while(scan.hasNext()) {
//next:输出读取文件的全部内容
//nextLine:输出读取文件内容的一行
System.out.println(scan.next());
}
4.为了简化和简化开发,将JDK多存储库合并到一个存储库中
多年来,JDK的完整代码已经被分解成多个存储库。在JDK9 中有八个仓库:root、corba、hotspot、jaxp、jaxws、jdk、langtools和nashorn。在JDK10中被合并为一个存储库。