Chapter
2 Java 的類別
類別分成兩大類
- 可執行
- 不能執行
Notes:
- 類別如果是公開, 那檔名就要跟類別名稱一樣
- void 代表沒有回傳值
Lab:
Hello.java
新增mod02資料夾在
SCJP\exercise
目錄內
新增Hello.java
在SCJP\exercise\mod02
內
輸入以下程式碼
//Executable
Java Class
public
class Hello{
public
static void main(String[] args){
System.out.println("Hello
world");
}
}
使用命令提示字元在該目錄
>
javac Hello.java
>
java Hello
Lab:
不可執行的 java
程式
//
Non-executable Java Class
public
class Greeting{
public
void sayHello(String name){
System.out.println("Hello,
"+name);
}
}
建立
Greeting.java
嘗試編譯以及執行
>
javac Greeting.java
>
java Greeting
Notes:
- + 代表字串串接
Lab:
修改 Hello.java
//Executable
Java Class
public
class Hello{
public
static void main(String[] args){
System.out.println("Hello
world");
Greeting
x = new Greeting(); //建構物件
x.sayHello("Max");
//使用物件
}
}
使用命令提示字元
>
javac Hello.java
>
java Hello
Notes:
- 被主程式利用到的類別, 編譯的時候會順便編譯他
Notes:
- 檔案中可以定義一到多個類別
- 最多可以有一個public class, 且檔名必須與類別名稱相同. (如果檔案內沒有 public class 檔案名稱就沒有強制規定)
- 編譯的時候呼叫的是檔案的名稱, 執行的時候是呼叫類別的名稱(區分大小寫)
- 類別
- 定義同一類型的不同物件之間共同的資料結構(屬性)[靜態]與行為邏輯(方法)[動態]
- 好比建築物的藍圖
- 可以
- 屬性
- 方法
- 定義建構子
- 定義巢狀類別
- 物件(Object)
- 將類別建立成實體就是物件
- 物件就像依據藍圖完成的建築物
- 同一類別所建立的各個物件
- 各自獨立
- 擁有各自獨立的屬性狀態值
- 擁有來自同一類別方法中相同的行為邏輯
*Java
class的語法
<
> - non-terminal
[
] - optional
*Java
類別設計示範
Lab:
繪製 UML
安裝 JUDE
程式 (
可以繪製 UML)
http://jude.change-vision.com/jude-web/product/community.html
目前 JUDE
停止開發
有新的專案 astah
新增 Class
Diagram (參考課本)
新增類別圖
- 類別名稱 Employee
- 屬性 ( 滑鼠右鍵Add Attribute 或是 Ctrl + F )
- 方法 ( 滑鼠右鍵Add Operation 或是 Ctrl + M)
Lab:
使用JUDE
來進行正向工程 /
逆向工程
正向工程(Forward
Engineering) – 從UML
轉換成程式
將剛剛繪製的類別圖轉成
java
Tool
→ Java → Export Java
觀察輸出的
Employee.java
逆向工程(Reverse
Engineering) – 從程式轉換成UML
Tool
→ Java → import Java
Lab:
JUDE
不知道如何定義方法,
參考 課本補上方法
public
class Employee{
public
String name;
public
String title;
public
String department;
public
int salary;
//定義方法
public
String toString(){
return
name + "\n" + title + "\n" + department + "\n"
+ salary;
}
}
新增一個
TestEmployee.java
public
class TestEmployee{
public
static void main(String[] args){
Employee
emp1 = new Employee();
emp1.name="Max";
emp1.title="Manager";
emp1.department="IT";
emp1.salary=85000;
System.out.println(emp1);
}
}
編譯 Employee
以及 TestEmployee
並執行
>
javac Employee.java
>
javac TestEmployee.java
>
java TestEmployee
*識別子(Identifier)的命令規則
- 使用 unicode 開頭的文字, 或是 _ 或是 $ 兩個符號
- 識別字不可以用數字開頭, 第二個字可以是文字, 數字, 或是 _ 或是 $ 兩個符號
- 不可以是 java 關鍵字(目前有 50 個關鍵字)
- 大小寫有別, 沒有長度上限
*java
關鍵字
- true, false, null 不是關鍵字
- transient, volatile, strictfp, native 不會考
*識別子的命名慣例
(Naming
Convention)
- 套件(Package): 以小寫英文命名, 習慣以公司名稱反過來取
- 類別(Class), 介面(Interface), 和列舉型別(enum): 應為名詞或是名詞片語
- 方法(Method): 開頭應用動詞
- 區域變數: 應該簡短有意義.
- 成員變數: 第一個字母應該小寫, 也可以混合使用, 限制底線 _ 的使用
- 常數: 建議全部大寫, 以底線斷詞.
*Chapter
3 java的變數與型別
*成員變數(Member
Variable)
- 宣告在類別中(但不是在方法或建構子)的變數就稱為成員變數
public
class Scoping{
public
static int a; //類別變數(class
variable) 會自動初始化(自動歸零)
public
int b; //成員變數(Member
variable) 或是
實體變數(Instance
variable) 會自動初始化
public
final int MYCONST=100; //常數
不會自動初始化
public
void oops(int c, int d){
int
e;
if(
c > 10){
int
f;
System.out.println(
);
}
System.out.println(
);
}
}
Notes:
- 以上 c, d, e, f 都是區域變數 (因為在方法裡面), c 與 d 會由呼叫者傳入初值, e, f 為方法本體內所宣告的區域變數, 不會自動初始化. 所以 e, f 在使用前必須先行初始化(要指派值, 不然會發生 NullPoint exception).
- 大括號會限制變數的有效範圍
- java 的變數可以先宣告後給值, 建議一行宣告一個變數.
*java的基本資料型別(Primitive
Type)
基本型別
(Primitive
Type)
|
邏輯
|
boolean
|
Boolean
b = true;
|
|
文字
|
char
|
16
bits
|
char
c = 'A'; 'a' '\n' '\ucafe'
'\ubabe'
|
|
整數
|
byte
|
8
bits
|
byte
b = 5;
|
|
short
|
16
bits
|
short
s = 15;
|
||
int
|
32
bits
|
int
i =25;
|
||
long
|
64
bits
|
long
x = 35L;
|
||
浮點
|
float
|
32
bits
|
float
f = 543.21F;
|
|
double
|
64
bits
|
double
d = 123.45;
|
||
參考型別
(Reference
Type)
|
Greeting
g = new Greeting();
Employee
e = new Employee();
Customer
c = new Customer();
|
Notes:
- Java 內boolean不可以將 0 當 false, 1當 true, 一定要給 true 或是 false.
- 文字有三種表示法
- 可以直接輸入
- 跳脫字元
- 16進位碼
- 使用long的時候會在後面加上大寫或是小寫的L
- int 是預設的整數型別
- overload 相同的方法名稱, 可以接受不同的型別(參數).
- double 是預設的實數型別
- Java
碰到 float
要特別小心.
一定要在數字的右方加上大寫的F.
(有可能喪失數值的精確度,
沒有加上F
預設浮點的大小會給 64
bits, 但是前面宣告 float
就會被截斷,放到
32
bits 內)
- 只要是類別就是參考型別
- Java
只是廢除指標運算.
不是廢除指標.
沒有留言:
張貼留言