建立你的第一個 Java 程式

文字編輯器或名為 HelloWorld.javaIDE 中建立一個新檔案。然後將此程式碼塊貼上到檔案中並儲存:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

在 Ideone 上執行

注意: 為了讓 Java 將其識別為 public class(而不是丟擲編譯時錯誤 ),檔名必須與 .java 副檔名的類名(在本例中為 HelloWorld)相同。之前還應該有一個 public 訪問修飾符。

命名約定建議 Java 類以大寫字元開頭,並採用駝峰格式(每個單詞的首字母大寫)。這些公約建議不要使用下劃線(_)和 $$)。

要編譯,開啟終端視窗並導航到 HelloWorld.java 目錄:

cd /path/to/containing/folder/

注意: cd 是更改目錄的終端命令。

輸入 javac,然後輸入檔名和副檔名,如下所示:

$ javac HelloWorld.java

即使安裝了 JDK 並且能夠從 IDE ex 執行程式,也很常見錯誤'javac' is not recognized as an internal or external command, operable program or batch file.eclipse 等由於預設情況下路徑未新增到環境中。

如果你在 Windows 上得到這個,要解決,首先嚐試瀏覽你的 javac.exe 路徑,它最有可能在你的 C:\Program Files\Java\jdk(version number)\bin。然後嘗試用下面執行它。

$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java

以前當我們呼叫 javac 時,它與上面的命令相同。只有在這種情況下,你的知識才知道 javac 所在的位置。現在讓我們告訴它,這樣你就不必每次都輸入整個路徑。我們需要將此新增到我們的 PATH

要在 Windows XP / Vista / 7/8/10 中編輯 PATH 環境變數:

  • 控制面板⇒系統⇒高階系統設定
  • 切換到高階選項卡⇒環境變數
  • 系統變數中,向下滾動以選擇路徑⇒編輯

**你不能撤消這個,**所以要小心。首先將現有路徑複製到記事本。然後,為了獲得 javac 的精確路徑,請手動瀏覽到 javac 所在的資料夾,然後單擊位址列然後複製它。它應該看起來像 c:\Program Files\Java\jdk1.8.0_xx\bin

變數值欄位中,貼上所有現有目錄的 IN FRONT ,然後是分號(;)。請勿刪除任何現有條目。

Variable name  : PATH
Variable value : c:\Program Files\Java\jdk1.8.0_xx\bin;[Existing Entries...]

現在這應該解決。

對於 Linux 為基礎的系統嘗試在這裡

注:javac 命令呼叫 Java 編譯器。

然後編譯器將生成一個名為 HelloWorld.class位元組碼檔案,該檔案可以在 Java 虛擬機器(JVM)中執行 。Java 程式語言編譯器 javac 讀取用 Java 程式語言編寫的原始檔,並將它們編譯成 bytecode 類檔案。或者,編譯器還可以使用 Pluggable Annotation Processing API 處理原始檔和類檔案中的註釋。編譯器是命令列工具,但也可以使用 Java Compiler API 呼叫。

要執行程式,請輸入 java,然後輸入包含 main 方法的類的名稱(在我們的示例中為 HelloWorld)。請注意 .class 如何省略:

$ java HelloWorld

注:java 命令執行的 Java 應用程式。

這將輸出到你的控制檯:

Hello World!

你已經成功編寫並構建了第一個 Java 程式!

注意: 為了識別 Java 命令(javajavac 等),你需要確保:

  • 安裝了 JDK(例如 OracleOpenJDK 和其他來源)
  • 你的環境變數已正確設定

你需要使用 JVM 提供的編譯器(javac)和執行程式(java)。要找出已安裝的版本,請在命令列中輸入 java -versionjavac -version。程式的版本號將列印在終端中(例如 1.8.0_73)。

仔細看看 Hello World 計劃

Hello World 程式包含一個檔案,該檔案由 HelloWorld 類定義,main 方法和 main 方法中的語句組成。

public class HelloWorld {

class 關鍵字開始名為 HelloWorld 的類的類定義。每個 Java 應用程式至少包含一個類定義( 有關類的更多資訊 )。

