1. 程式人生 > 其它 >Java中的物件和類

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行顯示。