1. 程式人生 > >java之類與物件

java之類與物件

一:類體

類的目的是抽象出一類事物共有的屬性和行為。

類是一種用於建立具體例項(物件)的資料型別。在eclipse中,類是放在包(也就是package hello;)與public class hello{}之間的。

類包含兩部分內容:

1.變數的宣告:用來儲存屬性的值(體現物件的屬性)。

2.方法的定義:方法可以對類中宣告的變數進行操作,及給出演算法(體現物件所具有的行為)。

1.成員變數

宣告變數部分所宣告的變數稱為成員變數域變數,其在整個類內都有效

成員變數除了包括基本型別外,還包括引用型別,即陣列、物件和介面。關於物件和介面後面再記錄,現在先講一下類的呼叫吧,我初次呼叫時總是出現這句話 java.lang.NullPointerException

(使用了空物件)。1字串變數未初始化;
2介面型別的物件沒有用具體的類初始化

出現 java.lang.NullPointerException 的原因一般有兩個:1.字串變數未初始化;2.介面型別的物件沒有用具體的類初始化。

class Factory {
    int [] a;
    Workman zhang ;

   // int [] a = new int [40];
  //  Workman zhang  = new Workman();
}
class Workman {
    int age;
    String name;
    int high; 
}
public class Lei {
    public static void main(String[] args) {
        Factory HD = new Factory();
        HD.a[0] = 1;
        HD.zhang.age = 19;
        HD.zhang.name = "HchildD";
        HD.zhang.high = 152;
        System.out.println(HD.a[0]);
        System.out.println(HD.zhang.name);
        System.out.println(HD.zhang.age);
        System.out.println(HD.zhang.high);
    }
}

例如,我剛開始這樣呼叫,在編譯時並沒有異常,可是執行時就出現了 java.lang.NullPointerException ,我也給他建立物件了啊(Factory HD = new Factory();),為什麼還是錯了,再回頭看看,我建立了兩個類,,那你呼叫另一個類是不是也應該使用new建立物件呢,試一下,將類Factory()中的Workman zhang ;改成Workman zhang = new Workman(); 還是空指標,再看一下,上次提到使用陣列也要為其建立物件的,我的陣列a是不是也要new以下,把int [] a;改成int [] a = new int(40);再執行一下,ok,沒問題了。當然,建立物件也可以在類Lei()做,在賦值之前先對其new一下也是可以的。不過我個人看來還是在定義陣列或類時就直接為其建立物件,不然忘記了後面找起來就比較麻煩了。

另外需要注意的是,在類中建立物件或者給變數賦值時要直接跟在宣告之後,若另起一行會顯示錯誤!

2.方法

方法的定義包括兩部分:方法頭和方法體。

方法頭:由型別名、名稱和名稱之後的一對小括號(可以帶有引數)構成。

方法體:由一對{},及其裡面的內容構成。內容包括區域性變數(在方法體中宣告的變數方法的引數叫做區域性變數)的宣告和Java語句。

class Factory {
    int getsum(int n){
        int sum = 0;
        for(int i = 1;i<n;i++){
            sum = sum+i;
        }
        return sum;
    }
}
public class Lei {
    public static void main(String[] args) {
        Factory HD = new Factory();
        int sum = HD.getsum(10);
        System.out.println(sum);
    }
}

儘管一個Java原始檔中可以有多個類,但仍然提倡在一個Java原始檔中只編寫一個類。 

二:構造方法與物件的建造

1.構造方法

構造方法是類中的一種特殊方法,當程式用類建立物件時需使用它的構造方法。構造方法的名字必須與他所在類的名字完全相同,而且沒有型別。允許在一個類中編寫若干個構造方法,但必須保證他們的引數不同(引數個數不同,或者個數相同但對應的某個引數型別不同)。例如:

class Factory {
    int x,y;
    Factory(int a,int b){
        x = a+b;
    }
    Factory(int b){
        y = b;
    }
}
public class Lei {
    public static void main(String[] args) {
        Factory HD = new Factory(2,4);
        System.out.println(HD.x);
        Factory H = new Factory(8);
        System.out.println(H.y);
    }
}

2.建立物件 

建立物件就是我上面所說的,為其分配變數的過程,也就是加一個new,否則,執行時是會出錯的。

注意的一點是,若類中定義了一個或多個構造方法,Java不提供預設的構造方法,也就是說,在上一個例子中,若是這樣定義HD: Factory HD = new Factory();是錯誤的!   

那麼,我想在這裡留一個問題,若一個類中,既有構造方法,又有普通方法,那如何去呼叫普通方法呢?

或許是無法在main中呼叫這個普通方法的,但是可以在構造方法中呼叫同一個類中的普通方法的。即直接在構造方法中新增普通方法的名字和括號或者直接賦值給某一個變數就可以了。例如:

class Factory {
    int x,h;
    int getsum(int n){
        int sum = 0;
        for(int i = 0;i<n;i++){
            sum = sum + i;
        }
        return sum;
    }
    Factory(int b){
        x = b;
        h = getsum(5);
    }
}