国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java java教程 JBang,Java 生態(tài)系中缺少的腳本工具

JBang,Java 生態(tài)系中缺少的腳本工具

Jan 05, 2025 am 04:01 AM

Java生態(tài)已經(jīng)有兩個強大的專案管理工具,Maven和Gradle,但缺少一個簡單而強大的腳本工具。
這就是 JBang 發(fā)揮作用的地方。
它是一個簡約但功能強大的 Java、Kotlin 和 Groovy 檔案啟動器。
事實上,它允許您像運行腳本一樣輕鬆地運行程式碼。
它還提供許多其他功能,例如依賴管理、模板和 App Store。
讓我們在這篇文章中探索 JBang 及其功能。

設(shè)定

jbang 命令列可以使用不同的方法安裝在 Windows、Linux 和 macOS 上,這些方法在此處有詳細(xì)記錄。
我們可以透過執(zhí)行 jbang --version 來驗證安裝。

除此之外,最好為我們最喜歡的 IDE 安裝隨附的 IDE 擴充功能。
此處列出了支援的 IDE 擴充。

JBang 不依賴 JDK 到 JRE,但執(zhí)行使用 Java 的腳本需要 JDK。
您可以透過執(zhí)行 jbang jdk install 23 來安裝 JBang,這將安裝 JDK 23。

我們現(xiàn)在準(zhǔn)備好要寫我們的第一個腳本。

第一個腳本

讓我們建立一個簡單的腳本來列印「Hello, World!」到控制臺。

> jbang init helloworld.java

這將建立一個名為 helloworld.java 的文件,可以使用 jbang helloworld.java 運行。

> jbang helloworld.java
Hello world

當(dāng)您開啟該文件時,您將看到它是一個普通的 Java 文件,帶有 main 方法和特定的第一行。

///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }

正如我們將看到的,JBang 腳本由三個部分組成:shebang、可選屬性和腳本本身。
我們將在接下來的部分中使用第二部分的一些屬性,但讓我們專注於第一部分。

這部分 ///usr/bin/env jbang "$0" "$@" ;退出$?告訴系統(tǒng)使用 JBang 來執(zhí)行腳本。
它在 Unix 生態(tài)系統(tǒng)中被稱為 shebang,用於指定腳本的解釋器。
我們可以在 Unix 系統(tǒng)(macOS、Linux)上透過執(zhí)行 chmod x helloworld.java 使腳本可執(zhí)行,然後執(zhí)行 ./helloworld.java 來說明這一點。

/// usr/bin/env jbang "<pre class="brush:php;toolbar:false">///usr/bin/env jbang "<pre class="brush:php;toolbar:false">//JAVA 23+
//COMPILE_OPTIONS --enable-preview -source 23
//RUNTIME_OPTIONS --enable-preview
" "$@" ; exit $? //JAVA 23+ //COMPILE_OPTIONS --enable-preview -source 23 //RUNTIME_OPTIONS --enable-preview void main(String... args) { System.out.println("Hello World"); } " "$@" ; exit $? //JAVA 25 //COMPILE_OPTIONS --enable-preview -source 25 //RUNTIME_OPTIONS --enable-preview import java.util.concurrent.Callable; import java.util.concurrent.StructuredTaskScope; import static java.lang.System.*; void main(String... args) { out.println("Hello Java 25"); Callable task1 = () -> { out.println("Task 1" + Thread.currentThread()); return "Task 1"; }; Callable task2 = () -> { out.println("Task 2" + Thread.currentThread()); return 2; }; try ( var scope = new StructuredTaskScope()) { StructuredTaskScope.Subtask subtask1 = scope.fork(task1); StructuredTaskScope.Subtask subtask2 = scope.fork(task2); scope.join(); } catch (Exception e) { e.printStackTrace(); } }

