1. 程式人生 > >java:物件和類

java:物件和類

物件的屬性和方法

Java中將現實物件中的資訊稱為屬性(也叫全域性變數),將現實物件中的功能稱為方法

類:Java語言把一組物件中相同屬性和方法抽象到一個Java原始檔就形成了類。
定義一個類的步驟:1、定義類名;2、定義類的屬性;3、定義類的方法

類名的命名規則:
    1.符合識別符號命名規範;
    2.類名必須使用英文字母,首字母應大寫,如Hello、People等。
    3.當類名由多個”單詞”組合而成時,每個單詞的首字母都要大寫。如 Time、Game、Dog、DateUtil等。

例子:
public class Student {
//定義屬性
String id; //學號
String name; //學生姓名
String grade; //學生年級

    //定義讀書方法
    public void readBook() {
        System.out.println(name + “正在讀書……");
    }
    //定義寫作業方法
    public void doHomework() {
        System.out.println(this.name + “正在寫作業……");
    }
}

物件的建立和使用

通過new關鍵字建立物件。建立物件又稱例項化物件。
Student student = new Student();

使用”.”運算子訪問物件的屬性和方法。
student.屬性 = 值;
student.方法名();

類與物件

類是建立物件的模板,確定物件將會擁有的屬性和方法。
類是物件的抽象化;物件是類的具體化。
類是一種資料型別,是物件的資料型別(不同於int等基本型別:類具有方法)

面向物件程式語言以物件為中心,以訊息為驅動

方法用於定義類的某種行為(或功能),其語法結構如下:

    訪問控制符 [修飾符] 返回值型別 方法名( [引數] )  {
               //方法體
    }

例子:

public void sayHello(){
        System.out.println("Hello");
    }   
protected final void show(int x){
        System.out.println(x);
}

private static int add(int x, int y){
    return x+y;
}

訪問控制符

方法中的訪問控制符用於限制方法在其他類中的使用範圍。
訪問控制符分為四種:public、protected、友好的和private

修飾符

static修飾符用於限制方法的呼叫方式
1、static修飾的方法可以直接使用類名呼叫也可以使用類建立的物件呼叫
2、非static修飾的方法只能使用類建立的物件呼叫

返回值型別

1.如果方法沒有返回值,需要用void表示
2.方法返回基本資料型別的資料,則返回值型別必須是返回資料所屬的資料型別或者精度更高的資料型別(針對於數值型別的資料)。

動態引數

public class Test {

    public static void print(int... numbers) {
        for (int number : numbers) {
            System.out.println(number);
        }
    }   
    public static void main(String[] args) {
        print(1, 2, 3, 4, 5);

注意:
1、動態引數實質為陣列;
2、動態引數必須位於引數列表的最後;
3、一個方法只能有一個動態引數;

程式碼塊
Java中程式碼塊分為靜態程式碼塊和非靜態程式碼塊
靜態程式碼塊只在類載入時執行一次;

public class Test {

static{
    System.out.println("靜態程式碼塊");
}
public static void main(String[] args) {        
}

}

非靜態程式碼塊每次建立物件時都會執行;

public class Test {

{
    System.out.println("非靜態程式碼塊");
}
public static void main(String[] args) {
    new Test();
    new Test();
}

}

成員變數:直接在類中宣告的變數叫成員變數(又稱全域性變數)

1.如果未對成員變數設定初始值,則系統會根據成員變數的型別自動分配初始值:int分配初始值0、boolean分配初始值false,而自定義型別則分配初始值null。
2.成員變數定義後,其作用域是其所在的整個類
3.成員變數的定義沒有先後順序,但是最好將成員變數的定義集中在類的頂部。

區域性變數:方法中的引數、方法中定義的變數和程式碼塊中定義的變數統稱為區域性變數(區域性變數的作用域範圍從定義的位置開始到其所在語句塊結束)

1.如果區域性變數的名字與全域性變數的名字相同,則在區域性變數的作用範圍內全域性變數被隱藏,即這個全域性變數在同名區域性變數所在方法內暫時失效。
2.如果在區域性變數的作用域範圍內訪問該成員變數,則必須使用關鍵字this來引用成員變數
3.區域性變數在使用以前必須顯式初始化或賦值,區域性變數沒有預設值
4.宣告區域性變數時,資料型別前除final外不允許有其他關鍵字,即其定義格式為: [final] 資料型別 變數名 = 初始值

關鍵字static:
方法:

static修飾的方法稱為類方法(又稱靜態方法):此種方法被所有該類的物件共享; JVM載入類時為其分配入口地址;可以由所在類建立的物件或類名來呼叫,推薦使用類名直接呼叫;
沒有static修飾的方法稱為例項方法(又稱非靜態方法):此種方法對所有該類的物件都是獨立的; JVM執行建立物件程式碼時為其分配入口地址並且只分配一次;只能使用物件來呼叫;

程式碼塊

static修飾的程式碼塊稱為靜態程式碼塊:JVM載入類時該型別程式碼塊執行並且只執行一次;
沒有static修飾的程式碼塊稱為非靜態程式碼塊:JVM執行建立物件程式碼時執行並且每建立一個物件執行一次;

注意

靜態方法不能直接呼叫非靜態方法,可以間接通過建立該方法(指非靜態方法)所在類的物件來呼叫;非靜態方法可以直接呼叫靜態方法;
靜態程式碼塊不能直接呼叫非靜態方法;可以間接通過建立該方法(指非靜態方法)所在類的物件來呼叫;靜態程式碼塊可以直接呼叫靜態方法;
靜態方法或者靜態程式碼塊不能直接使用非靜態成員變數,可以間接通過建立該成員變數的物件來呼叫;靜態方法或者靜態程式碼塊只能直接使用靜態變數;

構造方法

構造方法之間可以通過this實現呼叫,但必須將呼叫建構函式程式碼寫在有效程式碼的第一行

this關鍵字