Java中的物件和類
技術標籤:java
一、物件
面向物件程式設計( OOP) 就是使用物件進行程式設計。 物件( object) 代表現實世界中可以明確標識的一個實體。例如:一個學生、一張桌子、一個圓、 一個按鈕甚至一筆貸款都可以看作是一個物件。
作是一個物件。 每個物件都有自己獨特的標識、 狀態和行為。
• 一個物件的狀態( state,也稱為特徵( property) 或屬性( attribute)) 是由資料域及其當前值來表示的。 例如: 圓物件具有一個數據域 radius, 它是描述圓的特徵的屬性。 矩形物件具有資料域 width 和 height, 它們都是描述矩形特徵的屬性。
• — 個物件的行為( behavior, 也稱為動作( action)) 是由方法定義的。 呼叫物件的一個方法就是要求物件完成一個動作。 例如: 可以為圓物件定義一個名為 getArea()和 getPerimeter() 的 方 法。 圓 對 象 可 以 調 用 getArea() 返 回其面積,呼叫getPerimeter() 方法返回它的周長。 還可以定義setRadius(radius) 方法。 圓物件可以呼叫這個方法來修改它的半徑。
二、類
1、使用一個通用類來定義同一型別的物件。 類是一個模板、 藍本或者說是合約, 用來定義物件的資料域以及方法。 物件是類的例項。 可以從一個類中建立多個例項。 建立例項的過程稱為例項化( instantiation)。 物件( object) 和例項( instance) 經常是可以互換的。
2、簡單來說,類就是定義相同型別物件的結構。
3、注意沒有main方法的類是不能執行的,含有main方法的類稱為主類
三、構造方法
1、Java 類使用變數定義資料域,使用方法定義動作。除此之外,類還提供了一種稱為構造方法( constructor) 的特殊型別的方法, 呼叫它可以建立一個新物件。
2、構造方法是一種特殊的方法。 它們有以下幾個特殊性:
• 構造方法必須具備和所在類相同的名字,一個類可以有多個構造方法。
• 構造方法沒有返回值型別, 甚至連 void 也沒有。
• 構造方法是在建立一個物件使用 new 操作符時呼叫的。 構造方法的作用是初始化物件。
• 每個類都有構造方法。通常, 一個類會提供一個沒有引數的構造方法( 例如: Circle()),如果沒有顯式地為類定義構造方法,Java 編譯器將會為該類提供一個預設構造方法。
3、資料域表示為:
dataFieldName: dataFieldType
構造方法可以表示為:
ClassName(parameterName: parameterType)
方法可以表示為:
methodNameCparameterName: parameterType): returnType
4、以Circle類為例
class Circle{
double radius;//資料域
//構造方法
Circle(){
radius=1;
}
Circle(double newRadius){
radius=newRadius;
}
//方法
double getArea() {
return radius*radius*Math.PI;
}
double getPerimeter() {
return 2*radius*Math.PI;
}
void setRadius(double newRadius) {
radius=newRadius;
}
}
強調:不能將關鍵詞void放在構造方法的前面
void Circle(){
}
以上的程式碼中Circle()是一個方法而不是構造方法,
四、建立物件
1、物件是根據類建立的,分為以下三步:
宣告:宣告一個物件,包括物件名稱和物件型別。
例項化:使用關鍵字 new 來建立一個物件。
初始化:使用 new 建立物件時,會呼叫構造方法初始化物件。
(注意:在建立一個物件的時候,至少要呼叫一個構造方法。)
格式:
ClassName object=new ClassName(agruments);
eg:
Circle circle1=new Circle();
//使用Circle類中定義的第一個構造方法建立一個名為circle1的Circle物件
Circle circle2=new Circle(25);
//使用Circle類中定義的第二個構造方法建立一個名為circle2的Circle物件
五、訪問物件的資料和方法
物件成員訪問操作符(點操作符):.
通過已建立的物件來訪問成員變數和成員方法
eg:
Circle circle=new Circle();//例項化物件
circle.radius;//引用circle的半徑
circle.getArea();//呼叫circle的getArea()方法
六、例項
public class TestCircle {
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle circle1=new Circle();
System.out.println("The area of the circle of radius"+circle1.radius+" is "+circle1.getArea());
Circle circle2=new Circle(25);
System.out.println("The area of the circle of radius"+circle2.radius+" is "+circle2.getArea());
Circle circle3=new Circle(125);
System.out.println("The area of the circle of radius"+circle3.radius+" is "+circle3.getArea());
circle2.radius=100;
System.out.println("The area of the circle of radius"+circle2.radius+" is "+circle2.getArea());
}
}
class Circle{
double radius;
Circle(){
radius=1;
}
Circle(double newRadius){
radius=newRadius;
}
double getArea() {
return radius*radius*Math.PI;
}
double getPerimeter() {
return 2*radius*Math.PI;
}
void setRadius(double newRadius) {
radius=newRadius;
}
}
輸出結果為:
程式包括兩個類。 其中第一個類 TestCircle 是主類。 它只是用來測試測試第二個類Circle。
可以把兩個類放在同一個檔案中, 但是檔案中只能有一個類是公共( public) 類。 此外,公共類必須與檔案同名。 因此, 檔名就應該是 TestCircle.java, 因為 TestCircle 是公共的。
主類包含 main 方法( 第 3 行),該方法建立三個物件。和建立陣列一樣, 使用 new 操作符從構造方法建立一個物件。 new Circle() 建立一個半徑為 1的物件(第 5 行), new Circle(25)建立一個半徑為 25 的物件( 第 7 行), 而 new Circle (125)建立一個半徑為125 的物件( 第 9 行)。
這三個物件( 通過 circle1、 circ1e2 和 circle3 來引用) 有不同的資料, 但是有相同的方法。 因此,可以使用 getArea()方法計算它們各自的面積。 可以分別使用 circle1.radius、circle2. radius, circle3. radius 來通過物件引用訪問資料域。 物件可以分別使用
circIe1.getArea()、 circle2.getArea()、 circle3.getArea() 來通過物件引用呼叫它的方法。
這三個物件是獨立的。circle2的半徑在第 11行改為 100。 這個物件的新半徑和新面積在第12行顯示。