我們現(xiàn)在可以像使用任何 Java 檔案一樣開發(fā)腳本。
一旦準(zhǔn)備好發(fā)布,我們可以將其匯出為不同的格式,如下所示:

  • 一個jar檔:jbang導(dǎo)出可移植的helloworld.java。如果您的腳本使用依賴項,則更建議使用以下命令。
  • A fatjar:包含所有相依性:jbang export fatjar helloworld.java。此方法仍需要在目標(biāo)機器上安裝JDK/JRE。如果您不想這樣做,更建議使用接下來的命令。
  • 包含 JDK 的 jlink 二進位檔案:jbang export jlink helloworld.java。要執(zhí)行的二進位檔案是 Unix 上的 helloworld-jlink/bin/helloworld 或 Windows 上的 helloworld-jlink/bin/helloworld.bat。
  • A 原生 imgae:jbang 匯出原生 helloworld.java。這需要安裝 GraalVM。

腳本也可以匯出為 mavenrepo: jbang export mavenrepo helloworld.java

JDK管理

如前一章所示,JBang 可以在您的電腦上安裝 JDK。
您可以使用 jbang jdk list 列出已安裝的 JDK,使用 jbang jdk list --available --show-details 列出可安裝的 JDK,使用 jbang jdk install [version] 安裝新的 JDK。 Jbang 也支援使用 SDKMAN 來管理支援系統(tǒng)上的 JDK。

此外,可以在腳本中指定 JDK 版本。
這是透過將以下行新增至腳本屬性來完成的: //JAVA [version](如果我們想要精確版本)或 //JAVA [version](如果我們至少想要一個特定版本)。
在這種情況下,JBang 將自動安裝所需的 JDK 版本並僅將其用於該腳本,而不更改系統(tǒng)的預(yù)設(shè) JDK。

例如,以下腳本使用 Java 25 和一些預(yù)覽功能。

> jbang init helloworld.java

沒有「Main」類別的腳本

由於腳本往往是輕量級的,因此最好在沒有類別和 main 方法的情況下編寫它們。
幸運的是,Java 有一個稱為隱式宣告類別和實例主方法的功能(在 Java 23 中仍處於預(yù)覽狀態(tài))。
此功能允許在沒有類別和靜態(tài) main 方法的情況下編寫 java 程式和 JBang 腳本。

下面的腳本將被編譯並執(zhí)行,沒有任何問題。

> jbang helloworld.java
Hello world

這是透過向腳本添加以下屬性來實現(xiàn)的。

///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }

第一行 //JAVA 23 告訴 JBang 使用 Java 23 或更高版本。
第二行和第三行 //COMPILE_OPTIONS --enable-preview -source 23 和 //RUNTIME_OPTIONS --enable-preview 分別啟用編譯和執(zhí)行時的預(yù)覽功能。

一旦功能變得穩(wěn)定,我們可以刪除這 3 行,腳本仍然可以工作。整齊!

依賴關(guān)係

JBang 支援以 Gradle 樣式依賴項的形式為腳本新增依賴項,方法是為每個依賴項新增 //DEPS atrefact-id:atrefact-name:version 行。
例如,要使用 jfiglet 函式庫,我們可以將以下行加入腳本: //DEPS com.github.lalyos:jfiglet:0.0.8.

> jbang init helloworld.java

目錄

JBang 中的目錄允許有效地組織和共享腳本和範(fàn)本。
此功能對於想要共享常見任務(wù)或工作流程的腳本集合的團隊或社群特別有用。
對於想要分發(fā)入門程式碼或在不提供原始程式碼的情況下顯示練習(xí)結(jié)果的教師來說,它也很有用。

目錄是一個名為 jbang-catalog.json 的 JSON 文件,其中包含兩組項目:別名和模板。
別名允許使用簡單的命令從目錄運行腳本,而模板則提供新腳本的起點。
目錄可以是遠(yuǎn)端的或本地的,並且可以根據(jù)需要添加和使用任意數(shù)量的本地或遠(yuǎn)端儲存庫。
有趣的是,JBang 在設(shè)定過程中創(chuàng)建了一個本地目錄,其中包含一些開箱即用的別名和模板。

JBang 依照下列順序在這些目錄中尋找本機目錄(來源 JBang 文件):

  1. 目前目錄,./jbang-catalog.json
  2. 在./.jbang/jbang-catalog.json中
  3. 在父目錄中,../jbang-catalog.json
  4. 在父級的 .jbang 目錄中,../.jbang/jbang-catalog.json
  5. 並向上遞歸重複步驟3和4到檔案系統(tǒng)的根
  6. 最後一步它將查看 $HOME/.jbang/jbang-catalog.json

