# 類別、物件

> 定義好在Java上物件導向的基本名詞，以及類別與物件的關係。

## 類別 class

類別定義物件的屬性、方法，利用類別可以產生物件。

## 物件 object

物件有它所屬的屬性及方法，在記憶體佔有空間，物件導向的概念就是把真實世界抽象化為許多的物件，物件之間彼此會交互運作。

## 定義類別

Java是純物件導向的程式語言，而物件透過類別產生的，因此我們最一開始要先定義好我們的類別。

定義類別的方法：

```java
class 類別名稱{
    // 定義屬性
    // 定義方法
}
```

這是最簡單的類別定義，我們試著把它想像成現實世界的情況：

```java
class 人類{
    姓名、年齡、身高;
    吃飯()、睡覺();
}
```

在上面的範例中，人類這個類別有三個屬性：姓名、年齡、身高，以及兩個方法：吃飯、睡覺。

## 創造物件

有了定義好的類別後，就可以來創造物件，創造物件分成兩個部份：

1. 宣告
2. 初始化

```java
類別名稱 物件名稱;              //宣告
物件名稱 = new 類別建構子();    //初始化
```

以上面定義好的人類類別來舉例：

```java
人類 小木;
小木 = new 人類();
```

也可以寫成一行，這也是一般人常見到的用法：

```java
人類 小木 = new 人類();
```

此時在記憶體中的配置如圖所示：

![](/files/-MLRnlCBB1IxUW2kthYP)

如果只有宣告物件，那只會在記憶體中配置一塊記憶體，叫做該物件的名稱。如上圖中左手邊的部份。

物件名稱透過 new 這個關鍵字，利用『建構子』進行初始化。會依照事先定義好的類別在記憶體中劃一塊空間，然後將該空間的記憶體地址回傳給物件名稱，此時物件名稱就與真正的類別定義好的欄位跟方法連結起來，就像上圖的紅色箭頭。

這樣就完成我們所預期的目標了：創造一個名叫小木的人類，具備有人類的所有屬性及方法。 這個動作也稱為物件的實體化(instantiated)。

一個實體(實例、instance)就是在記憶體中佔有空間的一個物件。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yubin551.gitbook.io/java-note/basic-object-oriented/class_object.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