    public static void main(String[] args)  {

這是一個入口點方法(由其名稱和 public static void main(String[]) 的簽名定義),JVM 可以從中執行你的程式。每個 Java 程式都應該有一個。它是:

  • public:意思是該方法也可以從程式之外的任何地方呼叫。有關詳細資訊,請參閱可見性
  • static:意味著它存在並且可以自己執行(在類級別而不建立物件)。
  • void:意思是它沒有返回值。注意: 這與 C 和 C++不同,其中返回程式碼如 int(Java 的方式是 System.exit() )。

這個主要方法接受:

  • Strings 的陣列 (通常稱為 args)作為引數傳遞給 main 函式(例如來自命令列引數 )。

幾乎所有這些都是 Java 入口點方法所必需的。

非必需部件:

  • 名稱 args 是一個變數名,所以它可以被稱為你想要的任何東西,雖然它通常被稱為 args
  • 它的引數型別是陣列(String[] args)還是 VarargsString... args)並不重要,因為陣列可以傳遞給 varargs。

注意: 單個應用程式可能有多個包含入口點(main)方法的類。應用程式的入口點由作為 java 命令的引數傳遞的類名確定。

在 main 方法中,我們看到以下語句:

        System.out.println("Hello, World!");

讓我們逐個元素地分解這個陳述:

元件 目的
System 這表示後續表示式將呼叫 java.lang 類中的 System 類。
. 這是一個點運算子。點運算子使你可以訪問類成員 1 ; 即它的欄位(變數)及其方法。在這種情況下,此點運算子允許你引用 System 類中的 out 靜態欄位。
out 這是包含標準輸出功能的 System 類中 PrintStream 型別的靜態欄位的名稱。
. 這是另一個點運算子。此點運算子提供對 out 變數中 println 方法的訪問。
println 這是 PrintStream 類中方法的名稱。此方法特別將引數的內容列印到控制檯中,然後插入換行符。
( 此括號表示正在訪問某個方法(而不是欄位),並開始將引數傳遞給 println 方法。
Hello, World! 這是作為引數傳遞給 println 方法的 String 文字。每個末尾的雙引號將文字分隔為 String。
) 此括號表示傳遞給 println 方法的引數的關閉。
; 這個分號標誌著宣告的結束。

注意: Java 中的每個語句都必須以分號結尾(;)。

然後關閉方法體和類體。

    }  // end of main function scope
}      // end of class HelloWorld scope 

這是展示 OO 範例的另一個例子。讓我們為一個足球隊建模一個(是的,一個!)成員。可以有更多,但我們將討論當我們到達陣列。

首先,讓我們定義我們的 Team 類:

public class Team {
    Member member;
    public Team(Member member) {  // who is in this Team?
        this.member = member;  //  one 'member' is in this Team!
    }
}

現在,讓我們定義我們的 Member 類:

class Member {
    private String name;
    private String type;
    private int level; // note the data type here
    private int rank; // note the data type here as well

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
}

為什麼我們在這裡使用 private?好吧,如果有人想知道你的名字,他們應該直接問你,而不是伸手掏腰帶拿出你的社保卡。這個 private 做了類似的事情:它阻止外部實體訪問你的變數。你只能通過 getter 函式返回 private 成員(如下所示)。

將所有內容放在一起,然後新增前面討論過的 getter 和 main 方法,我們有:

public class Team {
    Member member;
    public Team(Member member) {  
        this.member = member;  
    }

    // here's our main method
    public static void main(String[] args) {
       Member myMember = new Member("Aurieel", "light", 10, 1); 
       Team myTeam = new Team(myMember); 
       System.out.println(myTeam.member.getName());
       System.out.println(myTeam.member.getType());
       System.out.println(myTeam.member.getLevel());
       System.out.println(myTeam.member.getRank());
    }
}

class Member {
    private String name;
    private String type;
    private int level;
    private int rank;

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
    
    /* let's define our getter functions here */
    public String getName() { // what is your name?
        return this.name; // my name is ...
    }
   
    public String getType() { // what is your type?
        return this.type; // my type is ...
    }
    
    public int getLevel() { // what is your level?
        return this.level; // my level is ...
    }
    
    public int getRank() { // what is your rank?
        return this.rank; // my rank is
    }
}

輸出:

Aurieel
light
10
1

在 ideone 上執行

Test 類中的 main 方法再次成為我們程式的入口點。如果沒有 main 方法,我們就無法告訴 Java 虛擬機器(JVM)從哪裡開始執行程式。

1 - 因為 HelloWorld 類與 System 類幾乎沒有關係,所以它只能訪問 public 資料。