還能再漲23%!AI寵兒NVIDIA成大摩明年首選AMD FSR 4.0將與RX 9070 XT顯卡同步登場羅永浩細(xì)紅線最新進(jìn)展,暫別AR,迎來AI Jarvis構(gòu)建堅(jiān)實(shí)數(shù)據(jù)地基,南京打造可信數(shù)據(jù)空間引領(lǐng)數(shù)字城市建設(shè)下單前先比價(jià)不花冤枉錢 同款圖書京東價(jià)低于抖音6折日媒感慨中國電動(dòng)汽車/智駕遙遙領(lǐng)先:本田、日產(chǎn)、三菱合并也沒戲消委會(huì)吹風(fēng)機(jī)品質(zhì)檢測結(jié)果揭曉 徠芬獨(dú)占鰲頭 共話新質(zhì)營銷力,2024梅花數(shù)據(jù)峰會(huì)圓滿落幕索尼影像專業(yè)服務(wù) PRO Support 升級,成為會(huì)員至少需注冊 2 臺(tái) α 全畫幅相機(jī)、3 支 G 大師鏡頭消息稱vivo加碼電池軍備競賽:6500mAh 旗艦機(jī)+7500mAh中端機(jī)寶馬M8雙門轎跑車明年年初將停產(chǎn),后續(xù)無2026款車型比亞迪:2025 款漢家族車型城市領(lǐng)航智駕功能開啟內(nèi)測雷神預(yù)告2025年首次出席CES 將發(fā)布三款不同技術(shù)原理智能眼鏡realme真我全球首發(fā)聯(lián)發(fā)科天璣 8400 耐玩戰(zhàn)神共創(chuàng)計(jì)劃iQOO Z9 Turbo長續(xù)航版手機(jī)被曝電池加大到6400mAh,搭驍龍 8s Gen 3處理器普及放緩 銷量大跌:曝保時(shí)捷將重新評估電動(dòng)汽車計(jì)劃來京東參與榮耀Magic7 RSR 保時(shí)捷設(shè)計(jì)預(yù)售 享365天只換不修國補(bǔ)期間電視迎來換機(jī)潮,最暢銷MiniLED品牌花落誰家?美團(tuán)旗下微信社群團(tuán)購業(yè)務(wù)“團(tuán)買買”宣布年底停運(yùn)消息稱微軟正與第三方廠商洽談,試圖合作推出Xbox游戲掌機(jī)設(shè)備
  • 首頁 > 數(shù)據(jù)存儲(chǔ)頻道 > 數(shù)據(jù)庫頻道 > 編程開發(fā)

    從 Java 11 遷移到 Java 17 值得嗎?

    2023年08月09日 17:07:43   來源:作者丨Sergei Dzeboev

      作者丨Sergei Dzeboev

      編譯丨諾亞

      Java17給Java帶來了一些變化,但也使許多開發(fā)人員重新考慮他們遷移到其他JVM語言的愿望。最明顯的變化是在使Java代碼現(xiàn)代化和添加新的語言結(jié)構(gòu)以簡化它的方向上進(jìn)行的。當(dāng)然,這個(gè)問題并非沒有對Java核心的改變,這使得Java更加高效。

      1、文本塊

      文本塊功能終于出現(xiàn)在Java中。我確信這是Java程序員等待已久的變化之一,F(xiàn)在你可以忘記難以閱讀的長復(fù)合行。文本塊允許你以最方便的方式編寫多行文本。在這樣的塊中,你可以按照自己希望的方式撰寫文本,并且仍然可以使用轉(zhuǎn)義序列進(jìn)行更精確的格式設(shè)置。

      Java11. 字符串轉(zhuǎn)義序列:

      復(fù)制

      public String poem = " " +

      "Twinkle, Twinkle, Little Star" +

      " " +

      " Twinkle, twinkle, little star," +

      " How I wonder what you are!" +

      " Up above the world so high," +

      " Like a diamond in the sky." +

      " " +

      " Twinkle, twinkle, little star," +

      " How I wonder what you are!";

      Java17.文本塊:

      復(fù)制

      public String poem = """

      Twinkle, Twinkle, Little Star

      Twinkle, twinkle, little star,

      How I wonder what you are!

      Up above the world so high,

      Like a diamond in the sky.

      Twinkle, twinkle, little star,

      How I wonder what you are!

      """;

      2、Record

      另一個(gè)慢慢使Java語言更有用的更新是record。以前,要?jiǎng)?chuàng)建一個(gè)類,我們需要描述該類,指定其字段,并添加必要的方法,例如equals、hashcode、getter和setters。自從record出現(xiàn)以來,所有這些現(xiàn)在都變得不必要了。

      record允許你通過僅指定必填字段來創(chuàng)建數(shù)據(jù)安全類;將自動(dòng)創(chuàng)建所有其他方法。但是,值得記住的是,record充當(dāng)數(shù)據(jù)類,創(chuàng)建是為了存儲(chǔ)數(shù)據(jù),而不是執(zhí)行各種操作。record是線程安全的,因?yàn)樗衦ecord字段都是最終的。最后要知道的重要一點(diǎn)是,用于獲取字段值的生成方法不會(huì)像經(jīng)典Java Bean 中那樣包含“get”。

      Java11.數(shù)據(jù)類:

      復(fù)制

      public class DataClass {

      public DataClass (Integer id, String name) {

      this.id = id;

      this.name = name;

      }

      private final Integer id;

      private final String name;

      public Integer getId() {

      return id;

      }

      public String getName() {

      return name;

      }

      @Override

      public boolean equals(Object o) {

      }

      @Override

      public int hashCode() {

      }

      }

      Java17.Record:

      復(fù)制

      public record DataClass(Integer id, String name) {

      }

      區(qū)別很明顯:在執(zhí)行相同功能的同時(shí),創(chuàng)建Record所需的代碼行要少得多。

      3、新的switch表達(dá)式

      更改列表還包括切換表達(dá)式。這些更改不僅影響了Switch表達(dá)式的語法(使其編寫更加簡潔),還影響了功能。Switch表達(dá)式現(xiàn)在返回迭代的結(jié)果,使編寫代碼變得更加容易,并使其更加簡潔。新的開關(guān)表達(dá)式不再需要每個(gè)case后面都加一個(gè)break

      Java11.switch表達(dá)式:

      復(fù)制

      public String getSeasonDescription(Season season) {

      String seasonDescription;

      switch (season) {

      case SPRING:

      seasonDescription = "Flowers are blooming!";

      break;

      case SUMMER:

      seasonDescription = "It's hot outside!";

      break;

      case AUTUMN:

      seasonDescription = "Leaves are falling!";

      break;

      case WINTER:

      seasonDescription = "Snow is coming!";

      break;

      default:

      throw new IllegalStateException("Invalid season: " + season);

      }

      return seasonDescription;

      }

      Java 17. 增強(qiáng)的 Switch 表達(dá)式:

      復(fù)制

      public String getSeasonDescription(Season season) {

      return switch (season) {

      case SPRING -> "Flowers are blooming!";

      case SUMMER -> "It's hot outside!";

      case AUTUMN -> "Leaves are falling!";

      case WINTER -> "Snow is coming!";

      };

      }

      4、instanceof模式匹配

      另一項(xiàng)設(shè)計(jì)改進(jìn)也影響了操作員,F(xiàn)在,更安全,更簡潔。通過此更改,不再需要首先檢查給定對象是否是某個(gè)類的實(shí)例,然后執(zhí)行強(qiáng)制轉(zhuǎn)換;現(xiàn)在可以在一行中完成此操作。如前所述,這不僅僅是語法糖,而是一個(gè)更優(yōu)化的運(yùn)算符。

      Java 11. 經(jīng)典的 intanceof

      復(fù)制

      public void findInstance(Object o) {

      if (o instanceof String) {

      String s = (String) o;

      System.out.printf("Object is a string %s", s);

      } else if (o instanceof Number) {

      Number n = (Number) o;

      System.out.printf("Object is a number %n", n);

      }

      }

      Java 17. 更新的 intanceof

      復(fù)制

      public void findInstance(Object o) {

      if (o instanceof String s) {

      System.out.printf("Object is a string %s", s);

      } else if (o instanceof Number n) {

      System.out.printf("Object is a number %n", n);

      }

      }

      5、Sealed Classes密封類

      Java 17也考慮了安全性,并朝著這個(gè)方向邁出了重要的一步。這個(gè)想法是限制類或接口的繼承,同時(shí)保持其公開。結(jié)果,新的類類型,密封類,被添加到Java中。密封類的語法允許你指定可以使用其功能的后代。反過來,繼承者還可以允許或拒絕繼承,或者指定可以沿鏈繼承的類。此功能使你可以更靈活地創(chuàng)建項(xiàng)目,并方便地調(diào)整代碼的API。

      Java 17. 密封類:

      復(fù)制

      public sealed class SealedClass permits AnotherSealedClass, AnotherNonSealedClass, AnotherFinalClass {

      }

      Java 17. 非密封繼承人:

      復(fù)制

      public non-sealed class AnotherNonSealedClass extends SealedClass {

      }

      Java17.最終繼承人:

      復(fù)制

      public final class AnotherFinalClass extends SealedClass {

      }

      Java17.密封繼承人:

      復(fù)制

      public sealed class AnotherSealedClass extends SealedClass permits AnotherNonSealedClassTwo {

      }

      Javai17.非密封繼承人二級:

      復(fù)制

      public non-sealed class AnotherNonSealedClassTwo extends AnotherSealedClass {

      }

      6、NullPointerExceptions

      最后,Java 17 中一個(gè)非常有用的更新是改進(jìn)的NullPointerException!最后,在堆棧跟蹤日志中,你可以看到哪個(gè)特定字段導(dǎo)致了NullPointerException。僅此功能就應(yīng)該鼓勵(lì)你切換到Java 17。你不再需要長時(shí)間在代碼中四處尋找發(fā)生異常的險(xiǎn)惡地方;現(xiàn)在Java將為你完成所有工作。

      Java11.NPE:

      復(fù)制

      public static void main(String... args) {

      String s = null;

      System.out.println(s.toLowerCase());

      }

      復(fù)制

      Exception in thread "main" java.lang.NullPointerException

      at Main.main(Main.java:4)

      Java17.改進(jìn)的NPE:

      復(fù)制

      public static void main(String... args){

      String s = null;

      System.out.println(s.toLowerCase());

      }

      復(fù)制

      Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toLowerCase()" because "s" is null

      at edu.javamodules/edu.javaversions.eleventoseventeen.NpeExample.main(NpeExample.java:7)

      7、其他創(chuàng)新

      當(dāng)然,這并不是Java17中所做的更改的全部列表,但是討論的創(chuàng)新是最引人注目的。與往常一樣,Java開發(fā)人員在改進(jìn)JVM方面做得非常出色,使其更加高效。

      8、小結(jié)

      Java17中所做的所有改進(jìn)都傳達(dá)了一個(gè)信息:是時(shí)候切換到這個(gè)版本了。過渡承諾語法更簡潔,性能得到提高。你的項(xiàng)目將獲得安全性、靈活性和更好的錯(cuò)誤消息。如果你已經(jīng)遷移到Java11,那么遷移到Java17 會(huì)很順利。Java的競爭優(yōu)勢在這里大放異彩,因?yàn)橄蚝蠹嫒菪栽试S你切換到Java17而無需更改任何代碼,并利用所有更新的功能。Java17是Java11以來又一個(gè)LTS(長期支持)版本,可確保你在較長時(shí)間內(nèi)收到所有必要的安全更新。

      文章內(nèi)容僅供閱讀,不構(gòu)成投資建議,請謹(jǐn)慎對待。投資者據(jù)此操作,風(fēng)險(xiǎn)自擔(dān)。

    即時(shí)

    新聞

    明火炊具市場:三季度健康屬性貫穿全類目

    奧維云網(wǎng)(AVC)推總數(shù)據(jù)顯示,2024年1-9月明火炊具線上零售額94.2億元,同比增加3.1%,其中抖音渠道表現(xiàn)優(yōu)異,同比有14%的漲幅,傳統(tǒng)電商略有下滑,同比降低2.3%。

    企業(yè)IT

    重慶創(chuàng)新公積金應(yīng)用,“區(qū)塊鏈+政務(wù)服務(wù)”顯成效

    “以前都要去窗口辦,一套流程下來都要半個(gè)月了,現(xiàn)在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關(guān)材料,僅幾秒鐘,重慶市民曾某的賬戶就打進(jìn)了21600元。

    3C消費(fèi)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,高能實(shí)力,創(chuàng)

    華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,憑借其優(yōu)秀的性能配置和精準(zhǔn)的色彩呈現(xiàn)能力,為您的創(chuàng)作工作帶來實(shí)質(zhì)性的幫助,雙十一期間低至2799元,性價(jià)比很高,簡直是創(chuàng)作者們的首選。