<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>初始值 + 可先宣告在給值,如: (O)int i = 10; (O)int i; i=10; ### 實體變數(又稱:成員變數、屬性變數) + 宣告在方法之外、類別之內,且<font id="sp">無static修飾子</font>(有static的稱為類別變數、靜態變數) + JAVA會提供初始值 + 若要給初始值,需在宣告的同時一起給值,不能先宣告後給值,如: (O)double price = 1.5; (X)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 } } ```