JDK10.0新特性

JDK10.0新特性

1.局部变量类型推断
2.垃圾收集器优化
3.新增加73个新功能扩展API类库
4.copyof方法
5.ByteArrayOutputStream下的toString()方法
6.Java.io.PrintStream、java.io.PrintWriter
7.Java.io.Reader:transferTo方法
8.java.util.Formatter、java.util.Scanner

使用jdk10需要最新版eclipse


局部变量类型推断
  • var:保留类型,不是关键字
  • 意味着我们还可以用var来定义变量名字或方法名
  • 只针对局部变量
  • 所有定义类型或返回值类型都可以用var表示
  • var 不允许赋值null
/**
 * JDK10新特性讲解:局部变量类型推断
 * @author Administrator
 * 定义一个javabean
 */
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 {

	/**
	 * 该特定注意点:
	 * 1.只针对局部变量
	 * 2.var 是保留类型不是关键字。意味着我们还可以用var来定义变量名或者是方法名
	 * 3.var 不允许赋值null
	 * @param args
	 */
	public static void main(String[] args) {
	 var i = 10;
	 var str="abc";
	 
	 var list = new ArrayList<>();
	 list.add("list test var");
	 
	 var set = new HashSet<>();
	 set.add("set test var");
	 
	 var map = new HashMap<String,String>();
	 map.put("test", "map test var");
	 
	 var users = new Users();
	 users.setUserage(20);
	 users.setUsername("user test 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);
	}
}


垃圾收集器优化
  • jdk9:新生代:parnew收集器.老年代:parallel oldl收集器
  • jdk10:G1(Garbage-First)全收集器
  • 找到安装路径下D:\Java\jdk-10.0.1\bin\jmc.exe

新增加73个新功能扩展API类库
copyof方法
  • 在java.util.List、java.util.Set、java.util.Map新增加了一个静态方法copyOf
  • 这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合
public class Demo2 {

	public static void main(String[] args) {
	    
	    //list集合
		var list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		
		var list2 = List.copyOf(list);
		//如果你此时要修改list2就会报错
		//list2.add("e");这个代码会报错
		/*for (String string : list2) {
			System.out.println(string);
		}*/
		
		//set集合
		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);
		}*/
		
		//map集合
		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));
		}
	}
}


ByteArrayOutputStream下的toString()方法
  • java.io.ByteArrayOutputStream:toString(Charset)
    • 重载toString()方法,通过使用指定的字符集编码字节,将缓冲区的内容转换为字符串。
public class Demo3 {

	public static void main(String[] args) throws Exception {
	    //定义一个字符串
		String str = "我是中国人";
		
		//输入流将字符串转换成字节,并以gbk编码格式输入
		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());
		
		//所以上面输入使用gbk那么后面输出也要使用gbk
		System.out.println(bos.toString("gbk"));
	}
}

Java.io.PrintStream、java.io.PrintWriter
  • 这两个类都有三个新的构造方法,他们需要额外的参数charset
public class Demo4 {

	public static void main(String[] args) throws Exception{
	    //定义一个字符串
		String str = "中是中国人";
		
		//使用输出流,在d盘写一个aa.txt文件,指定编码GBK
		var p = new PrintWriter("d:/aa.txt", "gbk");
		
		//输出字符串
		p.println(str);
		
		//刷新
		p.flush();
		
		//关流
		p.close();
	}
}


Java.io.Reader:transferTo方法
  • 从这个Reader中读取所有字符串,并按照所读取的顺序将字符串写入给指定的Writer
  • 就是说你不要再写读一行写一行这样的代码
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();
	}
}


java.util.Formatter、java.util.Scanner
  • 新增三个构造方法,除了其他参数之外,都需要一个charset参数
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()) {
		    //然后这里要使用next方法读
			System.out.println(scan.next());
			//System.out.println(scan.nextLine());读出所有的内容包括空格
		}
	}

}


转载请注明出处,如有错误请帮我指出谢谢^!

猜你喜欢

转载自blog.csdn.net/JetaimeHQ/article/details/83032131