前面寫著class的,是類別。

類別裡面有屬性跟方法。

屬性是一些直接定義出來的變數,例如一個名字叫a的整數型態資料,剛開始時設定他是5,整體寫來如下:

int a = 5;

↑這就是屬性,你之後若是把a叫出來,他就會是等於可以做加減運算的整數數字5。

方法就是裡面有些算是或者有些東西,你叫了方法就好像是拿了一個工具一樣。例如有個方法,呼叫他時可能就會列印「你好」,就好像是拿到一個會自己說話的工具。又或者有的方法是可以幫你計算兩個數字相加之類的,就像是拿到一台只會加法的計算機。

class是一個類別,裡面會裝著各種屬性跟方法,就像一個裝著各種用具跟資料的工具箱一樣,你呼叫他就像是把工具箱拿出來,但你要使用的是工具(方法、屬性),而不是那個箱子。

 

又或者可以把類別視為一個總稱,例如人類。

屬性就是人類的特性,例如兩條腿、兩顆眼睛。

方法就是人類可以做的事情,例如吃喝玩樂跑步睡覺。

但你無法叫「人類」去做事情,只能叫「個人」去做事情,這個「個人」就是實體化(new)

也就是你希望有人幫你做事情時,你得先生出一個人(實體),然後才能叫他去幫你做事情。(對電腦來說則是撥出一塊記憶體放東西)

而這個「呼叫」(產生實體)的方式如下:

Human mike = new Human();

等號的右邊new Human字如其意「產生一個新的人類(實體)」

等號的左邊幫這個新生出來的人類取名字:(把右邊產生的人類)取名叫mike,並且告訴電腦這傢伙的類別是人類(這部分就像上面舉的a一樣,你得告訴電腦a是一個整數,也得告訴他mike是個人類)

於是電腦知道mike是人類了,就可以去人類的類別裡看看人類會做甚麼事情、有甚麼特點(方法跟屬性)


package tw.xxx.xxx.copy.oop;

 

public class Order {

//看到關鍵字class,所以Order是一個類別,底下可以放屬性跟方法

//現在有一大疊訂購單在那,要等我真的要用到時才會抽出一張來用(實體化)

  

   long orderNumber= 123456789000000L;//這是一個屬性,是一個很長的數字,所已宣告形態不是int而是long,之後你如果有Order的實體就可以用他

  

   public void add(){//這是一個方法,你之後若叫出一個Order的實體(拿出一張真正的訂購單),就可以叫出這個方法(加東西到訂單裡),他會列印以下文字

      System.out.println("加入新東西到購物單裡,騙你的。");

   }

   public void delete(){//這也是一個之後可以呼叫的方法(把訂單裡的東西刪除),會列印文字

      System.out.println("刪除購物單裡的舊東西,騙你的。");

   }

  

   public static void main(String[] args) {

      Order myOrder = new Order();

      //(等號左邊)產生了一個真正的、屬於你的訂單

      //(等號右邊)你幫訂單取了一個名字叫myOrder,並且告訴電腦myOrder這個東西是個訂單

      //於是電腦知道你有訂單,有adddelete兩個方法,且還有一個訂單號碼orderNumber(屬性)

      myOrder.add();

      myOrder.delete();

      //利用(變數)名稱.方法來呼叫方法

      for(int i=0;i<5;i++){

          System.out.println(myOrder.orderNumber+i);//一樣用「名稱.屬性」的方式來把數字叫出來,並做出計算

      }

   }

}


加入新東西到購物單裡,騙你的。
刪除購物單裡的舊東西,騙你的。
123456789000000
123456789000001
123456789000002
123456789000003
123456789000004



static 是一種類別變數(也叫靜態變數),他雖然長在類別裡,但是從一出生就被分配好記憶體了,也就是一出生就有實體了,所以不需要先new再操作

但是還是得讓電腦知道他哪來的,所以使用方式是「類別名稱 .  方法」或者「類別名稱 .  屬性」

package tw.xxx.xxx.copy.oop;

 

class TestForStatic{

   static int num=123;//可以直接使用的屬性

   static void printString(){//可以直接使用的方法

      System.out.println("呼叫成功");

   }

}

 

public class CallTestStaticEx1 {

 

   public static void main(String[] args) {

      System.out.println(TestForStatic.num);//可以直接用類別.屬性名稱呼叫

      TestForStatic.printString();//同上

   }

}


123
呼叫成功



變數(屬性)有分幾種,

一種在類別裡但不在方法裡,稱為實體變數,跟類別共存亡,類別被new了他才會出現

一種是靜態變數(類別變數)如上面的例子,你把它寫下來時他就有記憶體可以放了,所以可以直接叫他,同樣的也有不用new就存在的靜態方法,關鍵字是static

上面兩種都屬於全域變數。

還有一種變數存在在方法裡,你new類別時他不在,你把呼叫方法時他才出現,並且跟方法共存亡,他叫區域變數

package tw.XXX.myfirstproject.oop;

 

public class TestVariableScopeEx1 {

   int a=1;//instance(實體變數),位於類別之下,方法之上

   //變數 跟物件一起(new才行產生,所以得先=new TestVariableScopeEx1才能用a)

   static int b=2;//static變數 class一起,屬於類別非物件(不用先用new,可直接使用b)

  

   public void f1(int c){//clocal變數,跟方法f1一起出現一起消失

      int d=4;//dlocal變數,跟方法一起出現一起消失

     

      System.out.println("a="+a);

      System.out.println("b="+b);

      System.out.println("c="+c);

      System.out.println("d="+d);

      System.out.println("---------以上屬於f1方法--------");

     

   }

  

   public static void f2(int e){

     //注意這行有static,上面f1沒有,所以f2這個方法可以直接使用,f1不行(f1new,產生實體)

      //System.out.println("a="+a);//a為實體變數,要new過才能用,但f2可以直接使用,所以會compile error

      System.out.println("b="+b);

      //System.out.println("c="+c);//compile error  cdf1的區域變數,無法使用

      //System.out.println("d="+d);//compile error

      System.out.println(e);

      System.out.println("---------以上屬於f2方法---------");

   }

 

   public static void main(String[] args) {

   f2(6);//f2是類別變數,可直接使用

      //f2static變數,不需要先呼叫,但f1就需要

      TestVariableScopeEx1 scope=new TestVariableScopeEx1();

      //呼叫,產生實體

      scope.f1(3);

      scope.f2(5);//其實這樣叫f2也行,但是電腦會警告(?)

      TestVariableScopeEx1.f2(6);//f2也可以用類別名稱來呼叫

   }

}


b=2
6
---------以上屬於f2方法---------f2(6)
a=1
b=2
c=3
d=4
---------以上屬於f1方法--------scope.f1(3)
b=2
5
---------以上屬於f2方法---------f2(5)
b=2
6
---------以上屬於f2方法---------TestVariableScopeEx1.f(6)




 

arrow
arrow
    全站熱搜

    乙方 發表在 痞客邦 留言(0) 人氣()