[Java]物件導向觀念(2)建構子與實體成員

建構子:在物件實體化(new新物件)時第四步驟被執行(物件建立以前),建構子名稱跟屬性相同,API有記載建構子極其多載( 建構子的多載:同類別同名稱的建構子內部處理不同datatype的參數),若未寫出則是預設建構子(內為空)。

[Modifier] classname([Parameter_Lists]){

statement; }

Modifier修飾字:public protected default private

屬性Field: 在Java類別中 ,類別中方法之外宣告的變數。

方法Method:在Java類別中,實際進行運算語法的區域 。

[Modifier] return_type identifier([Parameter_list]){

statement; (運算語法書寫區域)

[return value]; 遇到return=方法結束

}

return type和return value必相同,若return type為 void 則無 return value

return type為 八大基本型別 void 跟reference type

Parameter_list 參數列 為使用方法時需要帶入的參數

方法的使用方法:

實體方法(instance method): 物件參考變數名稱 .方法名稱();

靜態方法(static method):方法的類別名稱.方法名稱();

方法的多載:同類別內同名稱的方法處理不同datatype的參數

實體成員 instance member: 為同一類別中的屬性和方法,可以直接互相呼叫 。

屬性v.s.方法:有括號回傳值的是方法,反之為屬性 。

方法v.s.建構子:

方法有回傳值(void或其他類型),建構子必不回傳(沒有設定回傳值或類型) 。

方法在物件成立之後才能使用,建構子執行於物件建好前。

[Java]物件導向觀念(1)物件與類別關係

Object 物件為物件導向觀念基礎,一個Object可以具有屬性(Attribute/Field)和方法(Behavior/Method),物件為獨立存在,在Java中,經過實體化(instance)可以建立物件。

類別Class :當多個具有相同屬性及行為的物件集合在一起分類。

在統一塑模語言UML ( Uniform Modeling Language ) 類別Person如此表示

「UML classname java」的圖片搜尋結果

屬性Field: 在Java類別中 ,類別中方法之外宣告的變數。

[modifier] type fieldname ; [=value;]

方法Method:在Java類別中,實際進行運算語法的區域 。

實體化Instance:

Classname objectname = new Classname();

類別 物件名稱 = new 該類別所具有的建構子

new:向記憶體要一塊空間(住址) 0x1234…

new的步驟:1.記憶體分配 2.屬性隱含預設初始化 3. 屬性明顯的初始化 4.執行建構子 5.分配物件記憶體位址 (預設初始化值大多為零 boolean 為 false char為 ‘\u0000’ Referencetype 為null)

物件生成後才可使用方法。

類別Class:

Class Structure: 類別架構

package package; 分類目錄或套件 全部小寫英文

import packagename.classname; 動態載入套件

[Modifier…] class classname [extends ParentClass] [implements if1,if2,…]

extends跟implements順序必extends往前

Modifier : public/ default / abstract / final 等

{ [屬性Field];

[方法method];

[建構子 constructor]; }

同種內容可重複有多種 但建構子名稱要跟類別名稱一樣 改變參數稱為建構子的多載

(建構子的多載:同類別同名稱的建構子內部處理不同datatype的參數)

[Java]常用方法(2)使用者輸入Scanner

套件Package: java.util 使用前先載入套件

類別Class:Scanner


import java.util.Scanner; //載入套件精確位置
Scanner identifier = new Scanner(System.in); //建立承接物件
type i = identifier.nextType(); //使用.nextType()方法取得該型別值
//設定變數

p.s. Scanner取得輸入會依據空白字元、空白鍵、Tab,傳回下一個輸入。

範例1取得使用者輸入整數:

nextInt();


Scanner sc = new Scanner(System.in);
System.out.println("請輸入三個數字(以空白鍵分開):");
int num1= sc.nextInt();
int num2= sc.nextInt();
int num3= sc.nextInt();
//nextInt(); 為非static方法使用方法為物件參考變數名稱.方法名稱();
//使用者輸入整數被儲存為num1/num2/num3

範例2取得使用者輸入浮點數

nextFloat();

