我是靠谱客的博主 酷酷发带,这篇文章主要介绍Java10新特性及部分新增API介绍一、新特性二、部分新增的API类库,现在分享给大家,希望可以做个参考。

一、新特性

1.1 局部变量类型推断

首先从名字来看,可知其作用范围是针对局部变量。它其实就是通过保留类型var,来定义局部变量,可以根据变量值来进行类型的推断。需要注意的是:var 是保留类型不是关键字。意味着我们还可以用var来定义变量名或者是方法名。其次就是var不允许赋值为null。它还可以推断出自定义的类型,具体示例代码如下:
自定义Users类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Users{ private String username; private Integer userage; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getUserage() { return userage; } public void setUserage(Integer userage) { this.userage = userage; } @Override public String toString() { return "Users [username=" + username + ", userage=" + userage + "]"; } }

使用示例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Demo1 { public static void main(String[] args) { var i = 10; var str="abc"; var list = new ArrayList<>(); list.add("define list by var"); var set = new HashSet<>(); set.add("define set by var"); var map = new HashMap<String,String>(); map.put("test", "define map by var"); var users = new Users(); users.setUserage(20); users.setUsername("define user by var"); System.out.println(i); System.out.println(str); for(var i1=0;i1<list.size();i1++) { System.out.println(list.get(i1)); } for(var temp :set) { System.out.println(temp); } Set<String> keys = map.keySet(); for(var key :keys) { System.out.println(map.get(key)); } System.out.println(users); } }

1.2 垃圾回收器优化

我们知道JVM的分带策略中有新生代和老年带,对不同的带采取不同的垃圾收集器。比如在jdk9中,新生代用的垃圾收集器是ParNew收集器。老年代用的是Parallel Old收集器。而在jdk10中,新生代和老年带都使用G1(Garbage-Frist)全收集器。

二、部分新增的API类库

2.1 copyOf方法

在java.util.List、java.util.Set、java.util.Map新增加了一个静态方法copyOf这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/** * copyOf方法的使用 * @author Administrator * */ public class Demo2 { public static void main(String[] args) { var list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); var list2 = List.copyOf(list); /*for (String string : list2) { System.out.println(string); }*/ var set = new HashSet<String>(); set.add("b"); set.add("a"); set.add("c"); set.add("d"); var set2 = Set.copyOf(set); /*for (String string : set2) { System.out.println(string); }*/ var map = new HashMap<>(); map.put("k1", "a"); map.put("k2", "b"); var map2 = Map.copyOf(map); var keys = map2.keySet(); for (Object object : keys) { System.out.println(map2.get(object)); } } }

2.2 Java.io.ByteArrayOutputStream:toString(Charset)

重载toString()方法,通过使用指定的字符集编码字节,将缓冲区的内容转换为字符串。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/** * java.io.ByteArrayOutputStream.toString(Charset) * @author Administrator * */ public class Demo3 { public static void main(String[] args) throws Exception { String str = "我是中国人"; ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes("gbk")); 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")); } }

2.3 Java.io.PrintStream、java.io.PrintWriter

这两个类都增加了三个新的构造方法,他们需要而外的参数charset

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/** * java.io.PrintStream、java.io.PrintlWriter新增构造方法 * @author Administrator * */ public class Demo4 { public static void main(String[] args) throws Exception{ String str = "中锄禾日当午,汗滴禾下土"; var p = new PrintWriter("d:/aa.txt", "gbk"); p.println(str); p.flush(); p.close(); } }

2.4 Java.io.Reader:transferTo方法

这个Reader中读取所有字符串,并按照所读取的顺序将字符串写入给指定的Writer

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/** * Reader:transferTo方法 * @author Administrator * */ public class Demo5 { public static void main(String[] args) throws Exception{ var reader = new BufferedReader(new InputStreamReader(new FileInputStream("d:/aa.txt"), "gbk")); var p = new PrintWriter(new File("d:/cc.txt")); reader.transferTo(p); p.flush(); p.close(); reader.close(); } }

2.5 java.util.Formatter、java.util.Scanner

新增三个构造方法,除了其他参数之外,都需要一个charset参数

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/** * java.util.Scanner * @author Administrator * */ public class Demo6 { public static void main(String[] args) throws Exception { var scan = new Scanner(new FileInputStream(new File("d:/aa.txt")),"gbk"); scan.useDelimiter(" |,"); while(scan.hasNext()) { System.out.println(scan.next()); } } }

最后

以上就是酷酷发带最近收集整理的关于Java10新特性及部分新增API介绍一、新特性二、部分新增的API类库的全部内容,更多相关Java10新特性及部分新增API介绍一、新特性二、部分新增内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部