Java10新特性及部分新增API介绍

一、新特性

1.1 局部变量类型推断

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

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 + "]";
	}
	
}

使用示例:

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这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合。

/**
 * 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()方法,通过使用指定的字符集编码字节,将缓冲区的内容转换为字符串。

/**
 * 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

/**
 * 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

/**
 * 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参数

/**
 * 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());
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值