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());讀出所有的內容包括空格
		}
	}

}


轉載請註明出處,如有錯誤請幫我指出謝謝^!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章