Java編程語言是......
通用 :它旨在用於在各種應用程序域中編寫軟件,並且缺少任何特定域的專用功能。
基於類 :其對象結構在類中定義。類實例始終具有在其類定義中指定的那些字段和方法(請參閱類和對象 )。這與JavaScript等非基於類的語言形成對比。
靜態類型 :編譯器在編譯時檢查是否遵守變量類型。例如,如果方法需要String
類型的參數,那麼在調用方法時該參數實際上必須是一個字符串。
面向對象 :Java程序中的大多數東西都是類實例,即狀態(字段)和行為的捆綁(對數據進行操作並形成對象與外部世界的接口的方法)。
可移植 :它可以在任何具有javac
平台上javac
,生成的類文件可以在任何具有JVM的平台上運行。
Java旨在讓應用程序開發人員“編寫一次,隨處運行”(WORA),這意味著編譯的Java代碼可以在支持Java的所有平台上運行,而無需重新編譯。
Java代碼被編譯為字節碼( .class
文件),而後者又由Java虛擬機(JVM)解釋。理論上,由一個Java編譯器創建的字節碼應該在任何JVM上以相同的方式運行,即使在不同類型的計算機上也是如此。 JVM可能(並且在實際程序中)將選擇編譯為本機機器命令,經常執行字節碼的部分。這稱為“即時(JIT)編譯”。
Sun / Oracle定義了三個Java版本:
Java SE / EE / ME版本有一個單獨的主題。
每個版本都有多個版本。 Java SE版本如下所示。
有關安裝Java(標準版)的單獨主題。
有以下單獨的主題:
以下是繼續學習和理解Java編程語言的主題鏈接。這些主題是Java編程的基礎知識,可幫助您入門。
雖然Java對標準庫中的測試沒有任何支持,但是有第三方庫旨在支持測試。兩個最受歡迎的單元測試庫是:
1.在“ 版本”部分中, 生命週期結束(免費)日期是Oracle將停止向其公共下載站點發布Java SE的更多更新的日期。需要持續訪問關鍵錯誤修復和安全修復程序以及Java SE常規維護的客戶可以通過Oracle Java SE支持獲得長期支持 。
Java SE版本 | 代碼名稱 | 壽命終止(免費1 ) | 發布日期 |
---|---|---|---|
Java SE 9(早期訪問) | 沒有 | 未來 | 2017年7月27日 |
Java SE 8 | 蜘蛛 | 未來 | 2014年3月18日 |
Java SE 7 | 海豚 | 2015年4月14日 | 2011-07-28 |
Java SE 6 | 野馬 | 2013年4月16日 | 2006-12-23 |
Java SE 5 | 虎 | 2009-11-04 | 2004-10-04 |
Java SE 1.4 | 梅林 | 在2009-11-04之前 | 2002-02-06 |
Java SE 1.3 | 紅隼 | 在2009-11-04之前 | 2000年5月8日 |
Java SE 1.2 | 操場 | 在2009-11-04之前 | 1998-12-08 |
Java SE 1.1 | 沒有 | 在2009-11-04之前 | 1997年2月19日 |
Java SE 1.0 | 橡木 | 在2009-11-04之前 | 1996年1月21日 |
在文本編輯器或名為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
將錯誤'javac' is not recognized as an internal or external command, operable program or batch file.
相當常見的'javac' is not recognized as an internal or external command, operable program or batch file.
即使您已經安裝了JDK
並且能夠從IDE
ex運行該程序。 eclipse
等因為默認情況下路徑沒有添加到環境中。
如果你在windows上得到這個,要解決,首先嘗試瀏覽你的javac.exe
路徑,它最有可能在你的C:\Program Files\Java\jdk(version number)\bin
。然後嘗試用下面運行它。
$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java
以前當我們調用javac
它與上面的命令相同。只有在這種情況下,您的OS
才能知道javac
所在的位置。現在讓我們告訴它,這樣你就不必每次都輸入整個路徑。我們需要將它添加到PATH
要在Windows XP / Vista / PATH
編輯PATH
環境變量:
你不能撤消這個,所以要小心。首先將現有路徑複製到記事本。然後獲取精確的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應用程序。
這將輸出到您的控制台:
你好,世界!
您已經成功編寫並構建了第一個Java程序!
注意:為了識別Java命令( java
, javac
等),您需要確保:
您將需要使用JVM提供的編譯器( javac
)和執行程序( java
)。要找出已安裝的版本,請在命令行中輸入java -version
和javac -version
。程序的版本號將打印在終端中(例如1.8.0_73
)。
該“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
數據。