類別
修飾子 class className{
}
類別好比建立物件的藍圖,每次在建立物件時只要照著藍圖即可生產
一個類別可以建立多個物件
這就像是蓋房子的藍圖一樣,藍圖只需要一張,但可以建造好幾棟一模一樣的房子
※修飾子 在此僅有public final abstract
main方法
public static void main(String[] args) {
}
Java這麼多類別裡只要有這樣main方法,就是可執行的應用程式類別
JVM會從這個方法開始執行
public static void 這三個都是修飾子,修飾子沒有先後順序的問題
所以也可以寫成
public void static main(String[] xyz) {}
static public void main(String[] abc) {}
以下做一小段範例
由A做為程式進入點,執行A時會建立B物件
//A.java
public class A {
public static void main(String[] xyz) {
B x = new B();
System.out.println(x.name);
}
}
//B.java
public class B {
public String name = 'Dodo';
}
C:\>javac A.java
C:\>java A
Dodo
很有趣的,雖然我們只有執行類別A,但會出現A.class和B.class
之前我們說過成員變數與區域變數的差別
那麼猜猜下面這段範例是否可執行?
public class Demo {
public int x;
public static void main(String[] args) {
System.out.println(x);
}
}
x是成員變數,使用前不用先給值所以沒問題
但還記得成員變數是在「物件建立」時才產生的嗎!?
所以Demo必須先new起來後x才會被存放在HEAP Memory,因此這裡編譯時就失敗了!
再來一段範例猜猜是否可以執行?
public class Demo {
public static void main(String[] args) {
int j = 0;
int i;
if (j == 0) {
i = 1;
} else if (j != 0) {
i = 2;
}
System.out.println(i);
}
}
雖然此段看起來在使用i這區域變數時好似有給值,但Compiler沒有執行程式
它的作用是檢查程式是否有出錯
從電腦程式角度去看,if不一定會被執行,既然不一定執行那後面又一定要用到i變數
所以編譯依然失敗
方法
|-------------------簽名-----------------|
修飾子(modifier) 回傳型態(return_type) 方法名稱(methodName) ( [參數] ) { }
|--------------------------------------------- 宣告 ------------------------------------| |----本體----|
[參數]可省略
1. public void sayHello (){
System.out.println("Hi~");
}
2. public void sayHello(String name){
System.out.println("Hi " + name);
}
3. public String sayHello(String name){
String hello = "Hi " + name;
return hello;
}
第一個最簡易的方法,呼叫時不需要帶任何值亦不會回傳值
第二個方法呼叫時需帶name的字串輸入,但不會有回傳值
第三個方法呼叫時需帶name的字串輸入,會有一個字串的回傳
※void本身就是一種資料型態,但它本身只存在宣告上,即表示沒有回傳的資料
重載方法Overloading Method
以上三個方法名字相同都叫sayHello,但可以放在同一個類別下!
辨識它的不同就是「簽名」必須不一樣
所以第二和第三兩個簽名方式為:sayHello(String name)
一模一樣,就不能放在同一個類別下!這種方法名稱一樣但簽名不同的方式就叫重載
public class Demo {
public void sayHello (){
}
public void sayHello (String name, int idnumber){
}
public void sayHello (int idnumber, String name){
}
}
以上三種方式的簽名(參數主要是以型態做分別)都不一樣,但是是可執行的
這種方式常用在例如轉型int(x),即x會變成int資料型態
但它原來是那一種型態?因此使用重載就不需要刻意知道它是由什麼型態轉來
沒有留言:
張貼留言