JBang 將在許多開源儲存庫(如 GitHub、GitLab、Bitbucket 等)中尋找遠(yuǎn)端目錄。
我將在本文中使用 GitHub 作為範(fàn)例。
若要建立遠(yuǎn)端目錄,您需要將 jbang-catalog.json 新增至儲存庫的根資料夾。
然後透過 account/repository_name 引用該目錄。
如果您的儲存庫名為 jbang-catalog,那麼您可以透過帳戶引用它。
因此,例如,如果我的GitHub 帳戶名為yostane,並且我有一個名為curs-java 的儲存庫,其中包含一個名為jbang-catalog.json 的檔案的目錄,我可以透過yostane/cours-java 引用該目錄。此外,如果我在名為 jbang-catalog 的儲存庫中有一個 jbang-catalog.json,那麼我可以透過 yostane/jbang-catalog 或簡單地 yostane 引用它。

> jbang helloworld.java
Hello world

以下章節(jié)將展示如何使用目錄中的別名和模板。

別名

JBang 中的別名允許從目錄執(zhí)行腳本。
完整語法是 jbang alias@account/repository [args] 和 jbang alias [args] 分別表示遠(yuǎn)端和本地別名。

可以使用以下格式在目錄檔案的別名部分定義別名:

> jbang init helloworld.java

這是我在 DevoxxMA 2024 會議期間使用的目錄。

> jbang helloworld.java
Hello world

您可以使用以下命令執(zhí)行這些別名:

  • jbang palcli@yostane/cours-java 女士
  • jbang palqrest@yostane/cours-java
  • jbang hellojfx@yostane/cours-java

官方JBang GitHub帳號提供了包含許多別名和範(fàn)本的目錄。
讓我們運行其中的一些:

  • jbang httpd@jbangdev 運行本機網(wǎng)路伺服器。
  • jbang gavsearch@jbangdev [arg] 在 search.maven.org 上搜尋 [arg]。

範(fàn)本

模板,這是預(yù)先定義的腳本,可以用作新腳本的起點。
它們使用以下格式在目錄檔案的範(fàn)本部分中定義:

///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }

使用範(fàn)本時,JBang 會在 file-refs 屬性中建立所有檔案的副本。
當(dāng) file-ref 包含 {basename} 時,JBang 會將其替換為正在建立的腳本的名稱。
當(dāng)檔案引用使用 .qute 副檔名時,JBang 使用 Qute 模板引擎

以下是一些現(xiàn)成可用的範(fàn)本的範(fàn)例:

  • 使用 picocli 的 CLI 腳本:jbang init -t cli hellocli.java
  • Quarkus 單檔 REST API:jbang init -t qrest helloqrest.java

我們也可以使用社群共享的網(wǎng)路範(fàn)本。
例如,此指令建立一個 JUnit 單元測試檔: jbang init -t junit@jbangdev file_to_test.java.
從指令中我們可以找到 jbangdev/jbang-catalog 儲存庫中定義範(fàn)本的 jbang-catalog.json。

/// usr/bin/env jbang "<pre class="brush:php;toolbar:false">///usr/bin/env jbang "<pre class="brush:php;toolbar:false">//JAVA 23+
//COMPILE_OPTIONS --enable-preview -source 23
//RUNTIME_OPTIONS --enable-preview
" "$@" ; exit $? //JAVA 23+ //COMPILE_OPTIONS --enable-preview -source 23 //RUNTIME_OPTIONS --enable-preview void main(String... args) { System.out.println("Hello World"); } " "$@" ; exit $? //JAVA 25 //COMPILE_OPTIONS --enable-preview -source 25 //RUNTIME_OPTIONS --enable-preview import java.util.concurrent.Callable; import java.util.concurrent.StructuredTaskScope; import static java.lang.System.*; void main(String... args) { out.println("Hello Java 25"); Callable task1 = () -> { out.println("Task 1" + Thread.currentThread()); return "Task 1"; }; Callable task2 = () -> { out.println("Task 2" + Thread.currentThread()); return 2; }; try ( var scope = new StructuredTaskScope()) { StructuredTaskScope.Subtask subtask1 = scope.fork(task1); StructuredTaskScope.Subtask subtask2 = scope.fork(task2); scope.join(); } catch (Exception e) { e.printStackTrace(); } }

