建立你的第一個 Java 程式
在文字編輯器或名為 HelloWorld.java
的 IDE 中建立一個新檔案。然後將此程式碼塊貼上到檔案中並儲存:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
注意: 為了讓 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 命令(java
,javac
等),你需要確保:
你需要使用 JVM 提供的編譯器(javac
)和執行程式(java
)。要找出已安裝的版本,請在命令列中輸入 java -version
和 javac -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()
)。
這個主要方法接受:
幾乎所有這些都是 Java 入口點方法所必需的。
非必需部件:
- 名稱
args
是一個變數名,所以它可以被稱為你想要的任何東西,雖然它通常被稱為args
。 - 它的引數型別是陣列(
String[] args
)還是 Varargs (String... 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
Test
類中的 main
方法再次成為我們程式的入口點。如果沒有 main
方法,我們就無法告訴 Java 虛擬機器(JVM)從哪裡開始執行程式。
1 - 因為 HelloWorld
類與 System
類幾乎沒有關係,所以它只能訪問 public
資料。