Blogger 站內搜尋

2025年1月23日 星期四

Java 7 to 17 Edwards-Curve Digital Signature Algorithm(EdDSA)

一、前言

一、前言

返回目錄

愛德華曲線數位簽章演算法(EdDSA)是一種現代化的數位簽章方案,相較於傳統的 RSA 或 DSA 演算法,它在安全性、效能和易用性方面都具有優勢。EdDSA 基於扭曲愛德華曲線 (Twisted Edwards Curves) 進行運算,提供了更強的安全性保證,並且在實作上能有效避免時間側通道攻擊。EdDSA 在區塊鏈、程式碼簽章、安全通訊協定等領域都有廣泛的應用。Java 作為一個廣泛使用的程式語言,對 EdDSA 的支援也隨著版本迭代而不斷演進。本文旨在整理 Java 7 至 Java 17 中關於 EdDSA 的新特性,並分析其在不同版本的應用、架構、工具與範例。

目錄

Java 7 to 17 TextBlocks

一、前言

一、前言

返回目錄

從 Java 7 到 Java 17,Java 語言不斷演進,旨在提升開發效率、程式碼可讀性與可維護性。其中,在 Java 13 作為預覽功能引入,並在 Java 15 正式成為標準功能的「文字塊 (Text Blocks)」是相當重要的語法更新。傳統上,處理多行字串在 Java 中顯得繁瑣且容易出錯,例如需要手動處理換行符號、跳脫字元等。文字塊的出現,旨在解決這個痛點,讓我們可以更直觀、更易讀的方式書寫多行字串,這對於處理 JSON、XML、SQL 等格式的文字資料尤為重要,在程式碼片段、大型文字資料等場景也有廣泛應用。本文將詳細整理 Java 7 到 17 之間,關於文字塊的特性,分析其優勢,並提供範例。

目錄

Java 7 to 17 switch

一、前言

一、前言

返回目錄

switch 語句在程式設計中用於多路條件判斷,自 Java 誕生以來一直是一個重要的控制流程結構。然而,在 Java 7 及之前的版本中, switch 語句的功能和語法相對比較受限,導致程式碼可能顯得冗長且不易讀。隨著 Java 的不斷發展,從 Java 7 開始到 Java 17, switch 語句經歷了多次的改進和擴展,最終演變為更強大、更具表達力的 switch 表達式。本文將詳細分析從 Java 7 到 Java 17 switch 表達式的演進過程,並提供相關的範例和說明。

目錄

2025年1月22日 星期三

Java 7 to 17 Socket

一、前言

一、前言

返回目錄

Socket 程式設計是網路應用的基礎,Java 作為廣泛使用的程式語言,其 Socket API 的發展也備受關注。從 Java 7 到 Java 17,雖然 Socket API 的核心功能沒有發生根本性的改變,但仍然有一些重要的改進和新特性,旨在提升開發效率、性能以及安全性。本文將整理並分析 Java 7 至 17 中關於 Socket 相關的新特性,並提供相關範例,以幫助開發者更好地理解和應用。

目錄

Java 7 to 17 Nest-Based Access Control

一、前言

一、前言

返回目錄

Java 從 7 版本到 17 版本,在語言和虛擬機層面不斷演進,其中一個重要的改進是針對巢狀類別 (nested classes) 的存取控制。在 Java 11 之前,巢狀類別的存取控制在某些情況下略顯不足,導致編譯器需要產生「橋接方法」(bridge methods)來允許內部類別存取外部類別的私有成員。Java 11 引入了「巢狀式存取控制」 (Nest-Based Access Control),通過在類別檔案中引入 NestHost NestMembers 屬性,提升了巢狀類別的存取效率和可維護性。這種改進簡化了虛擬機的行為,避免了編譯器合成橋接方法,使得程式碼更加清晰且執行效率更高。本文將深入探討 Java 7 至 17 關於巢狀存取控制的變化,分析其架構,工具與範例,並做出總結。

目錄

Java 7 to 17 Local Variable Type Inference(var)

一、前言

一、前言

返回目錄

