Java 環境及專案開啟

Java 簡介

程式的定義

什麼叫程式,其明確的定義如下 :

1. 一行一行往下執行
2. 具人工智慧決策分析的功能 –if
3. 具有重複執行的功能 — 迴圈

純物件導向

物件導向程式有許多種,比如C/C++、Visual C++、Java, C#、Python、PHP。但只有 Java 及 C# 是純物件導向語言。其他語言,甚至是 C++,都不是純物件導向程式。

什麼是純物件導向程式呢? 如果所有程式碼都包含在class{} 之內,才叫純物件導向程式。

Java 技術

Java SE : Java Platform, Standard Edition : 標準開發平台,開發 applet 及應用程式,可執行於 web 及桌上型電腦的程式。

Java EE : Java Platform, Enterprise Edition。廣泛使用於大型企業中,建立伺服器端及客戶端的分散式應用程式,如網路購物程式。Java EE以 Java SE 為基礎,延伸開發出其他的API,支援大工程,高效能的企業軟体。

Java 編譯流程

Java 原始碼完成後按 F6 執行,就會產生一連串的動作。首先啟動 javac 編譯程式,將原始碼編譯成 .class檔, 然後再啟動 java 虛擬機器執行 .class檔。

“java” 這支程式又稱為 Virtual Machine 虛擬機器。每個作業系統都有自已的VM,如此就可以達到真正的跨平台。也就是說程式碼只要在某個系統上編譯一次,其產生的 class/jar 就可以通用於不同的作業系統,而且不需再針對不同的作業系統重新編譯。

java_compile

物件導向

OOP(Object-Oriented Programming) 於 1967 年的 SIMULA-67 程式語言掘起,後來變成了一門學術科目,並由 C++、Java、Visual C# 等實作其理論。

在 1967 年代,電腦還算是剛起步新產品,Ram 是非常昂貴的產品。然而物件導向理論需消耗大量的記憶体才可實現。所以早期物件導向只是一門非常冷門的理論,它只是某些人為了滿足研究的興趣所產生出來的垃圾。到了現在普通主機板可以安裝 128 G 以上的 Ram,這讓物件導向開始火紅。而且要是沒有物件導向理論,視窗作業系統根本不可能實作出來。

OOP 不同於早期的程序化語言,主要的特性如下

模組化 : 將大工程的程式碼分成小模組,易於分工
資訊隱藏 : 將重要的資訊隱藏,不讓外界得知
重複使用 : 相同的功能的程式碼不需重複撰寫
可任意插拔及易於除錯 : 像樂高一樣可隨意組合,且容易找出錯誤

OpenJDK

JDK 全名為 Java Development Kit (Java 開發套件),也就是執行 Java 時所需要的函數庫,以 .jar 的檔案格式存在。

JDK 1~4 由昇陽 (Sun) 開發,到了 5.0 版被 Oracle 併購。Oracle JDK 8.0 還是免付費,但到了 9.0 開始就要收費,所以業界全都轉用 OpenJDK。

OpenJDK 由網路社群開發,完全免費。Oracle 官方的 JDK 也是以 OpenJDK 為核心,然後加入一些一般人用不到的功能,所以可以完全使用 OpenJDK。

下載 OpenJDK

早期的 OpenJDK 版本主要由 Adoptium (前身為 AdoptOpenJDK) 社群維護,但目前 Microsoft (微軟) 也積極參與並發行穩定的 OpenJDK 版本,請由 https://learn.microsoft.com/en-us/java/openjdk/download 下載。

在眾多的 OpenJDK 版本中,請務必選擇 LTS (Long-Term Support, 長期支援) 版本,以確保您的應用程式在未來幾年內都能獲得錯誤修復和安全更新。

安裝 OpenJDK 時,需把「設定或重寫 JAVA_HOME 變量」選擇 「安裝在本機」。

測試

測試是否有安裝成功,請進入 DOS 模式,並執行 java -version,若出現如下畫面,表示安裝設定成功。

java_version

NetBeans IDE

IDE 全名為 Integration Development Environment (整合開發環境)。它是一套軟體工具,為程式設計師提供了一個集成的環境,用於程式碼編寫、編譯、除錯等各種開發活動。

常見的 Java 開發 IDE 主要有三種:

