2016/5/28

台南裕農路 清淡爽口的老主顧滷味

來台南讀書也待了四年,覺得台南真是一個隨處都有美食的地方
尤其是台南的滷味,選擇真的很多,時常晚餐宵夜配著滷味看著連續劇真是人生一大享受
今天就來介紹一家滷味,這家老主顧滷味位在台南東區裕農路上,自己也吃了很多次, 真心覺得好吃的東西要推薦給大家!

2016/5/24

關鍵字:super

Java中的關鍵字super通常放在已繼承父類別的子類別裡面,用來呼叫父類別的成員

2016/5/21

命名原則

好的命名原則,方便可以馬上辨識,日後也好維護。

2016/5/20

PHP PDO Select 從資料庫中查詢資料

發現之前學一陣子的PHP,太久沒碰差點忘掉了,而好不容易也玩過PDO,怎可以就這樣忘光光呢,發現會的東西一定要保持住,所以想寫篇文章來做個筆記。

本篇主要就是講基本的用PDO從資料庫中讀取資料至網頁來

2016/5/17

Java:TryCatch

TryCatch語法結構是這樣:
try{
    ...
}
catch(物件型態 ex){
    ...
}

Java:流程控制

while(true) { 
    迴圈內容; 
    .... 
}
這樣寫表示無窮迴圈。

2016/5/12

匿名內部類別(Anonymous inner class)

例1,static class A就是匿名內部類別,用參考名稱z,去呼叫showMe()。
package anonymous1;
public class Anonymous1 {
    static class A{
        int i =0;
        public String showMe(){
        return "This is X";
        }
    }
    public static void main(String[] args) {
        final String ff="final";        //如果要在內部匿名類別中使用某個方法中的變數,它必須宣告為 final
        A z = new A(){         //匿名類別override showMe方法
            public String showMe(){
                return "This is Z"+i+ff; //可存取A類別的成員
            }
        }; //注意分號別漏掉
        System.out.println(z.showMe());
    }
}
//run:
//This is Z0final

2016/5/11

C++的#include <iostream> 與名稱空間namespace

前言:
這篇主要是討論C++底層的一些觀念的東西。
我覺得在學一個新東西前,一定要先了解他的來由始末,而不是只懂皮毛,初學者也別小看C++一開始的Hello World,這麼一小段程式背後還是有很多東西可以學,至少要懂它每段語法結構,和它運作的概念。
ps..這篇文章實際標題是C++的#include &lt;iostream&gt; 與名稱空間namespace,因為<iostream>含特殊字元,不然不能直接顯示出來,幸好上次有碰過這問題,所以這網站真的好用。

Code::Blocks建立C++專案 :第一隻Hello World!

工欲善其事,必先利其器。
覺得Code::Blocks這IDE比DevC++好用多了,各位不要再用DevC++,光不用打System pause就贏一半了。
這裡就先來個創C++專案的紀錄和寫第一隻Hello World吧!

2016/5/10

interface介面:Java為例

