Pages

2008/12/06

[Java] 用Recursion撰寫檔案列表

遞迴Recursion是撰寫程式的小技巧,
讓程式中的方法(function)可自行呼叫方法本身,
這樣的做法可以讓程式內容易讀, 程式內容也會比較簡潔.

2008/11/15

[SQL] Trigger 觸發程序(一)

Trigger 其目的為監控 Table, 當 Table有新增或更新內容時, 可以將已預設儲存的動作予以執行,
故當一個 Table有 insert, update, delete等行為時,
將會自動執行預設的 Trigger行為.

2008/10/17

[Java] "equals()"與"=="

"=="是比較兩參考變數所儲存之值,
若該參考變數為基本資料型態, 會比較其存放之值是否相同, 相同則傳回true, 反之則傳回false.
若該參考變數為物件型態, 會比較該變數是否指向同一物件, 相同則傳回true, 反之則傳回false.

"equals()"為Java類別Object原有之函式, 繼承Object時可依據比較之內容及規則覆寫該方法,
若沒有覆寫equals(), 其比較條件如同"==".
JavaAPI有註明當覆寫equals()時, 必須覆寫hashCode(),
因當兩個物件相等時, 其hash code也必定會相等.
(若沒修改, JVM會隨機產生一組hash code)

[Java] Override 覆寫

當子類別繼承父類別時, 可以透過Override方式改寫父類別的方法,
當使用override修改父類別的方法, 有下列幾點限制:
  1. 方法名稱不能修改.(改了就是新增方法而不是覆寫了!)
  2. 若父類別的方法有丟出例外時, 子類別也必須丟出此例外或該例外之子類別.
  3. 子類別方法所傳回值之型態須與父類別方法一樣. (若更改傳回值之型態, 這樣就是overload了吧!)
  4. 子類別方法之修飾詞權限不得小於父類別. (繼承的用意就是希望孩子變強, 那有變弱的道理!)
  5. 若父類別之方法設定為final, 子類別不能修改該方法. (廢言, 都已經是final怎麼改寫)
  6. 若父類別之方法宣告為static, 子類別不可將其宣告為non-static, 反之亦然.


以下情況皆為重新定義非覆寫:
  1. 修改父類別之靜態方法
  2. 修改父類別之private方法

2008/10/14

[SQL] Primary Key 與 Foreign Key

關聯式資料庫(RDB)中, 建立資料表的關聯性是由key組成的.
key可分為Primary Key 與 Foreign Key兩種.

Primary Key:
標記為Primary Key的欄位其值是唯一不可重覆.
Foreign Key:
將兩資料表建立關聯性之欄位其設定Key值為Foreign Key.

2008/10/08

[Java] Encapsulation 封裝

封裝的好處:
  1. 可避免類別中的屬性直接被存取
  2. 當class中的method有更動時, 可以確保每支使用到該class的程式都可以統一做變更

2008/09/04

[Java] 類別Class

類別的宣告 Declaring Classes

Ex1(基本宣告方式)
class MyClass {
    // 變數(field)
    // 建構子(constructor)
    // 方法(method)
}
Ex2(繼承宣告方式)
class MyClass extends MySuperClass implements MyInterface {
    // 變數(field)
    // 建構子(constructor)
    // 方法(method)
}

2008/08/30

[Java] Primitive Wrapping Classes 與 Primitive Data Type

在宣告一個變數時,
可以用基本資料型態(Primitive Data Type)定義變數的資料型態,
也可以透過基本資料物件(Primitive Wrapping Classes)宣告變數的資料型態.
基本資料型態(Primitive Data Type)與基本資料物件(Primitive Wrapping Classes)
Primitive Data Type Primitive Wrapping Classes
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean


宣告i為整數時,
可以用下例兩種方式宣告,
  1. int i;
  2. Integer i;
在給定初始時, 也會有所不同, int可以直接使用 "="賦予 i一個初始值 10,
int i =10;
而Integer則有兩種方式,
  1. Integer i = new Integer(10);
  2. Integer i = 10;

第二種宣告方式是J2SE 5.0之後的版本才使用之方法,
透JVM的處理讓 10可以自動封裝(Autoboxing)為 Integer物件,
當然也可以將 10自動拆除(unboxing)為int基本資料型態.
Integer i = 10; // autoboxing
i.doubleValue(); //以物件方式使用
int j;
j = i; // unboxing