Java 語言一直以來以其強型別著稱,這代表著在編譯時必須明確指定變數的類型。在 Java 10 之前,我們需要冗長地重複宣告變數類型,尤其是在複雜的泛型程式碼中。例如:

這樣的宣告不僅重複,也降低了程式碼的可讀性。為了簡化程式碼並提高開發效率,Java 10 引入了局部變數類型推斷 ( var ),這個特性允許編譯器根據變數的初始化值來自動推斷變數的類型,大大簡化了程式碼的撰寫。 值得注意的是, var 是一個編譯時的特性,編譯器會在編譯階段推斷出變數的具體類型,而不是在程式碼運行時。 本篇文章將整理 Java 7 至 17 中 var 類型推斷相關的新特性,並分析其使用場景與注意事項。

目錄

2025年1月18日 星期六

JAVA 7 to 17 LaunchSingleFileSourceCodePrograms

一、前言

一、前言

JEP 330(Launch Single-File Source-Code Programs)是 Java 11 引入的一個重要特性,它允許開發者直接使用 java 指令執行單一檔案的 Java 原始碼( .java 檔案),而無需事先編譯成 .class 檔案。這個特性旨在簡化小型程式、腳本和學習範例的執行過程,但同時也容易產生一些誤解。本文件將深入解析 JEP 330 的運作機制、限制、用途,並澄清常見的誤解,讓使用者能正確且有效地使用這個功能。

JAVA 7 to 17 Collector

一、前言

一、前言

返回目錄

之前淺談Stream的collect()操作,就與Collector相關,這也是與Stream同時新創的介面,官方文件一開頭又提到 mutable reduction operation

A mutable reduction operation that accumulates input elements into a mutable result container, optionally transforming the accumulated result into a final representation after all input elements have been processed. Reduction operations can be performed either sequentially or in parallel.

簡單的說,擁有組合函數(combining function)、資料結構(data structure)或某些情況下有預設值、初始值,進行一系列組合拳,可以依照順序出拳,也可以同時出拳的華麗操作。

目錄

JAVA 7 to 17 ReactiveStreams

一、前言

一、前言

返回目錄

Reactive Streams(反應式流)是一種用於處理非同步資料流的編程範式,旨在解決傳統同步處理在處理大量資料或高並發情境下的瓶頸。雖然 Java 平台本身並沒有直接將 Reactive Streams 作為核心 API 引入,但在 Java 生態中,許多框架和函式庫已經廣泛採用了 Reactive Streams 的概念和規範。Java 9 引入了 java.util.concurrent.Flow API,才真正將反應式流的基礎概念納入 Java 標準庫。

本文將回顧 Java 7 至 17 期間,Reactive Streams 在 Java 世界的發展與演變,並探討其架構、相關工具以及程式碼範例。需要注意的是,Java 7 和 8 主要透過第三方函式庫(如 RxJava 和 Project Reactor)來利用 Reactive Streams,而 Java 9 才引入標準 API。

目錄

JAVA 7 to 17 Http2

一、前言

一、前言

返回目錄

HTTP/2 作為 HTTP/1.1 的繼任者,在效能、效率以及用戶體驗方面帶來了顯著的提升。它引入了多路複用、頭部壓縮、伺服器推送等關鍵特性,大幅減少了網頁載入時間並優化了資源利用率。HTTP/2 並不僅限於傳輸文本數據,它也能高效地傳輸二進制資料,例如圖像、音頻和影片等。然而,Java 在對 HTTP/2 的支援上並非一蹴而就,而是在不同版本中逐步完善。 值得注意的是,Java 原生 API (例如 java.net.http 包) 主要提供了 HTTP/2 客戶端 (Client) 的支援,並沒有提供直接構建 HTTP/2 伺服器 (Server) 的方式。 因此,在 Java 中建立 HTTP/2 伺服器通常需要依賴第三方函式庫,例如 Netty。本文將深入探討 Java 7 至 17 各版本在 HTTP/2 方面的發展,分析其關鍵特性、架構、相關工具以及具體範例,幫助讀者理解 Java 如何逐步擁抱並應用 HTTP/2,以及如何透過第三方函式庫建立 HTTP/2 伺服器。

目錄

JAVA 7 to 17 Shell

一、前言