Eclipse : 這是早期的主流,但現今其功能和效能都不如其他的競爭者,建議趁早換掉。

NetBeans : 強大且穩定的 IDE。由昇陽開發,後來由 Oracle 接手,目前交由 Apache 維護開發。

Intellij IDEA : 由 JetBrain 公司開發,是目前最為強悍的 IDE。

NetBeans 29

NetBeans 29 不需安裝 JDK,因為 29 版本已將 JDK 25 打包在裏面,請進入 https://netbeans.apache.org/front/main/download/nb29/ ,再點選如下紅色框線的 Codelerity packages

安裝完後,將 C:\Program Files\Apache NetBeans\jdk\bin 設定到系統 path 變數中。

更改 JDK

NetBeans 29 預設使用 JDK 25,安裝位置位於 C:\Program Files\Apache NetBeans\jdk

若要更改 OpenJDK 21,由 Tools/Java Platforms/Add Platform,然後選擇 C:\Program Files\Microsoft\jdk-21.0.10.7-hotspot

然後於專案上按右鍵 → Properties → Libraries → Java Platform → 選取所要的 JDK。

開啟新專案

Java 程式的撰寫或練習,都是以開啟專案開始,請開啟 NetBeans 由 File/New Project進入, 然後選取 Java with Ant/Java Application。

java_newproject

Project Name : 專案的名稱,首字請用大寫, 如 FirstApp。Project Folder : 請在C: 或 D: 新增一個專門存放 Java 程式的目錄。最後請確保Create Main Class有打勾。

java_newproject2

Hello world

每種程式語言的第一個教學,都是要學會如何列印 Hello world。如下代碼紅色部份一定要背起來,相關細節會在後續課程中說明。

若要執行程式碼, 直接按F6即可

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package firstapp;
/**
 *
 * @author mahal
 */
public class FirstApp {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

中文亂碼

早期 NetBeans 8.0 在列印中文時都正常,但 NetBeans 27 版在列印中文都會出現亂碼,請在 一開始加入 System.setOut 設定輸出格式,如下代碼所示

package first;

import java.io.PrintStream;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) throws Exception{
        //解決中文亂碼問題
        System.setOut(new PrintStream(System.out, true, "UTF-8"));
        System.out.println("Hello,大家好");
        Scanner scanner = new Scanner(System.in);
        scanner.nextLine();
    }
}

Main Class

如果專案中有多個 .java 檔,而每個 .java 檔都有 public static void main(String[] args),那麼整個專案會從那個 .java 檔進入呢?! 這時必需指定 Main Class。

請由 Run/Set Project Configuration/Customize/Run,然後指定 Main Class。

命令視窗執行程式

在 NetBeans 按 F6 就可以執行程式,執行後會在專案下產生 build 目錄,然後在 build\classes 下產生 .class 檔。若要在 DOS 下執行這個 .class 檔,可以使用如下指令。

cd build\classes
java first.First #注意,不可以加 .class

Jar

jar 是將多個 .class 壓縮並包裝成一個 .jar 檔,並在 manifest 裏指定 Main-Class。這個 .jar 檔可以用 zip 或 winrar 解開。

在 NetBeans 執行 Run/Build Project,就會自動包裝成一個 jar 檔,置於專案下的 dist 目錄,這個 jar 檔也可在 DOS 下執行。

cd dist
java -jar First.jar #此時要加 .jar

如果想要在桌面上點二下就可以執行,請在桌面新增 First.bat 檔,內容如下

@echo off
java -jar E:\java\First\dist\First.jar
pause

點選 First.bat 二下即可執行。

包裝成 exe 安裝檔

專案完成並編譯成 .jar 檔後,將 .jar 檔交付給使用者執行。使用者的電腦也必需安裝 OpenJdk,而且需在 DOS 命令視窗下執行如下指令。

java -jar C:\First\First.jar

對於不熟悉電腦操作或程式設計的使用者來說,要求他們在命令提示字元(DOS)視窗中輸入上述的指令,確實是個極大的挑戰。

幸運的是,我們可以將 .jar 檔案包裝成一個標準的 Windows 安裝檔 (.exe),讓使用者能夠像安裝其他任何軟體一樣,輕鬆地在桌面上雙擊圖示執行您的應用程式。

安裝 Wix toolset

