---
# System prepended metadata

title: CH07-物件(2020/06/11)

---

<style>
img{border:1px solid gray;}

#sp{color:#CC0000;}

#imp{color:#CC0000; 
    font-style:bold; 
    background-color:#FFFFBB;}
    
#imp2{color:#5500FF; 
    font-style:bold; 
    background-color:#FFFFBB;}
    
#tit{color:white; 
    font-style:bold; 
    
</style>

# CH07-物件(2020/06/11)
+ 所見即物件
  + 特徵：用變數來代表物件的特徵、屬性
  + 行為(功能)
+ <font id="sp">類別是物件的資料型態(type)，一個物件是由某類別產生的一個實體 (instance)</font>
+ <font id="sp">先設計類別、再有物件</font>
+ 使用物件一律透過【<font id="sp"><b>.</b></font>】這個符號
+ 類別(class)可做為資料類型


## 物件參考變數
+ 宣告方式：<物件名稱> <變數名稱>
```java=1
Pen myPen = new Pen();
```

## 變數
### 區域變數（又稱：方法變數）
+ 宣告在方法內
+ JAVA<font id="sp">不會提供</font>初始值
+ 可先宣告在給值，如：
    （Ｏ）int i = 10;
    （Ｏ）int i;　i=10;
### 實體變數（又稱：成員變數、屬性變數）
+ 宣告在方法之外、類別之內，且<font id="sp">無static修飾子</font>（有static的稱為類別變數、靜態變數）
+ JAVA會提供初始值
+ 若要給初始值，需在宣告的同時一起給值，不能先宣告後給值，如：
    （Ｏ）double price = 1.5;
    （Ｘ）double price;　price = 1.5;
    
```java=1
public class Pen {
	
    //實體變數，需透過物件參考變數進行操作
	String brand;
	double price;
    
	//方法成員，需透過物件參考變數進行呼叫
	public void showInfo() {
            //區域變數
            int i = 10;
            System.out.println("牌子為：" + brand);
            System.out.println("價格為：" + price);
	}
}
```


### Java變數整理.xlsx

|	宣告|	初始值|	存取|	生命週期(scope)|
|-------- | -------- | -------- |-------- |
|區域變數(方法變數)|	宣告在方法裡面, 或是流程控制的區域裡面|	沒有預設初始值, 存取之前, 程式設計師要主動給予初始值|	只能在自己所宣告的區域內使用, 不能跨區直接使用|	如同名稱, 跟著自己所屬的區域或方法, 執行時存活, 當該區域或方法執行完畢, 此變數即被釋放|
實體變數|	宣告在方法外, 類別裡面, 而且沒有static關鍵字|	宣告後, Java會自動給予預設初始值, 根據資料型別有不同的初始值|	<font color="red">只要在同個類別裡</font>, 可以跨不同方法使用(該方法不可以有static關鍵字), 透過物件參考變數存取|	如同名稱, 跟著所屬的物件實體創建而存在, 只要該物件實體還在, 此實體變數就會隨著物件存活著, 直到該物件消失才結束|

### 實體變數的預設初始值
|JAVA語言的資料型別(2大類)|變數型態|初始值|
|------ |------ | ------ |
|基本資料型別-1|byte|0|
|基本資料型別-2|short|0|
|基本資料型別-3|int|0|
|基本資料型別-4|long|0L|
|基本資料型別-5|float|0.0F|
|基本資料型別-6|double|0.0(D)|
|基本資料型別-7|boolean|<font id="sp">false</font>|
|基本資料型別-8|char|‘\u0000’|
|類別資料型別|類別型態|<font id="sp">null(空值)</font>|


### 實體變數、區域變數的差別
+ 參考pen.java、testPen.java
  + 顯示結果：
    + 第1次：
    區域變數為：1
    實體變數為：1
    + 第2次：
    區域變數為：1
    實體變數為：2
    + 因為myPen這個實體還存在，所以實體變數會持續+1
``` java=1
public class Pen {
	//實體變數(又稱: 成員變數 , 屬性變數)，需透過物件參考變數進行操作
	String brand;
	double price;
	
	int cnt;	
	
	public void showInfo2() {
		int i = 0;
		System.out.println("區域變數為：" + ++i);
		System.out.println("實體變數為：" + ++cnt);
	}
}

public class PenTest {
	public static void main(String[] args) {
		Pen myPen = new Pen();		
		myPen.showInfo2(); //第1次執行時為1 1
		myPen.showInfo2(); //第2次執行時為1 2
	}
}

```