一、前言

Java Shell (JShell),自 Java 9 開始引入,是一個互動式的 Java REPL (Read-Eval-Print Loop) 工具。它允許開發者即時執行 Java 程式碼片段,無需完整的類別宣告或編譯步驟。對於學習 Java 語法、快速測試程式碼邏輯、實驗 API 或進行程式碼除錯都非常方便。雖然 JShell 主要在 Java 9 中推出,但 Java 7 和 8 並沒有這個功能。直到 Java 9 後,JShell 不斷地演進,新增了許多實用特性。本文將整理 Java 9 至 Java 17 之間 JShell 的重要新特性,並分析其應用場景。

JAVA 7 to 17 Module

一、前言

一、前言

返回目錄

Java 的模組化系統 (Project Jigsaw),正式在 Java 9 中引入,對 Java 的開發方式帶來了重大的改變。在 Java 7 和 8 之前,Java 開發經常會遇到以下問題:

  • 大型應用程式的類別路徑混亂: 龐大的應用程式往往會使用大量的 JAR 檔案,導致類別路徑 (Classpath) 變得難以管理,容易發生版本衝突和命名空間衝突。
  • 封裝性不足: 缺乏明確的介面和實作分離機制,容易讓內部實作細節暴露,降低程式碼的維護性和安全性。
  • 運行時環境臃腫: 即使應用程式只用到 Java SE API 的一部分,仍然需要引入整個 JDK,造成運行時資源的浪費。

模組化系統旨在解決這些問題,透過明確的模組定義,改善程式碼的封裝性、可維護性和效能。以下將整理 Java 7 至 17 間關於模組化的新特性及其相關內容。

目錄

返回目錄

JAVA 7 to 17 JNI

一、前言

一、前言

返回目錄

在 Java 的世界中,Java Native Interface (JNI) 允許 Java 程式碼呼叫以其他程式語言 (例如 C、C++) 編寫的程式庫,這在需要使用作業系統底層功能,或需要使用效能更好的原生程式碼時非常有用。傳統上,JNI 程式庫都是在執行時期動態載入的,這可能會導致一些問題,例如:載入失敗、版本衝突、效能損耗等。本文將梳理 Java 7 至 Java 17 中關於 JNI 程式庫的新特性,並已知 Java 19 後 jextract 工具帶來的便利性 (Java 19 才開始有完整支援),但本文先不介紹此工具,現階段以 Java 17 為主。

目錄

JAVA 7 to 17 TypeAnnotations

一、前言

一、前言

返回目錄

在 Java 程式語言中,註解 (Annotations) 是一種為程式碼添加元資料 (Metadata) 的機制,它能夠在編譯時期或執行時期提供關於程式碼的額外資訊。Java 5 引入了註解,主要用於類別、方法、欄位等宣告上。Java 8 擴展了註解的應用範圍,允許將註解應用於型別 (Type) 上,這被稱為「型別上的註解 (Type Annotations)」。這個新特性提供了更強大的靜態分析能力,可以讓編譯器或程式碼分析工具檢查更深層次的程式碼問題。從 Java 8 到 Java 17,雖然型別上的註解的概念沒有根本性的改變,但其使用場景和應用工具更加豐富。本文將梳理 Java 7 至 Java 17 中關於型別上的註解的新特性,以便讀者更好地理解和應用它們。

目錄

JAVA 7 to 17 DateTime

一、前言

一、前言

返回目錄

在 Java 的發展歷程中,日期和時間的處理一直是一個令人頭痛的問題。舊有的 java.util.Date java.util.Calendar 類別設計複雜、使用起來不直觀,而且不是執行緒安全的。為了徹底解決這些問題,Java 8 引入了全新的 java.time API,這是一個基於 Joda-Time 函式庫的強大、現代化的日期和時間 API。從 Java 8 到 Java 17,雖然 java.time 的核心 API 沒有發生重大變更,但這個 API 在各種情境下的應用更加成熟,也增加了更多與之配合的功能。本文將梳理 Java 7 至 Java 17 中關於日期和時間的新特性,並著重介紹 java.time API,以便讀者更好地理解和使用 Java 的日期和時間處理。

目錄