一個Java程式可以認為是一系列物件的集合,而這些物件透過呼叫彼此的方法來協同工作。以下簡單介紹下類別、物件、方法和實例變數的概念。
物件:物件是類別的一個實例,有狀態和行為。例如,一隻狗是一個對象,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
類別:類別是一個模板,它描述一類物件的行為和狀態。
方法:方法就是行為,一個類別可以有很多方法。邏輯運算、資料修改以及所有動作都是在方法中完成的。
實例變數:每個物件都有獨特的實例變量,而物件的狀態則由這些實例變數的值決定。
下面看一個簡單的Java 程序,它將列印字串Hello World
public class MyFirstJavaProgram {
/* 第一個Java程式.
* 它將列印字串 Hello World
*/
public static void main(String []args) {
System.out.println("Hello World"); // 印出 Hello World
}
}
以下將逐步介紹如何儲存、編譯以及執行這個程式:
打開Notepad,把上面的程式碼加進去;
把檔案名稱儲存為:MyFirstJavaProgram.java;
開啟cmd指令窗口,進入目標檔案所在的位置,假設是C:
在命令列視窗鍵入javac MyFirstJavaProgram.java 按下enter 鍵編譯程式碼。如果程式碼沒有錯誤,cmd 命令提示字元會進入下一行。 (假設環境變數都設定好了)。
再鍵入java MyFirstJavaProgram 按Enter 鍵就可以執行程式了
你將會在視窗看到Hello World
C : > javac MyFirstJavaProgram.java
C : > java MyFirstJavaProgram
Hello World
編寫Java程式時,應注意以下幾點:
大小寫敏感:Java是大小寫敏感的,這表示標識符Hello與hello是不同的。
類別名稱:對於所有的類別來說,類別名稱的首字母應該要大寫。如果類別名稱由若干單字組成,那麼每個單字的首字母應該要大寫,例如MyFirstJavaClass 。
方法名:所有的方法名都應該以小寫字母開頭。如果方法名含有若干單詞,則後面的每個單字首字母大寫。
來源檔案名稱:來源檔案名稱必須和類別名稱相同。當儲存檔案的時候,你應該使用類別名稱作為檔案名稱儲存(切記Java是大小寫敏感的),檔案名稱的後綴為.java。 (如果檔案名稱和類別名稱不相同則會導致編譯錯誤)。
主方法入口:所有的Java 程式由public static void main(String [] args)
方法開始執行。
Java所有的組成部分都需要名字。類別名稱、變數名以及方法名都被稱為標識符。
關於Java標識符,有以下幾點要注意:
所有的識別碼都應該以字母(AZ或az),美元符($)、或底線(_)開始
首字之後可以是字母(AZ 或az),美元符($)、底線(_)或數字的任何字元組合
關鍵字不能用作標識符
標識符是大小寫敏感的
合法標識符舉例:age、$salary、_value、__1_value
非法識別符舉例:123abc、-salary
像其他語言一樣,Java可以使用修飾符來修飾類別中方法和屬性。主要有兩類修飾符:
存取控制修飾符: default, public , protected, private
非存取控制修飾符: final, abstract, static,synchronized 和volatile
在後面的章節中我們會深入討論Java修飾符。
Java中主要有以下幾種類型的變數
局部變數
類別變數(靜態變數)
成員變數(非靜態變數)
數組是儲存在堆上的對象,可以保存多個同類型變數。在後面的章節中,我們將會學到如何宣告、構造、初始化一個陣列。
Java 5.0引入了枚舉,枚舉限制變數只能是預先設定好的值。使用枚舉可以減少程式碼中的bug 。
例如,我們為果汁店設計一個程序,它將限制果汁為小杯、中盃、大杯。這意味著它不允許顧客點除了這三種尺寸外的果汁。
class FreshJuice {
enum FreshJuiceSize{ SMALL, MEDIUM, LARGE }
FreshJuiceSize size;
}
public class FreshJuiceTest {
public static void main(String args[]){
FreshJuice juice = new FreshJuice();
juice.size = FreshJuice. FreshJuiceSize.MEDIUM ;
}
}
注意:枚舉可以單獨聲明或聲明在類別裡面。方法、變數、建構子也可以在枚舉中定義。
下面列出了Java保留字。這些保留字不能用於常數、變數、和任何識別碼的名稱。
關鍵字 | 描述 |
---|---|
abstract | 抽象方法,抽象類別的修飾符 |
assert | 斷言條件是否滿足 |
boolean | 布林資料類型 |
break | 跳出循環或label程式碼段 |
byte | 8-bit 有符號資料型 |
case | switch語句的一個條件 |
catch | 和try搭配捕捉異常訊息 |
char | 16-bit Unicode字元資料類型 |
class | 定義類別 |
const | 未使用 |
continue | 不執行循環體剩餘部分 |
default | switch語句中的預設分支 |
do | 循環語句,循環體至少會執行一次 |
double | 64-bit雙精度浮點數 |
else | if條件不成立時執行的分支 |
enum | 枚舉類型 |
extends | 表示一個類別是另一個類別的子類 |
final | 表示一個值在初始化之後就不能再改變了表示方法不能被重寫,或一個類別不能有子類 |
finally | 為了完成執行的程式碼而設計的,主要是為了程式的健全性和完整性,無論有沒有異常發生都執行程式碼。 |
float | 32-bit單精度浮點數 |
for | for迴圈語句 |
goto | 未使用 |
if | 條件語句 |
implements | 表示一個類別實作了接口 |
import | 導入類別 |
instanceof | 測試一個物件是否是某個類別的實例 |
int | 32位元整數數 |
interface | 接口,一種抽象的類型,只有方法和常數的定義 |
long | 64位元整數數 |
native | 表示方法用非java程式碼實現 |
new | 指派新的類別實例 |
package | 一系列相關類別組成一個包 |
private | 表示私有字段,或方法等,只能從類別內部存取 |
protected | 表示欄位只能透過類別或其子類存取子類別或是同一個套件內的其他類 |
public | 表示共有屬性或方法 |
return | 方法回傳值 |
short | 16位數字 |
static | 表示在類別層級定義,所有實例共享的 |
strictfp | 浮點數比較使用嚴格的規則 |
super | 表示基底類 |
switch | 選擇語句 |
synchronized | 表示同一時間只能由一個執行緒存取的程式碼區塊 |
this | 表示呼叫當前實例或呼叫另一個建構函數 |
throw | 拋出例外 |
throws | 定義方法可能拋出的例外 |
transient | 修飾不要序列化的字段 |
try | 表示程式碼區塊要做異常處理或和finally配合表示是否拋出異常都執行finally中的程式碼 |
void | 標記方法不傳回任何值 |
volatile | 標記欄位可能會被多個執行緒同時訪問,而不做同步 |
while | while循環 |
類似C/C++,Java也支援單行以及多行註解。註解中的字元將被Java編譯器忽略。
public class MyFirstJavaProgram{
/* 這是第一個Java程式 *它將列印Hello World
* 這是一個多行註解的範例 */
public static void main(String []args){
// 這是單行註解的範例 /* 這個也是單行註解的範例 */
System.out.println("Hello World");
}
}
空白行,或是只有註解的行,Java編譯器都會忽略掉。
在Java中,一個類別可以由其他類別派生。如果你要建立一個類,而且已經存在一個類別具有你所需要的屬性或方法,那麼你可以將新建立的類別繼承該類別。
利用繼承的方法,可以重複使用已存在類別的方法和屬性,而不用重寫這些程式碼。被繼承的類別稱為超類別(super class),衍生類別稱為子類別(subclass)。
在Java中,介面可理解為物件間相互通訊的協定。介面在繼承中扮演著很重要的角色。
介面只定義派生要用到的方法,但是方法的具體實作完全取決於衍生類別。
下一節介紹Java程式設計中的類別和物件。之後你將會對Java中的類別和物件有更清楚的認識。