1. 程式人生 > >Java入門 面向物件第一天

Java入門 面向物件第一天

面向物件

  人為抽象的一種程式設計模型,在理解面向物件的程式碼時要按照抽象的模型來理解,不能只從程式碼字面來理解複雜的問題,學會拆分成一個一個獨立的小問題,通過解決每一個小問題,最後解決一個大問題

  類是事物,演算法,邏輯,概念等的抽象,用來封裝這型別相關的資料和方法程式碼,封裝成獨立元件,可以把類理解成模板,或者圖紙.在建立類物件時就相當於按著這個模板來建立

物件

  從類建立來的具體例項,每個例項佔用獨立的記憶體空間,儲存各自的屬性資料,例項可以單獨控制,讓例項去執行指定方法中的程式碼.

引用

  儲存一個例項物件的記憶體地址用引用變數,將地址值賦值給變數,用變數去呼叫一個例項,可以理解成遙控,只需要用引用去操作就行了.

這裡以一個例子來了解:

專案:day0101_士兵 

類:day0101.Test1類和Solder類

Solder類程式碼:

 1 package day0101;
 2 
 3  
 4 
 5 import java.util.Random;
 6 
 7  
 8 
 9 /*
10 
11  * 封裝
12 
13  * 相關資料,邏輯運算方法,
14 
15  * 封裝成一個"類"元件
16 
17  */
18 
19 public class Solder {
20 
21 //成員變數
22 
23 int id; //預設值0
24 
25 int blood = 100;
26 
27 
28 //成員方法
29 
30 public void go() {
31 
32     System.out.println(this.id+"號士兵前進");
33 
34 }
35 
36 public void attack() {
37 
38     if (blood == 0) {
39 
40         System.out.println(
41 
42          "這是"+id+"號士兵的屍體");
43 
44         return;//方法到此結束
45 
46     }
47 
48     System.out.println(id+"號士兵進攻");
49 
50     //模擬受到傷害,血量減少
51 
52     //產生一個隨機減血量
53 
54     int d = new Random().nextInt(10);
55 
56     blood -= d;//血量減少
57 
58     if (blood < 0) {//如果血量變成負數,重置成0
59 
60         blood = 0;
61 
62     }
63 
64     System.out.println("血量: "+blood);
65 
66     if (blood == 0) {
67 
68         System.out.println(id+"號士兵陣亡");
69 
70     }
71 
72 }
73 
74 }

Test1類程式碼:

package day0101;


public class Test1 {

public static void main(String[] args) {

    //新建 Soldier 例項

    //再把它的記憶體地址值,儲存到 s1 變數

    /* s1 = {

     *    id: 0,

     *    blood: 100

     * }

     */

    Solder s1 = new Solder();

    /* s2 = {

     *    id: 0,

     *    blood: 100

     * }

     */

    Solder s2 = new Solder();

    //用s1變數找到士兵的記憶體空間,訪問它的id變數

    s1.id = 9527;

    s2.id = 9528;

    //用s1變數找到士兵的記憶體空間,讓它去執行go()方法程式碼

    s1.go();

    s2.go();

    s2.attack();

    s1.attack();
  }

}

構造方法

新建例項時,執行的一種特殊方法   new Solder()

Java的類中必須有構造方法,如果自己不定義構造方法,編譯器會新增預設的空構造方法

class Solder{
      public Solder(){
         
    }      
}

上面的程式碼是自己新增的一個空構造方法,當你不新增是,編譯器也是自動生成空構造方法,什麼也不做

構造方法的作用

  建立一個例項之後,立即執行的一個特殊方法,構造方法中的程式碼可以任意編寫,完成任意功能或執行任意運算,構造方法一般的作用是給成員變數賦值.成員變數是定義在類中的變數.

this用法

this.id   

id是成員變數,當用建構函式給成員變數賦值時:

public class A{
     int id;  
    public A(int id){
         this.id=id;
   }  
}

this.id表示的是成員變數id.

this(a,b)

a,b是括號中的引數,this(a,b)表示呼叫引數為兩個構造方法

public class A{
     int id;  
     int a;
    public A(int id){
      this(id,5)   
   }  
    public A(int id,int a){
        this.id=id;
        this.a=a ;
    }  
}

this()要在程式碼的首