接下來討論interface介面這東西,先假設我們要做一個海洋樂園遊戲,也假設我們不會用interface,也許你會先定義fish這類別且有swim():
public abstract class Fish {
    protected String name;
    public Fish(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public abstract void swim();
}
每種魚游泳方式可能不一樣,所以swim()為abstract,那class也要abstract了。

2016/5/9

在Blogger中貼程式碼

以下是成果
public class Shape2D { // define super class
    public double area() { // all Shape2D have their own area
        return 0;
    }
}
public class Rectangle extends Shape2D {
    private double length, width;
    public Rectangle(double l, double w) { // define constructor
        length = l;
        width = w;
    }
    public double area() { // Override
        return length * width;
    }
}
public class Circle extends Shape2D {
    private double radius;
    public Circle(double r) {
        radius = r;
    }
    public double area() { // Override
        return 3.141592654 * radius * radius;
    }
}
public class Parallelogram extends Shape2D {
    private double top, bottom, height;
    public Parallelogram(double t, double b, double h) {
        top = t;
        bottom = b;
        height = h;
    }
    public double area() { // Override
        return (top + bottom) * height / 2.0;
    }
}
publicclass Main {
    public static double sum(Shape2D[] shapes) {
        double total = 0;
        for (int i = 0; i < shapes.length; i++) {
            total += shapes[i].area(); // use Virtual Function to calculate area of Shape2D
                                       // Without Virtual Function, value of Shape2D.area() will be 0
        }
        return total;
    }
    public static void main(String[] argv) {
        Shape2D[] data; // array of reference to Shape2D
        data = new Shape2D[5]; // create array object
        data[0] = new Rectangle(2.4, 3.8); // Polymorphism
        data[1] = new Circle(3.9);
        data[2] = new Parallelogram(3.5, 6.7, 10.2);
        data[3] = new Rectangle(5.3, 7.2);
        data[4] = new Circle(4.6);
        System.out.println("Sum of all Shape2D is "+sum(data));
     }
}

2016/5/8

protected:Java為例

本篇參考良葛格-protected 成員

拿之前RPG遊戲拿說,現在我們想顯示角色細節,要這樣寫:
1
2
3
4
SwordsMan swordsMan = new SwordsMan();
...System.out.printf("劍士 (%s, %d, %d)%n", swordsMan.getName(), 
swordsMan.getLevel(), swordsMan.getBlood());

2016/5/6

抽象類別與方法abstract

承上篇:多型(Polymorphism):重新定義實作@Override
並參考1:良葛格-抽象方法、抽象類別
參考3:Gossip@Openhome
參考4:Davidou's Blog-[Java]6.抽象(Abstract)與介面(Interface)
參考5:Java 介面(Interface)與抽象類別(Abstract class)的差異

如果一個class裡有一個抽象方法abstract method,那這個類別就必須定義為抽象類別abstract class 。
1
2
3
4
5
6
package Cast;
public abstract class Role {
    ......
    public abstract void fight();
    ......
}
abstract method宣告方式:不用{},直接 ; 結束即可。
abstract class宣告方式:一定要在class前加abstract關鍵字。

2016/5/4

多型(Polymorphism):重新定義實作@Override

承上篇:OOP:多型(Polymorphism) 以Java為例protected:Java為例

前言:這篇主要是探討Java中重新定義Override,根據參考資料自己做的筆記與心得,如日後有新發現都會陸續增加。

2016/5/3

OOP:多型(Polymorphism) 以Java為例

參考2暨南教科書多型基本觀念
參考3什麼是物件導向(3):Polymorphism
參考4Java 快速導覽 - 物件導向概念 多型
參考5劉逸-論物件導向part 5:Polymorphism
參考6程式設計俱樂部-OOP 中對 "多型" 的理解
參考7歐萊禮-多型

這裡主要是討論OOP多型的概念,爬了些資料自己做些整理。
首先看到參考1良葛格所寫,它把多型想成「is-a 關係」(是一種關係)來看,讓初學者很容易初步的理解多型的概念,與什麼時候的多型寫法會編譯失敗

2016/5/1

NetBeans IDE 8.1 更換主題theme

參考資料   http://codesleepshred.com/dark-netbeans-themes-oblivion-revival-and-monokai/

這網址提供兩個主題一個sublime的monokai和Oblivion Revival ?

我選sublime的monokai

附上成果




結果我是覺得還可以,只是它那綠底的反白我不太喜歡,但應該是可以調改天研究

monokai套進去後,不是那樣反白橘色的,反白後的文字也不是白的,我另外調的,稍微筆記一下...畢竟也是找了下....

NetBeans IDE>上排工具>選項>Fonts&Colors>Highlighting>Selected Text

Foreground:反白後的文字顏色

Background:反白的背景顏色

Effects:反白後是否要有底線之類的,可自玩玩看

OOP:繼承(Inheritance) 以Java為例

本篇參考  http://openhome.cc/Gossip/Java/Inheritance.html

繼承的目的就是為了避免多個類別重複相同的實作。

先假設今天要開發一個RPG遊戲,一開始角色有劍士和魔法師,先定義劍士:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


public class SwordsMan {
    private String name;   // 角色名稱
    private int level;     // 角色等級
    private int blood;     // 角色血量

    public void fight() {
        System.out.println("揮劍攻擊");
    }

    public int getBlood() {
        return blood;
    }
    public void setBlood(int blood) {
        this.blood = blood;
    }

    public int getLevel() {
        return level;
    }
    public void setLevel(int level) {
        this.level = level;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }}


再來是魔法師:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34


public class Magician {
    private String name;   // 角色名稱
    private int level;     // 角色等級
    private int blood;     // 角色血量
    
    public void fight() {
        System.out.println("魔法攻擊");
    }
    
