更新時間:2022-05-10 11:29:54 來源:動力節點 瀏覽1379次
Java8新特性有哪些?動力節點小編來告訴大家。
這實際上意味著什么?
誰從未配置過他們的“ PermSize ”或“ MaxPermSize ”JVM 內存?
這通常是在收到那些丑陋的“ java.lang.OutOfMemoryError: PermGen error ”錯誤后完成的。
這現在已被稱為 Metaspace 的東西所取代。Metaspace 將根據我們在運行時對內存的需求重新調整大小。如果需要,我們仍然可以通過設置“ MaxMetaspaceSize ”參數來調整 Metaspace 的數量。
我們習慣于使用“ Arrays.sort ”對數組進行排序。這使用了 Merge Sort 或 Tim Sort 進行排序算法。它們的問題是它們是按順序執行的,因此我們無法獲得多線程為我們提供的所有好處。為此,他們實現了“ Arrays.parallelSort ”。
那我們什么時候應該使用它呢?
我們不會立即獲得使用我們的 2 核或更多核處理器的直接好處。
陣列應具有一定的大小,以查看性能方面的任何提升。一些比較表明,您將需要陣列中大約 200 萬個元素才能開始看到改進。
查看這篇關于并行數組排序的帖子,了解有關基準測試和算法工作原理的更多詳細信息。
不久前,我不得不在一個項目中使用 Base64 編碼和解碼,才能傳輸 JSON 格式的文件。
我最終使用了第 3 方 API(apache Base64 庫)來執行此操作。
此功能意味著我們不必四處尋找其他實現,使事情變得更容易一些。
一些基本的解碼和編碼示例
編碼
String base64 = Base64.getEncoder().encodeToString("要編碼的字符串".getBytes("utf-8"));
解碼
byte[] asBytes = Base64.getDecoder().decode("你的 base 64 字符串");
在 Java 中處理日期和時間一直很痛苦。我們從 Date 類中現在最不推薦使用的方法開始,記住星期一是表示為 0 還是 1,添加 Calendar 類來處理 timeZones 等等……
這使我們使用 Joda Time 或其他一些 API 來簡化事情。這將不再是必要的。
新的 API 與 Joda Time 非常相似,因此如果您已經熟悉它,您應該可以即時了解內容。如果您從未使用過 Joda Time,請不要擔心,它使用起來非常簡單。
一些日期和時間示例
javax.time.Clock
時鐘.systemUTC(); //您系統的當前時間(UTC)。
Clock.millis();//從 1970 年 1 月 1 日開始的毫秒數。
javax.tme.ZoneId
ZoneId zone = ZoneId.of(“Europe/London”);//來自時區的zoneId。
Clock clock = Clock.system(zone);//設置一個時鐘的區域。
javax.time.LocalDate
LocalDate date = LocalDate.now();//當前日期
String day = date.getDayOfMonth();//月份中的哪一天
String month = date.getMonthValue();//月份
String year = date.getYear();//年份
函數式接口是精確定義一個抽象方法的接口。例如,我們有定義運行抽象方法的“ java.lang.Runnable ”:
公共抽象無效運行();
我們仍然可以添加任意數量的默認方法(非抽象)。
在定義新的功能接口時,我們必須定義新的注解“ @FunctionalInterface ”。這將允許我們阻止功能接口的錯誤使用,因為如果與新注釋一起使用不當,它將無法編譯。
Lambda 表達式可能是 Java 8 最大和最受期待的特性。它們基本上用于將代碼而不是對象傳遞給方法或處理一組數據以執行算法。
這將產生更簡單、更易讀的代碼。讓我們看一下圍繞這個的一些概念。
內部或外部迭代
Java 中的常規方法是在外部迭代集合,所以我們會有這樣的東西:
對于(字符串值:myCollection){
System.out.println(值);
}
我們在這里所做的是迭代列表并一一拉取對象。如果我們可以從一開始就說我們想從集合中提取什么,那會更自然。這正是我們如何使用 lambdas 的概念:
myCollection.forEach((String value) -> System.out.println(value));
傳遞行為
這對我來說是我們真正可以在 lambda 表達式中發現潛力的地方。我們可以將行為傳遞給函數,使基本功能更加通用,并大大提高項目的可用性。
例如,如果我們想創建一個打印 List 的所有元素的方法,我們將執行以下操作:
公共無效 printAllStrings (列表列表字符串){
for(字符串字符串對象:listString){
System.out.println(stringObject);
}
}
如果我們現在只想打印長度超過 4 個字符的字符串:
公共無效 printLongerThan4Strings (列表列表字符串){
for(字符串字符串對象:listString){
if(stringObject.length() > 4) {
System.out.println(stringObject);
}
}
}
在 Java 8 中,我們可以使這個過程更通用并重用我們的更多代碼。我們可以傳遞一個謂詞來進行過濾。它看起來像這樣:
公共無效 printAllStrings (列表列表字符串,謂詞p) {
for(字符串字符串對象:listString){
如果(p.test(stringObject)){
System.out.println(stringObject);
}
}
}
現在我們所要做的就是在調用中傳遞謂詞:
printAllStrings(listString, s -> true);
printAllStrings(listString, s -> s.length() > 4);
清潔、快速且可重復使用。
以上就是關于“6個重要的Java8新特性”的介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java8新特性,里面有更豐富的知識等著大家去學習, 希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習