WiX Toolset 用於將最終的 .exe 程式包裝成一個功能完整的 Windows 安裝程式(包含設定安裝路徑、建立開始選單和桌面捷徑等)。請到 https://github.com/wixtoolset/wix3/releases 下載 wix314.exe 檔,安裝後記得把 C:\Program Files (x86)\WiX Toolset v3.14\bin 路徑加到 「系統path」變數。

本站亦備份一份 WiX,請點選如下網址 : wix314.exe

編譯成 .class 檔

使用 javac 指令將 .java 檔編譯成 .clsss

javac -d build/classes src/first/First.java

包裝成 .jar 檔

在專案目錄下新增 manifest.txt,內容如下

Main-Class: first.First
#這裏需有一行空白行

請注意,上述的最下面必需包含一個空白行,這是 java 規定的。

使用 jar 指令包裝成 .jar

jar cfm dist/First.jar manifest.txt -C build/classes .

在 NetBeans 直接透過 Run/Build Project 選項亦可自動完成 .jar 檔案的建立。

建立自定義運行環境(Runtime Image)

這是讓使用者電腦無需安裝 OpenJDK 也能執行程式的關鍵步驟。jlink工具會將您的程式所需的函式庫和一個精簡版的 JVM 一起打包。

請在專案目錄下使執行如下指令建立 runtime image

jlink --module-path "%JAVA_HOME%\jmods;" --add-modules java.base,java.desktop,java.logging --output custom-runtime

包裝成 .exe 安裝檔

jpackage 是 JDK 內建的打包工具,它會利用前面安裝的 WiX Toolset,將您的 .jar 和自定義運行環境一起包裝成一個完整的 Windows 安裝檔。請在專案目錄下執行如下指令。

jpackage --name First --input .\dist --main-jar First.jar --main-class first.First --runtime-image custom-runtime --win-shortcut --win-menu --win-dir-chooser --win-per-user-install --java-options -Xmx512m --win-console --dest .\output

選項	          說明
--name	          應用程式名稱。
--input	          包含 .jar 檔案的目錄 (.\dist)。
--main-jar	  程式主 .jar 檔案的名稱。
--main-class	  程式的主類別。
--runtime-image	  使用上述建立的自定義運行環境目錄。
--win-shortcut	  在桌面上建立捷徑。
--win-menu	  在開始選單中建立捷徑。
--win-console	  非常重要! 輸出到命令視窗的程式必須加此選項,否則會出現 Failed to launch JVM
--dest	          指定最終 .exe 安裝檔的輸出目錄。

安裝與執行

最後,在 .\output 目錄下會生成安裝程式(例如:First-1.0.exe)。執行此檔案進行安裝後,使用者就可以直接雙擊桌面上的 “First” 圖示來啟動 Java 應用程式。

通用程式

如何自動判斷是在 NetBeans 輸出還是在 DOS 命令視窗執行呢,可以使用如下代碼自動判斷

package net.ddns.mahaljsp;

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Test {
    public static void main(String[] args) {
        try {
            if (System.console()==null)//NetBeans 輸出
                System.setOut(new PrintStream(System.out, true, "UTF-8"));                    
        }
        catch (UnsupportedEncodingException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("Hello,大家好");
    }
}

Intellij IDEA

安裝 Intellij IDEA

如果使用 Intellij IDEA,不需事前安裝 OpenJDK,可以在安裝 Intellij 後,在第一次開啟專案時選擇下載 ms OpenJDK 21的版本。不過為了統一,還是請先安裝 ms OpenJDK 21,然後再安裝 Intellij IDEA。

請由如下網址 https://www.jetbrains.com/idea/download/?section=windows 下載 Community 版本。安裝時請將所有選項都打勾。

開啟新專案

使用 IntelliJ 開啟新專案,請依下圖設定。在 Build system 可以選擇 IntelliJ 或者 Gradle。IntelliJ 比較簡單但後續需手動管理,Gradle 比較複雜但對專案管理非常方便,所以建議使用 Gradle。

開啟 Main.java 即可按右鍵/Run Main.main()。

如果是大型專案,請設定上方的 Current File/Edit Configurations,選擇 Application,然後依下圖設定。重點是選輸入 Name,然後在 -cp 選擇 xxx.main,最後再選擇 xxx.Main

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *