類,對象,變量和方法(1)


先從兩段代碼談起
這兩端代碼分別在兩個class中,前者姑且稱爲對象類,類名Cell,後者稱爲測試類,測試類包含main方法,類名CellGame;
Cell 中代碼以下數組

public class Cell {
    int row;
    int col; //成員變量
public void drop() { //無參無返回值方法
        row++;
    }
public void moveLeft(int d) { //有參無返回值方法
        col -= d;
    }
public String getCellInfo () { //無參有返回值(String類型)方法
        return row + "," + col;
    }
}測試

Annotation: 這段代碼很簡單,就是建了一個叫作Cell的類,類中封裝有兩個成員變量 row col,而後有三個方法。this

CellGame 中代碼以下對象

public class CellGame{
    public static void main(String[] args) { //main方法
        System.out.println("----------繪製Cell----------");
        Cell cell = new Cell(); //引用Cell類型中被封裝好的數據建立了一個Cell類型的對象,叫cell,該封裝被定義爲Cell類型,它就像一個盒子,能夠裝各類基本類型變量,屬於引用類型變量,簡稱引用。
        cell.row = 15; //訪問並給Cell中的成員變量賦值(初始化)
        cell.col = 6; //訪問並給Cell中的成員變量賦值(初始化)
        printCell(cell); //調用下面的public static void printCell(Cell cell)方法,並上傳參數cell,此處即上傳了row和col兩個成員變量,分別賦值爲15和6;
        System.out.println("----------Cell下落一行----------");
        cell.drop(); //調用Cell中的public void drop()方法
        printCell(cell);調用下面的public static void printCell(Cell cell)方法,並上傳參數cell,此處因爲調用了drop,row自增1,即賦值爲16;col不變;
        System.out.println("----------Cell左移一行----------");
        cell.moveLeft(1);調用Cell中的public void moveLeft(int d)方法,並上傳參數d賦值爲1;
        printCell(cell);調用下面的public static void printCell(Cell cell)方法,並上傳參數cell,此處因爲調用了moveLeft,col減1,即賦值爲5,row不變,仍爲16;
    }
    public static void printCell(Cell cell) { //一個有參方法,參數是Cell類型的變量 cell(這個cell稱爲局部變量,相對於類中的成員變量而言)
        int totalRow = 20;
        int totalCol = 10;
        for (int row = 0; row < totalRow; row++) {
            for (int col = 0; col < totalCol; col++) {
                if (cell.row == row && cell.col == col) {
                    System.out.print("* ");
                } else {
                    System.out.print("- ");
                }
            }
            System.out.println();
        }
    }
}作用域

Annotation: 這段代碼都有兩個方法,一個main方法,一個新建有參方法。其中main方法主要是給變量初始化並調用方法(行爲);get

這裏主要想說的是,main方法中的這行代碼:printCell(cell); //調用下面的public static void printCell(Cell cell)方法,並上傳參數cell,此處即上傳了row和col兩個成員變量,分別賦值爲15和6;io

這裏貼一段我如今常寫的調用有參方法代碼以下:class

public class Test {
    public static void main(String[] args) {
        B var = new B();
        var.C(5);        
    }
}
class B{
    int a;
    void C(int a){
        this.a = a;
        System.out.println(a);
    }
}
可是 例子中的兩段代碼大概是這麼個語法:
class B{  
B(){
}  
}變量

Annotation: 這段相似與上面的Cell類數據類型


public class Test {
    public static void main(String[] args) {
        B var = new B();
        C(var);
    }
    public static void C(B var) {
         int a = 5;
        System.out.println(a);    
    }
}

Annotation: 這段相似與上面的CellGame相似,它們調用有參方法的方式和我經常使用的並不同
這裏須要明確的是,目前老師還沒有講解class的構成,只是講了方法的5要素,方法中的修飾詞能夠出現重複,但類前面的public則沒法在一個文件中重複使用,即
一個文件中不能有兩個public類;
如今來好好分析這兩段代碼:
C(var)引用了C這個有參構造,這個構造特別的地方在於它的參數列表,以前寫的參數列表都是相似(int a)即一個整型 基本數據類型變量 a,可是此處的參數列表是 一個自定義爲B的類型 的 引用數據類型 變量 var;
而後var被初始化爲一個B類型的數組對象,即爲B類引用數據類型變量
而後vary做爲參數調用C(var)中的全部變量和行爲。即參數也能夠是引用,但調用方法上傳參數時參數也應該是引用,並且類型須要匹配。
這裏有意個須要注意的點,就是C(B var)方法中的修飾詞不能省略static;這個老師目前還還沒有提到方法中修飾詞的做用,所以暫時擱置;

問題還有許多,好比類的做用域能放什麼?;方法的做用域能放什麼?它們又不能放什麼?
目前只知其一,不知其二,知其一是新建類和測試類,測試類中放對象、變量和方法,新建類中則用於封裝對象變量和方法,方法內的變量只能在方法內用,或被調用,類中的成員變量則可讓其餘方法共用。
特別指出:
//via 筆記20170210
在方法中的每一個成員變量的前面,其實默認有個this.;
PS: . 以前是一個引用,this.就是指代當前對象的引用,哪一個對象調用這個方法,它就指帶這個對象.引用,也就是說,就整個代碼來講,this多是動態的指代不一樣的;

成員變量能夠跟局部變量同名 使用時是按照就近原則使用,這種狀況下this.就有用了: e.g. class Car{ String name;//成員變量 Car(String name//局部變量){ this.name = name; } } 這纔是標準寫法;

相關文章
相關標籤/搜索