應(yīng)用程式商店

JBang App Store 是一個 Web 應(yīng)用程序,允許瀏覽索引目錄的別名。
它提供了一種發(fā)現(xiàn)和使用各種工具和實用程式的便捷方法,無需複雜的設(shè)定或安裝過程。
例如,當(dāng)我們搜尋 yostane 時,我們應(yīng)該能夠找到我在不同目錄中定義的不同別名。
下圖顯示了搜尋結(jié)果。

JBang, the missing scripting tool of the Java ecosystem

以下是我在App Store瀏覽時發(fā)現(xiàn)的一些有趣又好笑的腳本:

  • 考賽。以下是運行腳本的一些範(fàn)例:
    • jbangowsay@ricksbrown/cowsay MOO!
    • jbangowsay@ricksbrown/cowsay -f Dragon「我是維爾德拉暴風(fēng)雨!」
  • 尋找類似 grep 的子字串: jbang grep@a-services "hello" 。
  • 從圖像建立 PDF:images2pdf@a-services。以下命令將從兩個影像建立 PDF 檔案:
///usr/bin/env jbang "<pre class="brush:php;toolbar:false">  {
    "catalogs": {},
    "aliases": {
      // aliases
    },
    "templates": {
      // templates
    }
  }
" "$@" ; exit $? //DEPS com.github.lalyos:jfiglet:0.0.9 import com.github.lalyos.jfiglet.FigletFont; public class DependenciesDemo { public static void main(String... args) throws Exception { System.out.println(FigletFont.convertOneLine("JBang is amazing")); } }

當(dāng)您發(fā)布目錄時,它很可能會在 JBang AppStore 下次索引後出現(xiàn)。
這是此處定義的預(yù)定 GitHub 操作。

一些具有著名框架的範(fàn)例

透過 JBang,我們可以建立使用流行框架和函式庫的單文件應(yīng)用程式。
一些例子包括 Quarkus、picolcli 和 JavaFX。
讓我們在以下部分中探討一些範(fàn)例。

JavaFX(openjfx)

JavaFX 是一個桌面和 UI 框架。
其官方網(wǎng)站是 openjfx.io,也受到 Gluon 的支持,Gluon 提供了額外的 UI 元件,並為 JavaFX 帶來了行動應(yīng)用程式支援。
JBang 支援此??框架,可用於建立單一檔案 JavaFX 應(yīng)用程式。

以下是使用 JBang 建立的一些 JavaFX 應(yīng)用程式範(fàn)例:

  • 基本視窗
  • 更漂亮的例子jbang https://gist.github.com/FDelporte/c69a02c57acc892b4c996a9779d4f830
  • 模板 jbang init -t javafx@yostane hellojfx

誇庫斯

Quarkus 是一個針對 Kubernetes 和無伺服器環(huán)境進行最佳化的 Java 框架。
它提供快速啟動時間和低記憶體消耗,使其成為雲(yún)端原生應(yīng)用程式的理想選擇。

感謝 JBang,我們可以創(chuàng)建利用該框架強大功能的單一檔案 Quarkus 應(yīng)用程式。
以下範(fàn)例顯示了一個測試字串是否為回文的 REST API。它具有 JSON 解析、日誌記錄並提供 OpenAPI 和 Swagger 文件。

> jbang init helloworld.java

我們可能會注意到腳本中的 //SOURCES PalindromeService.java 行。
它告訴 JBang 在與腳本相同的目錄中尋找名為 PalindromeService.java 的檔案。
這意味著JBang支援多檔案腳本。

您可以使用 jbang palqrest@yostane/cours-java 執(zhí)行伺服器並使用curl http://localhost:8080/palindrome?input=madam 呼叫端點。

> jbang helloworld.java
Hello world

其他語言

