2015年4月21日 星期二

[Java] this用法

建立一個Classmate.java的函數,
程式如下:
class Classmate{
  String name;
  int height;
  int weight;
  
  Classmate(){
   System.out.println("0參數的自構函數");
  }
  
  Classmate(String name, int height, int weight){
   this();
   this.name = name;
   this.height = height;
   this.weight = weight;
   System.out.println("三個參數的自構函數");
  }
  
  void discuss(){
   System.out.println("In " + this.name + " Opinion");
   
  }
 
}

接著在Test.java當中,
編寫以下程式:
class Test{
  public static void main(String args []){
   Classmate p1 = new Classmate();
   p1.name = "Helen";
   p1.discuss();

   Classmate p2 = new Classmate("laser", 180,80);
   
  }
 
}

this的使用方法
1. 
在Test.java當中,建立的p1,執行 p1.discuss() 的method時,
在Classmate.java的method宣告中,
使用了this.name,就是為了告知程式,我們現在使用的是p1的資訊,
可以把this想成,為了明確的知道是使用了"誰"的name。

2.
在Test.java當中,看到p2,在建立Classmate時,給予了三個參數,
所以程式在執行時,會自動在Classmate.java當中去尋找三個參數的自構函數,
接著看到Classmate.java當中,可以看到Classmate(String name, int height, int weight)
把name、height、weight給予了this.name、this.height、this.weight
這表示了使用 this 可以讓我們的程式看起來更簡潔
避免了自構函數的參數與成員的變數相同的情況。

3.
在Classmate.java的Classmate(String name, int height, int weight)當中
第一行為this( ),表示呼叫了Classmate.java中沒有參數的自構函數。
*this( ) 用法只可以在函數中使用一次,而且必須在第一行。

2015年4月15日 星期三

[Java] 類別的使用

類別的基本使用方式

儲存一個Employee.java的檔案,
成員有name 與 age,方法有work這個函數指令
class Employee{
 String name;
 int age;
 
 void work(){
  System.out.println("I am going to work");
 }
}

接著主程式的使用為:
我們需要new一個類別賦予 person1,接著定義person1的name與age。
class EmployeeEg{
 public static void main(String args []){
  Employee person1 = new Employee();
  person1.name = "Stacy";
  person1.age = 25;
 } 
}

以上即是類別基本的使用方式。

接著來提到在類別當中,多重的函式自構函式
在類別當中,可以允許同樣的函式名稱,但是不一樣的參數來使用。
在下例當中可以看到multiFuncEg中,如果使用時沒有輸入參數,就會跑出"沒有參數"
如果使用multiFuncEg(15),則會跑出"使用1個函數的multiFuncEg"
例如:
class multiFunc{
 void multiFunc(){
  System.out.println("呼叫自構函數");
 }
 
 void multiFuncEg(){
  System.out.println("沒有參數");
 }
 void multiFuncEg(int i){
  System.out.println("使用1個函數的multiFuncEg");
 }
}

此外,在上例當中,程式本身在new multiFunc()的時候,就會創造一個自構函式
但我們已經在class本身當中建置完成,故,當我們new multiFunc()時,
會跑出"呼叫自構函數"

最後,我們可以在自構函數的本身設定類別的成員,如下,
class Employee{
 void Employee(String na, int ag){
  na = n;
  ag = a;
  
 }
 String name;
 int age;
 
 void work(){
  System.out.println("I am going to work");
 }
}

所以在主程式new 類別時,就可以給定person1的成員。
class EmployeeEg{
 public static void main(String args []){
  Employee person1 = new Employee("Stacy", 25);

 } 
}

2015年4月14日 星期二

[Java] 甚麼是物件導向(Object-Oriented Programming) (未完)

From wiki 解釋
物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是一種程式設計典範,
同時也是一種程式開發的方法。
物件指的是類別的例項,它將物件作為程式的基本單元,
將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充功能性。
物件導向程式設計可以看作一種在程式中包含各種獨立而又互相呼叫的物件的思想,
這與傳統的思想剛好相反;
傳統的程式設計主張將程式看作一系列函式的集合,
或者直接就是一系列對電腦下達的指令。
物件導向程式設計中的每一個物件都應該能夠接受資料、
處理資料並將資料傳達給其它物件,
因此它們都可以被看作一個小型的「機器」,即物件。

(以下也參考Wiki解釋)
基本上用個實際點例子說明會比較清楚點。
1. 類別( Class ):替程式提供模板與結構,類別裏頭的方法(Method)與屬性( Attribute )稱為成員。

類別 車
開始
  公有成員:
    行走( ):
  私有成員:
    外殼顏色:
    輪框尺寸:
結束

2. 物件( Object ):在類別中定義了"車",而我們要在程式中具體描述是怎樣的車。這邊以Nissan Livina做為物件的範例。

定義nissanLivina是車
nissanLivina.外殼顏色 : 藍色
nissanLivina.外殼顏色 : 17
nissanLivina.行走( )

3. 繼承( Inheritance ):在某種情況下,類別會有子類別,子類別的描述會比父類別更加具體
例子裡,國產車繼承了車與其內部成員。

類別國產車 : 繼承
定義nissanLivina國產車
nissanLivina.行走( )

而子類別也可以新增其內部成員

類別日產車 : 繼承車
開始
  公有成員 : 
    油電( )
結束

類別國產車 : 繼承車
定義nissanLivina是國產車
nissanLivina.油電( )  /* 錯誤,油電( )屬於日產車的method

目前先解釋到這邊,後面的封裝性等學有體會再回頭來寫

2015年4月11日 星期六

[Java] 類型與運算符號

目前只寫下自己不太清楚的地方,沒有將所有資料納入。
  • Boolean(布林代數):
    • 只有兩種值: true 或 false。
    • 做程式中流程的判斷用。
    • 不能用在0與非0的狀況
    • e.g:
      public class Hello{
       public static void main(String args []){
        int a = 5;
        int b = 6;
        boolean result = a > b;
        System.out.println(result);
       }
      }
    • 可以看到如下圖所示,result的值為false:
  • 邏輯運算符號:
    J、K為變數名稱,table大部分比較沒有問題,所以只提 J&&K 與J||K的情形。


    • J & K與 J && K在table內的值是一模一樣的,但是在程式跑的時候,J && K,程式會先判斷 J 是否為False,如果是,那K的部分也不用判斷了,結果必定為False。
      照著底下程式輸入:
      public class Hello{
       public static void main(String args []){
       boolean result; 
       int j = 3;
       int k = 5;
       result = j > 5 & k++ < 7; 
       System.out.println(k );
       System.out.println(result);
       }
      }
      

      會得到:

      接著修改程式為:
      public class Hello{
       public static void main(String args []){
       boolean result; 
       int j = 3;
       int k = 5;
       result = j > 5 && k++ < 7; 
       System.out.println(k );
       System.out.println(result);
       }
      }
      

      得到:


      在後者的例子當中,當 j > 5已經不成立的時候,result就被塞了false的值,而後面的k++也不執行了,這就是 && 的用法。而 || 同理可證就不贅述囉

2015年4月10日 星期五

[Java] Begining from Java

最近因為有些小工具想開發,
興起了自己想動手寫看看Android,
網路上有人推薦了對岸Mars的video,
因此開始邊看影片邊學,也把筆記記錄在此。

======= 前言 =======
What is Program:就像我們與外國人溝通,必須使用外語,當然現在大多使用英文即可。所以,學Java,一種程式語言,是為了可以跟電腦溝通,讓電腦了解並按照我們的期望去動作。

What is JDK:Java開發所需的工具,可以幫助我們簡化開發JAVA的過程。

======= 如何開始Java =======
  • 所需工具:
    • Java JDK
    • Notpad ++ (一般應該會推薦eclipse,看人喜歡~)
  • 環境設置步驟:
    • 下載安裝Java JDK(選擇與作業系統相符版本)與Notepad++。
    • 設定環境變數,在windows底下設置path與classpath兩個環境變數。
      (電腦 -> 內容 -> 進階系統設定 -> 進階 -> 環境變數)
      • 系統變數中,找到變數名稱path,按下編輯,在變數值的最後,加上
        ";C:\Program Files\Java\jdk1.8.0_40\bin"
        (這是我安裝jdk的路徑)
      • 系統變數中,按下新增,輸入變數名稱classpath,變數值用"."(你沒看錯,就是一個點)
  • 開始第一個程式:
    • 在磁碟機D底下,新增Hello.java的筆記本。(副檔名就是.java)
    • 以Notepad++開啟編輯,輸入:
      public class Hello{
       public static void main(String args []){
        System.out.println("Hello World!");
       }
      }
    • 接著存檔(Ctrl + S)
    • 開啟命令提示字元(Wins+R -> cmd)
    • 在D槽底下,輸入(因為我的java檔案放在D槽底下):
      javac Hello.java
    • 會產生Hello.class的檔案,接著輸入(注意,沒有.class):
      java Hello
    • 就會看到Hello World!,如下圖所示:
如此完成了第一個Java程式~~呼~
(在此向所有製作教學檔案的人致敬,打個自己想當筆記的文件就昏天暗地了Q_Q")