1. 程式人生 > >java10 新特性 詳解

java10 新特性 詳解

喜歡 如果 des enc hashmap 兩個 替換 user 亂碼

  引言:
  
  點擊--》java9 新特性 詳解
  
  點擊--》java8 新特性 詳解
  
  正題:
  
  1、局部變量var
  
  將前端思想var關鍵字引入java後段,自動檢測所屬於類型,一種情況除外,不能為null,因為不能判斷具體類型,會報異常。
  
  @Test
  
  public void test1(){
  
  var number = 10;
  
  var str = "i like java";
  
  var list = new ArrayList<>();
  
  var map = new HashMap<>();
  
  var set = new HashSet<>();
  
  list.add("test var is list");
  
  map.put("1","test var is map");
  
  set.add("test var is set");
  
  System.out.println(number);
  
  System.out.println(str);
  
  System.out.println(list.toString());
  
  System.out.println(map.toString());
  
  System.out.println(set.toString());
  
  }
  
  結果:
  
  10
  
  i like java
  
  [test var is list]
  
  {1=test var is map}
  
  [test var is set]
  
  var可以用於任何類型,基本類型,集合,以及實體類等等都可以,省略了我們在前面寫入具體的類型,我們盡管var,讓它自己去判斷就好了。
  
  2、copyOf方法
  
  在java.util.List、java.util.Set、java.util.Map新增加了一個靜態方法copyOf,這些方法按照其叠代順序返回一個不可修改的列表、集合或映射包含了給定的元素的集合。但是如果將返回後的集合繼續修改,那麽會保異常
  
  @Test
  
  public void test2(){
  
  var list = new ArrayList<>();
  
  list.add("first");
  
  list.add("second");
  
  list.add("third");
  
  var result = List.copyOf(list);
  
  System.out.println(result.toString());
  
  }
  
  結果:
  
  [first, second, third]
  
  3、ByteArrayOutputStream:toString(Charset)
  
  Java.io.ByteArrayOutputStream,重載toString()方法,通過使用指定的字符集編碼字節,將緩沖區的內容轉換為字符串,以前是默認沒有參數,現在加了一個編碼的字符方法。
  
  public static void main(String[] args) throws Exception {
  
  String str = "我喜歡java";
  
  ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes("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());
  
  }
  
  這個是我們正常的格式,但是當我們修改代碼,str.getBytes("gbk")的時候,創建的txt為亂碼,那麽我們使用toString()的新增方法,替換gbk
  
  4、PrintStream、PrintWriter
  
  Java.io.PrintStream,Java.io.PrintWriter,這兩個類都有三個新的構造方法,他們需要而外的參數charset
  
  @Test
  
  public void test3() throws FileNotFoundException, UnsupportedEncodingException {
  
  String str = "我也特別喜歡java";
  
  var pri = new PrintWriter(www.fengshen157.com/ "/Users/tentsuuhou/Desktop/11.txt");
  
  pri.println(str);
  
  pri.flush();
  
  pri.close();
  
  }
  
  我這個路徑是mac電腦的,如果你是windows,可以寫“d:/aa.txt“ 不過都需要提前創建好txt文件夾
  
  結果為:
  
  但是我們這個txt默認的都是utf-8格式的,如果突然改成gbk的話,格式會不匹配出現亂碼,畢竟txt文件格式要和輸出的格式一致才可以,這是我們可以使用一下
  
  var pri = new PrintWriter("/Users/tentsuuhou/Desktop/11.txt","gbk");
  
  我們直接在後面添加一個格式參數就可以直接解決啦
  
  5、Reader:transferTo方法
  
  Java.io.Reader:transferTo從這個Reader中讀取所有字符串,並按照所讀取的順序將字符串寫入給指定的Writer
  
  @Test
  
  public void test4() throws IOException {
  
  var reader = new BufferedReader(new www.michenggw.com InputStreamReader(new FileInputStream("/Users/tentsuuhou/Desktop/11.txt"), "utf-8"));
  
  var p = new PrintWriter(new File("/Users/tentsuuhou/Desktop/12.txt"));
  
  reader.transferTo(p);
  
  p.flush();
  
  p.close();
  
  reader.close();
  
  }
  
  結果:12.txt文件將11.txt文件拷貝過來了,註意編碼格式也要一致才可以。用這個方法方便了許多。
  
  6、Formatter、Scanner
  
  java.util.Formatter、java.util.Scanner新增三個構造方法,除了其他參數之外,都需要一個charset參數
  
  將11.txt內容替換成這樣
  
  @Test
  
  public void test5() throws FileNotFoundException {
  
  var scan = new Scanner(new FileInputStream(new File(www.dasheng178.com"/Users/tentsuuhou/Desktop/11.txt")),"utf-8");
  
  scan.useDelimiter(" |,");
  
  while(scan.hasNext()) {
  
  System.out.println(scan.next());
  
  }
  
  }
  
  scan.useDelimiter(" |,"); 這是空格或者‘,’ 都要分割,如下結果為:
  
  7、垃圾收集器的優化
  
  7.1 JDK9垃圾收集器
  
  新生代:ParNew收集器;老年代:Parallel Old收集器 Stop The World
  
  7.2 JDK10垃圾收集器
  
  JDK10:G1(Garbage-Frist)全收集器

java10 新特性 詳解