    public void cure() {
        System.out.println("魔法治療");
    }

    public int getBlood() {
        return blood;
    }
    public void setBlood(int blood) {
        this.blood = blood;
    }

    public int getLevel() {
        return level;
    }
    public void setLevel(int level) {
        this.level = level;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }}


可看到上面粗體+斜體+底線的地方與劍士重複了?重複的東西幹嘛一直寫呢?所以繼承就出現了


現在開始實作繼承(Inheritance)

步驟一:把重複的地方"拿出"去,當父類別,並且給父類一個新名字

步驟二:把子類別繼承父類別

現在來開始做

步驟一:把重複的地方"拿出"去,當父類別,並且給父類一個新名字叫Role


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


package Cast;
public class Role {
    private String name;
    private int level;
    private int blood;
    
    public int getBlood() {
        return blood;
    }

    public void setBlood(int blood) {
        this.blood = blood;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }}


步驟二:把子類別繼承父類別

1
2
3
4
5
6


package Cast;
public class SwordsMan extends Role {
    public void fight() {
        System.out.println("揮劍攻擊");
    }}


關鍵字extends繼承,把SwordsMan類別繼承Role類別,前面是子類別繼承父類別

Magician也一樣繼承Role:


1
2
3
4
5
6
7
8
9
10


package Cast;
public class Magician extends Role{
    public void fight() {
        System.out.println("魔法攻擊");
    }
    
    public void cure() {
        System.out.println("魔法治療");
    }}


如此一來,Role中定義的程式碼,SwordsMan與Magician中都有了

 如何確定有真的繼承?試試看知:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25


package rpg;
import Cast.Magician;
import Cast.SwordsMan;
public class RPG {
    public static void main(String[] args) {
       demoSwordsMan();
       demoMagician();
    }
    static void demoSwordsMan() {
        SwordsMan swordsMan = new SwordsMan();
        swordsMan.setName("Justin");
        swordsMan.setLevel(1);
        swordsMan.setBlood(200);
        System.out.printf("劍士:(%s, %d, %d)%n", swordsMan.getName(), 
                swordsMan.getLevel(), swordsMan.getBlood());
    }
    static void demoMagician() {
        Magician magician = new Magician();
        magician.setName("Monica");
        magician.setLevel(1);
        magician.setBlood(100);
        System.out.printf("魔法師:(%s, %d, %d)%n", magician.getName(), 
                magician.getLevel(), magician.getBlood());
    }}


注意,如果demoMagician與demoSwordsMan method沒有加static會編譯錯誤,因為main是static宣告,只有static能用static還有final宣告的類別不能被繼承,否則會編譯錯誤!

換句話說,如果你不想你的類別被其他子類別繼承,那就請你把類別宣告成final
final class classname{
         //...
}

還有,Java中,子類別只能繼承一個父類別,所以基本上你不會看到這種東西:
package Cast;
public class Magician extends Role,Role2,...{
    .............................
}


問題1:private成員可繼承嗎?可以

問題2:private成員繼承後,子類別可存取它嗎?不能,除非父類別提供method給子存取

反白看答案

NetBeans IDE 8.1 好用快捷鍵 筆記

區塊註解/反註解CTRL+SHIFT+C(已自訂為ALT+W)

批次修改變數名稱 CTRL+R

刪除整行CTRL+E

切換至前一個分頁或後一個分頁Previous Tab/Next Tab Ctrl+PgUp/PgDn

切換至上一個瀏覽的分頁 Ctrl+Tab

關閉目前分頁 Ctrl+w

打開剛剛關閉的分頁 Ctrl+Shift+t




以下是Mac OS:

程式碼提示(自動完成)⌘+\
單行註解 ⌘+/     (再按一次 解除註解)
多行註解⌘+shift+c (已自訂為⌃+A)
刪除這行 ⌘+E
選取所有同名變數,集體更換變數(好用!)⌃+R
幫你格式化程式碼 ⌃+Shift+f
清除Output內容 ⌘+L
切換標籤頁面 Fn+⌘+↓or↑
選擇目前這個字Select Word(像Sublime的⌘+D)⌘+D   ,這功能需而外在Keymap設定,因Netbeans預設沒幫你設

設定部分:
關閉自動雙引號:Preference>Editor>Insert Closing Brackets Automatically>不要打勾

NetBeans MacOS快速鍵