Scanner sc = new Scanner(System.in);
System.out.println("請輸入三個浮點數(以Tab鍵分開) :");
float num1= sc.nextFloat();
float num2= sc.nextFloat();
float num3= sc.nextFloat();
// nextFloat(); ; 為非static方法使用方法為物件參考變數名稱.方法名稱();
//使用者輸入浮點數被儲存為num1/num2/num3

範例3取得使用者輸入字串( 包含空白字元、空白鍵、Tab )

nextLine();

Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();

範例4取得使用者輸入字串( 不包含空白字元、空白鍵、Tab )

next();

Scanner sc = new Scanner(System.in);
String str2 = scanner.next();

nextLine在使用時須注意以下:

If you use the nextLine() method immediately following the nextInt() method, recall that nextInt() reads integer tokens; because of this, the last newline character for that line of integer input is still queued in the input buffer and the next nextLine()will be reading the remainder of the integer line (which is empty).

[Java]常用方法(1)Random隨機數字

套件Package:java.lang (預設載入)

類別class:Math

public static double random()

屬於static(靜態)方法,使用方式為類別名稱.方法名稱

回傳:型態為Double, 大於等於零及小於一的雙倍精準浮點數。

使用範例:

隨機要1-10內的一個整數

思考:

隨機…Math.random()

1-10 …(Math.random()*10)+1

整數…強制轉型 (int)(Math.random()*10)+1

[Java]基礎語法(2)變數與常數的宣告與型別強制轉型

變數宣告:

[Modifier][ final] type identifier[=value];

[] 為視情況而定非必要。

Modifier :public protected default private static等

final:若使用此字代表此一宣告變數為常數,只能給一次值。

type:基本型別或物件參考型別

identifier:命名用識別字規則如下

英文字大小寫區分

0-9數字可使用但不能當成開頭

$或底線_可以使用,但一般不使用在開頭

建議使用駝峰式命名

不可使用關鍵字:abstract/assert/boolean/break/byte…Java內建關鍵字

= 指定運算子:將右邊的數字指定給左邊identifier

value:變數值,必須和type符合

; 必加在結尾,代表此行結束

型別強制轉型 Type Casting:

identifier = (target type) (value)

所有括號為必要

target type:轉換後的目標型別

value:所得之數值或資料

p.s. float 經過運算後會"自動轉型"為double,byte/short則自動轉型成int 不須強制轉型


[Java]基礎語法(1)Type 型別

Java主要有兩大型別

(1)基本型別Primitive Type: 非物件可直接使用的八大基本型別

(2)物件參考型別Reference Type:需要使用new(取得記憶體位置) 建立。

基本型別Primitive Type:

(1)byte:
儲存數字的整數類型別,佔據記憶體1byte(位元組)(8bits=8位元),其值域為-2^7~2^7-1(-128~127) ,在運算過程中為了防止溢位會自動提升型別為int。

(2)short:

儲存數字的整數類型別 ,佔據記憶體2byte,值域-2^15~-2^15-1(-32768~32767), 在運算過程中為了防止溢位會自動提升型別為int 。

(3)int

儲存數字的整數類型別 ,佔據記憶體4byte,值域-2^31~2^31-1(-2147483648~2147483647)

(4)long

儲存數字的整數類型別 ,佔據記憶體8byte, 值域-2^63~2^63-1,數字尾可加L方便判別。

(5) char

儲存字元的整數類型別 , 佔據記憶體4byte ,以單引號’包圍,可使用編碼如ASCII Unicode表示

ASCII :以十進位數兩位數表示

Unicode編碼 \ u +16進位數字

參考資料: 

https://zh.wikipedia.org/wiki/ASCII

https://zh.wikipedia.org/zh-tw/Unicode

(6)float單倍精準

儲存小數的浮點數類型別, 佔據記憶體4byte ,數字尾可加F/f方便判別,精確到小數後6~7位。

(7)Double雙倍精準
儲存小數的浮點數類型別, 佔據記憶體8byte ,數字尾可加D/d方便判別,精確到小數後14~15位。

(8)boolean

只有true或false,不可使用數字代替,佔據記憶體大小由JVM決定。