JBang 支援執(zhí)行 Java、Kotlin、JShell 和 Groovy 程式碼。
它甚至可以從 Markdown 檔案運行 Java 程式碼。
以下是如何在不同語言中使用 JBang 的一些範(fàn)例:

  • Kotlin:您可以使用 jbang init -t hello.kt filename.kt 初始化 Kotlin 腳本。請注意,這與官方 .main.kts Kotlin 腳本不同。事實上,JBang 創(chuàng)建的 Kotlin 腳本可以受益於目錄和 App Store 功能。以下是使用 JBang 建立的 Kotlin 腳本的範(fàn)例。
> jbang init helloworld.java
  • 有趣的事實:JBang 的想法來自針對 Kotlin 生態(tài)系統(tǒng)的 kscript。
  • Kotlin 已經(jīng)具有原生腳本支援(使用 .main.kts 腳本),但似乎缺乏目錄、範(fàn)本和 App Store 功能。
    • Groovy:使用 jbang init -t hello.groovy filename.groovy 初始化 Groovy 腳本。以下是使用 JBang 建立的 Groovy 腳本的範(fàn)例。
> jbang helloworld.java
Hello world
  • JShell:JBang 支援帶有 .jsh 或 .jshell 副檔名的 JShell 腳本以及使用 jbang -c 'System.out.println("Inline Java ? yay!")' 的內(nèi)聯(lián)腳本。以下是使用 JBang 建立的 JShell 腳本範(fàn)例。
///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }
  • 使用 Java 和 JShell 程式碼區(qū)塊進行 Markdown:您可以使用 jbang my_markdown.md 直接從 Markdown 檔案執(zhí)行 Java 和 JShell 程式碼區(qū)塊。
/// usr/bin/env jbang "<pre class="brush:php;toolbar:false">///usr/bin/env jbang "<pre class="brush:php;toolbar:false">//JAVA 23+
//COMPILE_OPTIONS --enable-preview -source 23
//RUNTIME_OPTIONS --enable-preview
" "$@" ; exit $? //JAVA 23+ //COMPILE_OPTIONS --enable-preview -source 23 //RUNTIME_OPTIONS --enable-preview void main(String... args) { System.out.println("Hello World"); } " "$@" ; exit $? //JAVA 25 //COMPILE_OPTIONS --enable-preview -source 25 //RUNTIME_OPTIONS --enable-preview import java.util.concurrent.Callable; import java.util.concurrent.StructuredTaskScope; import static java.lang.System.*; void main(String... args) { out.println("Hello Java 25"); Callable task1 = () -> { out.println("Task 1" + Thread.currentThread()); return "Task 1"; }; Callable task2 = () -> { out.println("Task 2" + Thread.currentThread()); return 2; }; try ( var scope = new StructuredTaskScope()) { StructuredTaskScope.Subtask subtask1 = scope.fork(task1); StructuredTaskScope.Subtask subtask2 = scope.fork(task2); scope.join(); } catch (Exception e) { e.printStackTrace(); } }

以上是JBang,Java 生態(tài)系中缺少的腳本工具的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

hashmap和hashtable之間的區(qū)別? hashmap和hashtable之間的區(qū)別? Jun 24, 2025 pm 09:41 PM

HashMap與Hashtable的區(qū)別主要體現(xiàn)在線程安全、null值支持及性能方面。 1.線程安全方面,Hashtable是線程安全的,其方法大多為同步方法,而HashMap不做同步處理,非線程安全;2.null值支持上,HashMap允許一個null鍵和多個null值,Hashtable則不允許null鍵或值,否則拋出NullPointerException;3.性能方面,HashMap因無同步機制效率更高,Hashtable因每次操作加鎖性能較低,推薦使用ConcurrentHashMap替

為什麼我們需要包裝紙課? 為什麼我們需要包裝紙課? Jun 28, 2025 am 01:01 AM

Java使用包裝類是因為基本數(shù)據(jù)類型無法直接參與面向?qū)ο癫僮鳎鴮嶋H需求中常需對象形式;1.集合類只能存儲對象,如List利用自動裝箱存儲數(shù)值;2.泛型不支持基本類型,必須使用包裝類作為類型參數(shù);3.包裝類可表示null值,用於區(qū)分未設(shè)置或缺失的數(shù)據(jù);4.包裝類提供字符串轉(zhuǎn)換等實用方法,便於數(shù)據(jù)解析與處理,因此在需要這些特性的場景下,包裝類不可或缺。

