1. 程式人生 > >記錄Java7語言新特性

記錄Java7語言新特性

雖說做JAVA開發也有幾年了,工作的原因所開發的系統都是在java6下開發的,最近看了下kotlin的語法,語法裡有些確實讓我眼前一亮的東西,在之前用java6開發中處理起來麻煩的在kotlin裡有較好的解決,比如說空安全,方法、屬性的覆蓋,Lambda 表示式語法,if是表示式而在java裡是語句,表示式就能帶來表示式的好處,不勝列舉。因此讓我對java6之後的版本新特性有了探一探的想法。

記錄一下JavaSE7語言新特性:

官網參考地址:https://docs.oracle.com/javase/7/docs/technotes/guides/language/enhancements.html

整數型別的二進位制表式

在JavaSE7的整數型別(byte,short,int和long),也可以使用二進位制數字系統表示。要指定二進位制字面值,數值新增字首0b或0B。16進位制的數值表示增加0x

例如:

// 一個8位的'byte'型別值:
byte aByte = (byte)0b00100001;

// 一個16位的'short'型別值:
short aShort = (short)0b1010000101000101;

// 一個32位的'int'型別值:
int anInt1 = 0b10100001010001011010000101000101;

// 一個64位的'long'型別值. 長整型以L結尾:
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

數字字面值中加下劃線

你可以使用下劃線(_)使數字常量更易讀,下面的示例顯示有效的在數字字面值中加下劃線:

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 	3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

下面這些不能在數字字面值的下列地方放置下劃線的點都好理解:

  1. 在數字的開頭或結尾
  2. 與浮點數字中的小數點相鄰
  3. F或L字尾之前
  4. 0x7fff中0_x7fff這樣加是不可以的

在switch語句的表示式中使用String類

例如:

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
     String typeOfDay;
     switch (dayOfWeekArg) {
         case "Monday":
             typeOfDay = "Start of work week";
             break;
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
             typeOfDay = "Midweek";
             break;
         case "Friday":
             typeOfDay = "End of work week";
             break;
         case "Saturday":
         case "Sunday":
             typeOfDay = "Weekend";
             break;
         default:
             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
     }
     return typeOfDay;
}

推斷泛型型別引數

只要編譯器可以從上下文中推斷出型別引數,你就可以用一對空著的尖括號<>來代替泛型引數。只有構造器的引數化型別在上下文中被顯著的聲明瞭,你才可以使用型別推斷,否則不行。

例如:

Map<String, List<String>> myMap = new HashMap<>();
Map<String, List<String>> myMap = new HashMap();// 編譯警告

try-with-resources語句

try-with-resources 是一個定義了一個或多個資源的try 宣告.這個資源是程式處理完它之後需要關閉的物件。try-with-resources 確保每一個資源在處理完成後都會被關閉。 
任何實現了java.lang.AutoCloseable介面和java.io.Closeable介面的物件可以使用try-with-resources的資源。
java.io.InputStream, OutputStream, Reader, Writer, java.sql.Connection, Statement, and ResultSet這些類實現了AutoCloseable介面能夠被用在try-with-resources語句中.

例如:

public static void writeToFileZipFileContents(String zipFileName, String outputFileName)
    throws java.io.IOException {

    java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII");
    java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName);

    // Open zip file and create output file with try-with-resources statement

    try (
      java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
      java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
    ) {

      // Enumerate each entry

      for (java.util.Enumeration entries = zf.entries(); entries.hasMoreElements();) {

        // Get the entry name and write it to the output file

        String newLine = System.getProperty("line.separator");
        String zipEntryName = ((java.util.zip.ZipEntry)entries.nextElement()).getName() + newLine;
        writer.write(zipEntryName, 0, zipEntryName.length());
      }
    }
}

JAVA7之前關閉資源是在finally中,目的就是看開發有沒有對申請使用的資源要關閉的意識。

捕獲多個異常及增加型別檢查後的重拋

在JavaSE7裡,一個catch可以捕獲多個異常,每個異常之間用 | 隔開。

......
catch (IOException|SQLException ex) {
    logger.log(ex);
throw ex;
}
JavaSE7可以更準確的分析出你丟擲的異常型別,可以在throws上丟擲更加具體的異常型別,這個在JavaSE7是不可以的。
public void rethrowException(String exceptionName) throws FirstException, SecondException {
	try {
		// ...
	} catch (Exception e) {
		throw e;
	}
}

相關推薦

記錄Java7語言特性

雖說做JAVA開發也有幾年了,工作的原因所開發的系統都是在java6下開發的,最近看了下kotlin的語法,語法裡有些確實讓我眼前一亮的東西,在之前用java6開發中處理起來麻煩的在kotlin裡有較好的解決,比如說空安全,方法、屬性的覆蓋,Lambda 表示式語法,if是表

Java8特性-語言特性

tro 區分 返回 clas pub mark 轉換 底層 表示 一、 Lambda表達式和函數式接口 它允許我們將函數當成參數傳遞給某個方法,或者把代碼本身當作數據處理:函數式開發者非常熟悉這些概念。很多JVM平臺上的語言(Groovy、Scala等)從誕生之日就支

