搜尋此網誌

顯示具有 Java語言 標籤的文章。 顯示所有文章
顯示具有 Java語言 標籤的文章。 顯示所有文章

2015年6月21日 星期日

Java 8 新功能概述

Default Methods


以前如果為interface加入新的方法, 那麼所有的實作類別都必須要實作這個新方法.

有了default method這個功能後, 只要在新方法前面加上default關鍵字,然後實做它的內容.

那麼那些之前的實作類別, 也都可以使用這個新方法, 而不必自己實作. 範例如下:

package lang;

public class DefaultMethodDemo {

 public static void main(String[] args){
  
  new Client().run();
  new Client().runDefault();
  
 }
}

interface Run {
 public void run();
 default void runDefault(){
  System.out.println("default run .");
 }
}

class Client implements Run {

 @Override
 public void run() {
  System.out.println("client run .");
 }
 
}

Type Annotaion

Java 8之前, Annotaion只能用在宣告上 , 例如宣告類別, 或是宣告方法 , 或是宣告變數.

而Java 8對於 Annotaion的支援範圍擴大到 , 只要有使用到type的地方, 都可以使用Annotaion.

  1. 型別創建的時候 
    
    new @Interned MyObject();
  2. 轉型的時候
    myString = (@NonNull String) str;
3. implements 子句時:
          
class UnmodifiableList implements
        @Readonly List<@Readonly T> { ... }

4. 丟出例外的宣告:
void monitorTemperature() throws
        @Critical TemperatureException { ... }




Repeating Annotations.

Java 8 可以在同一個宣告上, 重複使用同一種Annotation.

@Schedule(dayOfMonth="last")
@Schedule(dayOfWeek="Fri", hour="23")
public void doPeriodicCleanup() { ... }

代表這個method, 有兩種不同的的排程 , 分別用同一種Annotation,賦予不同值來表示.



Java Lambda 簡單介紹.

Lambda 是Java 8 支援的新功能 . 對於簡化functional interface的實作很方便. 所謂的functional

interface就是只有一個public method的interface. 下面是範例.


package lang;

public class LambdaDemo {

 public static void main(String[] args) {
  LambdaDemo ld = new LambdaDemo();
  
  /**
   * Using Lambda
   */
  ld.lambdaTest(t -> {
   System.out.println("a lambda run");
  });
  
  /**
   * Without using Lambda
   */
  ld.lambdaTest(new Test(){

   @Override
   public void run(Test t) {
    System.out.println("not a lambda run");
   }
   
  });
 }

 public void lambdaTest(Test t) {
  t.run(t);
 }

}

interface Test {
 public void run(Test t);
}

以前必須要把run()的method signature寫一遍,然後裡面是實作,有了Lambda之後, 諸如此類的實作就可以大幅簡化了.

2014年11月26日 星期三

陣列



package encoding;
public class Empty {
//陣列是一個有固定長度 , 儲存相同型別資料的容器.
public static void main(String[] args) {
//要使用陣列之前必須要先 new 出所需長度的記憶體位置給陣列 , 否則無法儲存資料.
int[] numberGroup1 = new int[1];
numberGroup1[0] = 1;
//存取陣列是由位置 0 開始 .
System.out.println(numberGroup1[0]);
//在new陣列的同時也可以初始化陣列各個位置的值.
int[] numberGroup2 = new int[] { 2, 3 };
//存取陣列是由位置 0 開始 .
System.out.println(numberGroup2[0]);
System.out.println(numberGroup2[1]);
}
}


2014年11月24日 星期一

Java變數命名規則

變數是區分大小寫的, 所以 int a , 和int A是兩個不同的變數.

變數不要用'$' (錢字號) 或 '_' (底線) , 作為開頭.

開頭之後可以為字母, 錢字號 , 數字 或底線.

命名要用有意義的全名, 不要用神秘的縮寫 , 讓程式碼好維護
例如 : int  wheel , 比  int w, 來得好. 但是Java的關鍵字或是保留字
不可作為變數名稱.

假如變數是由兩個單字或以上所組成的 , 那麼第二個單字開始的字母必需要以大寫開頭
例如: iceCream ,  carWheel .

定義常數的話則是每個字母都要大寫 , 單字間要用底線連接
例如 : public static final String CAR_WHEEL = "car wheel"

下面是oracle網站列出的關鍵字和保留字, 列出供參考:

abstract continue for new switch
assert*** default goto* package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum**** instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp** volatile
const* float native super while
* not used
** added in 1.2
*** added in 1.4
**** added in 5.0