2008/08/29

[Java] 物件(objcet) 類別(class) 實體(instance)

何為物件?
真世界件中任何一事物都是物件(object), 人是一個物件, 桌子是一個物件, 車子也是一個物件,
一個物件內會有那些東西, 狀態(state)及行為(behavior),

狀態是什麼? 以人為例, 名字, 性別, 膚色, 身高...等皆是人所擁有的狀態.
行為又是什麼? 一樣以人為例, 跑, 走, 吃東西, 喝水...等動作皆是一個人所擁有的行為.
人可以定義成一個類別(class)叫人類,
將上面的說明轉換成程式,
狀態便是程式中的變數(varialbe, 官方稱為field),
行為便是程式中的方法(method),
定義方式如下:
// 類別(class)叫人類(Human)
class Human {
//人類所擁有的屬性(property)
    String name;
    String sex;
    int height;
// 人類所擁有的行為(method)
    void setName(String name){}
    float run(){
        return float kilometer;
    }
    void eat(String food){}
}
若要使用 Human類別, 必須先將 Human類別實體化,

class HumanDemo {
    Human Taiwanese = new Human();
}
在 HumanDemo裡 Taiwanese是 Human類別的實體(instance),
當一類別被實體化後, 便可使用該類別中所定義之變數及方法.

[Java] 基本資料型態 Primitive Data Type

Java的基本資料型態共有八種,如下所述:
  1. byte: 大小為 1byte, 其值範圍為 -128 ~ 127
  2. short: 大小為 2byte, 其值範圍為 -32,768 ~ 32,767
  3. int: 大小為 4byte, 其值範圍為 -2,147,483,648 ~ 2,147,483,647
  4. long: 大小為 8byte, 其值範圍為 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
  5. float: 大小為 4byte
  6. double: 大小為 8byte
  7. boolean: 僅有兩個值true, false
  8. char: 可儲放一個 16-bit Unicode 文字
當一實體變數(Instance Variable)以基本型態宣告時, 可不給定初始值,
此時JVM會自動賦予變數一初始值,
但要使用該變數仍舊需要賦予初始值,
各基本型態之初始值如下:
Data Type 初始值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object) null
boolean false

2008/08/26

[Java] Idetifier 識別字

在Java程式中, 在宣告變數, 方法或是一個類別時, 都須給定一個名稱以供識別,
宣告識別字(identifier)有下列四個條件:
  1. 開頭第一個字元可為英文字母, "_"或"$", Ex: apple, $apple, _apple
  2. 第二個字元起可以是數字, 英文字母, "_"或"$", 且沒有字元長度限制, Ex: a1, $1, _1
  3. 變數名稱英文字母大小有別
  4. 不可為保留字(Reserved Word), 如下:
  5. abstractinterfacebooleanbreak
    constcontinuedefaultdo
    floatforgotoif
    nativenewpackageprivate
    strictfpsuperswitchsynchronized
    voidvolatilewhileassert
    bytethisimportextends
    doubleenumpublicinstanceof
    implementscasethrowreturn
    protectedelsecatchthrows
    charfinalintshort
    transientclassfinallylong
    statictry


2008/06/07

[Blogger] 在blogger文章標示程式碼區域

如何在 blogger 文章中標示程式碼區域,
在網路上找了一些教學 ( Ex:Warrick-DoDo ),
再加上自己些微地修改,
我的 blogger 文章也可以顯示程式碼區域。

[教學]
在 blogger 的 Template 中,加入 CSS 樣式如下:
code {
    display: block;
    font-family: Courier New;
    font-size: 9pt;
    overflow:auto;
    background: #f0f0f0 url(http://ping.googlepages.com/Code_BG_1.png) left top repeat-y;
    border: 1px solid #ccc;
    padding: 10px 15px 15px 20px;
    max-height:200px;
    line-height: 1.2em;
    margin: 5px 5px 5px 15px;
}
在寫文章時,若該段文章須以程式碼區域顯示,
只須將該段文章放在<code></code>之間便可以以桯式碼區域顯示。

2008/06/04

[Html] 替自己的網頁加入專屬的iCon

將下面語法放在 HTML的 <head></head>裡,
<link rel="shortcut icon" type="image/x-icon" href="圖片名稱">