JIT編譯器如何優(yōu)化代碼? JIT編譯器如何優(yōu)化代碼? Jun 24, 2025 pm 10:45 PM

JIT編譯器通過方法內(nèi)聯(lián)、熱點檢測與編譯、類型推測與去虛擬化、冗餘操作消除四種方式優(yōu)化代碼。 1.方法內(nèi)聯(lián)減少調(diào)用開銷,將頻繁調(diào)用的小方法直接插入調(diào)用處;2.熱點檢測識別高頻執(zhí)行代碼並集中優(yōu)化,節(jié)省資源;3.類型推測收集運行時類型信息實現(xiàn)去虛擬化調(diào)用,提升效率;4.冗餘操作消除根據(jù)運行數(shù)據(jù)刪除無用計算和檢查,增強性能。

什麼是接口中的靜態(tài)方法? 什麼是接口中的靜態(tài)方法? Jun 24, 2025 pm 10:57 PM

StaticmethodsininterfaceswereintroducedinJava8toallowutilityfunctionswithintheinterfaceitself.BeforeJava8,suchfunctionsrequiredseparatehelperclasses,leadingtodisorganizedcode.Now,staticmethodsprovidethreekeybenefits:1)theyenableutilitymethodsdirectly

什麼是實例初始器塊? 什麼是實例初始器塊? Jun 25, 2025 pm 12:21 PM

實例初始化塊在Java中用於在創(chuàng)建對象時運行初始化邏輯,其執(zhí)行先於構(gòu)造函數(shù)。它適用於多個構(gòu)造函數(shù)共享初始化代碼、複雜字段初始化或匿名類初始化場景,與靜態(tài)初始化塊不同的是它每次實例化時都會執(zhí)行,而靜態(tài)初始化塊僅在類加載時運行一次。

變量的最終關(guān)鍵字是什麼? 變量的最終關(guān)鍵字是什麼? Jun 24, 2025 pm 07:29 PM

InJava,thefinalkeywordpreventsavariable’svaluefrombeingchangedafterassignment,butitsbehaviordiffersforprimitivesandobjectreferences.Forprimitivevariables,finalmakesthevalueconstant,asinfinalintMAX_SPEED=100;wherereassignmentcausesanerror.Forobjectref

什麼是工廠模式? 什麼是工廠模式? Jun 24, 2025 pm 11:29 PM

工廠模式用於封裝對象創(chuàng)建邏輯,使代碼更靈活、易維護、松耦合。其核心答案是:通過集中管理對象創(chuàng)建邏輯,隱藏實現(xiàn)細(xì)節(jié),支持多種相關(guān)對象的創(chuàng)建。具體描述如下:工廠模式將對象創(chuàng)建交給專門的工廠類或方法處理,避免直接使用newClass();適用於多類型相關(guān)對象創(chuàng)建、創(chuàng)建邏輯可能變化、需隱藏實現(xiàn)細(xì)節(jié)的場景;例如支付處理器中通過工廠統(tǒng)一創(chuàng)建Stripe、PayPal等實例;其實現(xiàn)包括工廠類根據(jù)輸入?yún)?shù)決定返回的對象,所有對象實現(xiàn)共同接口;常見變體有簡單工廠、工廠方法和抽象工廠,分別適用於不同複雜度的需求。

什麼是類型鑄造? 什麼是類型鑄造? Jun 24, 2025 pm 11:09 PM

類型轉(zhuǎn)換有兩種:隱式和顯式。 1.隱式轉(zhuǎn)換自動發(fā)生,如將int轉(zhuǎn)為double;2.顯式轉(zhuǎn)換需手動操作,如使用(int)myDouble。需要類型轉(zhuǎn)換的情況包括處理用戶輸入、數(shù)學(xué)運算或函數(shù)間傳遞不同類型的值時。需要注意的問題有:浮點數(shù)轉(zhuǎn)整數(shù)會截斷小數(shù)部分、大類型轉(zhuǎn)小類型可能導(dǎo)致數(shù)據(jù)丟失、某些語言不允許直接轉(zhuǎn)換特定類型。正確理解語言的轉(zhuǎn)換規(guī)則有助於避免錯誤。

See all articles