3.1.C++11語言特性

3.1.1微小但重要的語法提升 nullptr和std::nullptr_t : nullptr取代0或NULL,表示一個pointer(指標)只想指向的no value。std::nullptr_t定義在<cstddef>中,為基礎型別。   3.1.2以au

C++0x語言特性一覽

引入約束的最初動因在於改進編譯錯誤資訊的質量。如果程式設計師試圖使用一種不能提供某個模板所需介面的型別,那麼編譯器將產生錯誤資訊。然而,這些錯誤資訊通常難以理解,尤其對於新手而言。首先,錯誤資訊中的模板引數通常被完整拼寫出來,這將導致異常龐大的錯誤資訊。在某些編譯器上,簡單的錯誤會產生好幾K的錯誤資訊。其次,

java7語法特性

      1. switch中增加對String型別的支援。 public void getType(String type){ switch(type){ case "1": System.out.println("type1"); brea

Java 5/Java 6/Java7/Java 8特性收集

lan 鏈接 develop new strong tar chrom eve ref 前言: Java 8對應的JDK版本為JDK8,而官網下載回來安裝的時候,文件夾上寫的是JDK1.8,同一個意思。(而這個版本命名也是有規律的,以此類推) 一、Java 5 1、h

Spark 2.0視頻|快學Spark 2.0(特性、含真實項目、純Scala語言開發、CDH5.7)

spark快學Spark 2.0(新特性、含真實項目、純Scala語言開發、CDH5.7)分享網盤下載——https://pan.baidu.com/s/1c2F9zO0 密碼: pzx9Spark進入2.0時代,引入了很多優秀特性,性能上有較大提升,API更易用。在“編程統一”方面非常驚艷,實現了離線計算和

java7和java8特性

iot use 允許 臨時 default line array 關鍵字 font 以下來至網址: http://blog.csdn.net/samjustin1/article/details/52268004 Java7 新特性 1.switch中可以使用字符串了

Java7 特性: try-with-resources

Try-with-resources是java7中一個新的異常處理機制,它能夠很容易地關閉在try-catch語句塊中使用的資源。 利用Try-Catch-Finally管理資源(舊的程式碼風格)在java7以前,程式中使用的資源需要被明確地關閉,這個體驗有點繁瑣。 下面的方法讀取檔案,然後用System

Java7 特性之自動關閉資源

        話不多說,直接上程式碼: public static class TimerContext implements AutoCloseable { final Timer.Context ctx; TimerContext

Visual C++2010的c++語言四大特性

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

java8特性 lambda Stream map(函數語言程式設計)

1.介面的預設方法 Java 8允許我們給介面新增一個非抽象的方法實現,只需要使用 default關鍵字即可,這個特徵又叫做擴充套件方法 //Formula表示一個設計 計算公式 的介面 public interface Formula { //計算 double calculate

【轉載】java7的異常處理特性

原文地址:https://my.oschina.net/fhd/blog/324484 前輩們非常給力! addSuppressed()方法 開發人員對異常處理的try-catch-finally語句塊都比較熟悉。如果在try語句塊中丟擲了異常,在控制權轉移到呼叫棧上一層程式碼之前,

Java8特性(函數語言程式設計)

1.介面的預設方法 Java 8允許我們給介面新增一個非抽象的方法實現,只需要使用 default關鍵字即可,這個特徵又叫做擴充套件方法 //Formula表示一個設計 計算公式 的介面 public interface Formula { //計算

Android版本特性記錄

1.Gradle 3.0起引入依賴的名稱改變   例如:implementation,api代替compile 2.Android4.4版本(SDK19)相簿圖片提供的是封裝後的Uri 3.Android7.0(SDK24)直接提供真實路徑的Uri不安全,應該用FilePr

JAVA8特性-Stream API,函數語言程式設計

首先先拿github上的兩篇文章作為關於Stream API的專業性技術指導 http://www.cnblogs.com/CarpenterLee/p/6545321.html   Java Stream API入門篇 http://www.cnblogs.com/Ca

java5、java6、java7、java8、java9特性

1. 介紹 JAVA作為使用的主力語言,掌握下其歷史發展也是有必要的。看看從JAVA5開始到現在的JAVA9有哪些變化。藉此機會,也可以看看哪些特性我們是已經用到的,哪些是還沒有用到的。 我們在IDEA裡面也可以看到language level裡面的資訊,這裡也大致寫了下各個版本JDK的新特

java8特性記錄

一、limit()  List<Integer> list = Arrays.asList(1,2,3,4,5,6,6,7,7,8,8,9,9); List<Integer> resultLimit = list.stream().limit(5).colle

Java7特性——I/O

NIO.2是一組新的類和方法,主要存在於java.nio包內。 主要優點: 它完全取代了java.io.File與檔案系統的互動。 它提供了新的非同步處理類,讓你無需手動配置執行緒池和其他底層併發控制,便可在後臺執行緒中執行檔案和網路I/O操作。 它引入了新的Netwo

java7或java8特性

技術交流qq群: 659201069 1、jdk7,數值型別字面值可以用‘多個‘—’分隔增加可讀性 int a = 123_456; double b = 123_4