*Object
類別階層架構
- Object是所有java類別的根源
- 類別如果沒有extends子句, 就是自動繼承Objects類別
- Object類別中三個重要的方法
- equals
- == 運算子用來判斷兩個參考彼此是否完全相等(identical)(記憶體參照位置相同)
- 可用來判斷物件的內容是否相同(equal)[內容(值)相同], 但不必完全相等(identical)(未必是同一個記憶體參照位置)
- Object類別使用 == 運算子來實作equals方法
- 使用者自訂的類別可以override equals方法來實作特定領域的內容相同測試
- hashCode
- toString
Notes:
- 轉型的目的是為了恢復該物件的完整功能
*toString方法
- 用來將物件轉成字串
- 字串串接時會自動套用這個方法
- 要將基本型別(primitive)轉換成字串, 須藉由相對應包裝類別(wrapper class)的toString方法
*包裝類別(wrapper
class)
Primitive
Type
|
Wrapper
Class
|
boolean
|
Boolean
|
byte
|
Byte
|
char
|
Character
|
short
|
Short
|
int
|
Integer
|
long
|
Long
|
float
|
Float
|
double
|
Double
|
Notes:
- 除了char 與 int 外, 其他只要將第一個字母大寫即可
- Java 從5.0開始會 autoboxing 與 autounboxing
Autoboxing
- 為一對一轉換, 將基本型別轉換成等值(equivalent)的物件
- 不需要透過包裝類別轉換
- 大多用在處理集合物件(Collection)
Lab:
VIP
VIP.java
public
class VIP extends Customer {
private
int discount;
//因為要讓TestCustomer.java
可以傳入參數,
所以要建立建構子
//記得要調整順序,
netbeans 會將子類別放到最前面
public
VIP(int id, String name, char gender, int age, boolean married, int
discount) {
super(id,
name, gender, age, married);
this.discount
= discount;
}
//
Override toString 為了讓 VIP
在TestCustomer.java
內顯示 discount
//利用
super.toString()
來顯示前面的參數
@Override
public
String toString() {
return
super.toString() + "discount=" + discount ;
}
//
Ori Override toString 原本裡用程式產生出來的
toString()
//
@Override
//
public String toString() {
//
return "VIP{" + "discount=" + discount +
'}';
//
}
public
int getDiscount() {
return
discount;
}
public
void setDiscount(int discount) {
if
(discount >= 0 && discount <= 100) {
this.discount
= discount;
}
else {
this.discount
= 0;
}
}
}
TestCustomer.java
package
mod09;
public
class TestCustomer {
public
static void main(String[] args) {
Customer
c1 = new Customer();
c1.setAge(14);
System.out.println(c1);
//Customer
內的參數如下
id
/ name / gender / age / married
Customer
c2 = new Customer(2,"max",'F',15,true); //這邊
char
要使用 單引號來標示
System.out.println(c2);
//這邊會發現如果是直接使用Constructor
餵參數進去,
不會被檢查判斷式
//所以可以在建構子那邊改為
setGender
來進行檢查
(會有風險)
Customer
c3 = new Customer(3,"ines",'O',200,false);
System.out.println(c3);
//新增
VIP
物件,
然後利用建構子傳入參數
VIP
v1 = new VIP(4,"john",'O',30,false,10);
//
System.out.println(v1);
//
VIP
v2 = new VIP(5,"Tom",'F',40,false,110);
System.out.println(v2);
}
先講 Chapter
13 陣列
Notes:
- 陣列大小一但決定就不能改變
*陣列概論與使用語法
- 陣列(Array)就是相同(相容)型態資料的集合
- 在Java技術中, 陣列是類別,要用new關鍵字來建立一個陣列物件
- 在基本型別的後面加上 [ ] 就代表陣列
- 基本型別的陣列空間就是儲存基本型別的值
- a = new int[5]; //新增一個陣列大小為5
- a[0] = 5;
- a[1] = 10;
- 在參考型別的後面加上 [ ] 就代表陣列
- 參考型別的陣列空間就是儲存某個物建的參考指標
- 初始化的時候存放內容為null
- d = new MyDate[5]; //新增一個陣列大小為5
- d[0] = new MyDate(15,10,2012);
- d[1] = new MyDate(25,10,2012);
- 陣列的索引值由0開始起算
Notes:
*陣列元素自動初始化
- 陣列一旦建立後, 其中陣列每一個元素都會自動初始化(歸零原則)
- 上述的String陣列, 每個元素都會自動初始化為null, 表示還未參考到String物件.
Notes:
- Java 的陣列可以先宣告, 後給值. 但是如果是先宣告後給值, new int[ ] 就不能省略.
- 陣列可以透過 .length 來得知陣列的長度.
import
java.util.Arrays;
public
class Main {
public
static void main(String[] args) {
String[
] friends = new String[ ]{"A", "B", "C"};
//
透過
Arrays.toString()
來列出陣列的內容
System.out.println(Arrays.toString(friends));
System.out.println("friends
array lengh=" + friends.length);
//
for
(int i = 0; i < friends.length; i++) {
System.out.println(friends[i]);
}
System.out.println("--------------------");
//
for each 的方式取出內容
for
(String i: friends){ //for each i in friends
System.out.println(i);
}
}
*多維陣列
- java 的陣列因為可以先決定前面的維度, 再來決定後面的維度, 所以可以建立非對稱式的陣列
*變更陣列大小
- 陣列大小無法改變
- 可以透過相同的參考變數指向一個全新的陣列物件(搬移)
- 透過System.arraycopo() 可以複製
int
[ ] b ={ 10,9,8,7,6,5,4,3,2,1};
//a
陣列的大小不夠了,
所以指向b
System.arraycopy(a,
0, b, 3, a.length);//來源陣列,
來源陣列的位置,
目的地陣列,
目的地陣列的索引位置,
複製的長度
a
= b;
//顯示
a
System.out.println(Arrays.toString(a));
*變動參數(VarArgs)
- 方法使用變動參數(Variable Arguments)允許一個方法接受不定數量的參數
- … 代表可以接受 0 到多個參數
Lab:
變動參數
MyMath.java
public
class MyMath {
//double
後面加上 …
代表VarArgs
可以接受0到多個參數
public
double avarage(double ... nums){
double
sum = 0.0;
//使用
for
each 的方式來加總
for(double
num: nums){
sum
+= num;
}
//利用
nums陣列的長度(就是有多少的參數)
來算出平均值
return
sum/nums.length;
}
}
Main.java
MyMath
m = new MyMath();
//測試丟入不同個數的參數來算平均值
System.out.println(m.avarage(1,2,3));
System.out.println(m.avarage(1,2,3,5,7,3));
System.out.println(m.avarage(1,1,1,1));
Notes:
- 方法內不可以接受一個以上的變動參數VarArgs (也就是方法內最多只能有一個變動參數)
- 如果方法內有多參數也同時存在變動參數, 變動參數必須放在最後
- public void varArgs(boolan a, String s, int … x){ }
沒有留言:
張貼留言