2018-2019-2 20189203 移動平臺應用開發實踐第四周學習總結
第12、13、14、15章學習
第12章 枚舉
- 一、常量
在JDK1.5 之前,我們定義常量都是: public static final.... 。現在好了,有了枚舉,可以把相關的常量分組到一個枚舉類型裏,而且枚舉提供了比常量更多的方法。
Java代碼
public enum Color {
RED, GREEN, BLANK, YELLOW
}
- 二、switch
JDK1.6之前的switch語句只支持int,char,enum類型,使用枚舉,能讓我們的代碼可讀性更強。
Java代碼
enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }
- 三、向枚舉中添加新方法
如果打算自定義自己的方法,那麽必須在enum實例序列的最後添加一個分號。而且 Java 要求必須先定義 enum 實例。
Java代碼
public enum Color { RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4); // 成員變量 private String name; private int index; // 構造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
- 四、覆蓋枚舉的方法
下面給出一個toString()方法覆蓋的例子。
Java代碼
public enum Color { RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4); // 成員變量 private String name; private int index; // 構造方法 private Color(String name, int index) { this.name = name; this.index = index; } //覆蓋方法 @Override public String toString() { return this.index+"_"+this.name; } }
- 五、實現接口
所有的枚舉都繼承自java.lang.Enum類。由於Java 不支持多繼承,所以枚舉對象不能再繼承其他類。
Java代碼
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變量
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//接口方法
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}
- 六、使用接口組織枚舉
Java代碼
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
/**
* 測試繼承接口的枚舉的使用(by 大師兄 or 大濕胸。)
*/
private static void testImplementsInterface() {
for (Food.DessertEnum dessertEnum : Food.DessertEnum.values()) {
System.out.print(dessertEnum + " ");
}
System.out.println();
//我這地方這麽寫,是因為我在自己測試的時候,把這個coffee單獨到一個文件去實現那個food接口,而不是在那個接口的內部。
for (CoffeeEnum coffee : CoffeeEnum.values()) {
System.out.print(coffee + " ");
}
System.out.println();
//搞個實現接口,來組織枚舉,簡單講,就是分類吧。如果大量使用枚舉的話,這麽幹,在寫代碼的時候,就很方便調用啦。
//還有就是個“多態”的功能吧,
Food food = Food.DessertEnum.CAKE;
System.out.println(food);
food = CoffeeEnum.BLACK_COFFEE;
System.out.println(food);
}
- 七、關於枚舉集合的使用
java.util.EnumSet和java.util.EnumMap是兩個枚舉集合。EnumSet保證集合中的元素不重復;EnumMap中的 key是enum類型,而value則可以是任意類型。關於這個兩個集合的使用就不在這裏贅述,可以參考JDK文檔。
第13章 操作日期和時間
java.util提供了Date類來封裝日期和時間。實例化Date類的兩個構造函數,
Date();--當前時間
Date(long millisec);--距離格林威治時間1970年1月1日millisec毫秒的時間
使用SimpleDateFormat格式化日期
```
import java.util.;
import java.text.;
public class DateDemo {
public static void main(String args[]) {
Date now = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(now));
//Current Date: 火 2016.11.01 at 01:37:56 午後 CST
} }
使用printf格式化日期
printf方法可以很輕松地格式化時間和日期。使用兩個字母格式,它以t開頭並且以下面轉換字符表格中的一個字母結尾。例如:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 對象
Date date = new Date();
// 使用toString()顯示日期和時間
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
//Due date: 11月 01, 2016
}
}測量時間 結束時間-開始時間=用時。System.currentTimeMillis();--取得系統當前時間秒數。
import java.util.*;
public class TestDataFormat {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(6000);//讓當前線程休眠(阻塞)6秒,讓出CPU的使用,給別的線程利用cpu的機會
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}```
Calendar類
創建一個Canlendar對象---
Calendar c = Calendar.getInstance();//默認是當前日期
創建一個指定日期的Canlendar對象
Calendar c1= new Calendar.getIntance();
c1.set(2016,11,01);//20161101
第14章 集合框架
Java中的集合框架大類可分為Collection和Map;兩者的區別:
1、Collection是單列集合;Map是雙列集合
2、Collection中只有Set系列要求元素唯一;Map中鍵需要唯一,值可以重復
3、Collection的數據結構是針對元素的;Map的數據結構是針對鍵的。
Collection體系:
collection包括兩大體系,List和Set
List的特點:
存取有序,有索引,可以根據索引來進行取值,元素可以重復
Set的特點:
存取無序,元素不可以重復
Set:
Set集合的特點:元素不重復,存取無序,無下標
Set集合下面有:HashSet,LinkedHashSet,TreeSet
第15章 泛型
泛型,即“參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。那麽參數化類型怎麽理解呢?顧名思義,就是將類型由原來的具體的類型參數化,類似於方法中的變量參數,此時類型也定義成參數形式(可以稱之為類型形參),然後在使用/調用時傳入具體的類型(類型實參)。
在使用泛型類時,雖然傳入了不同的泛型實參,但並沒有真正意義上生成不同的類型,傳入不同泛型實參的泛型類在內存上只有一個,即還是原來的最基本的類型,當然,在邏輯上我們可以理解成多個不同的泛型類型。究其原因,在於Java中的泛型這一概念提出的目的,導致其只是作用於代碼編譯階段,在編譯過程中,對於正確檢驗泛型結果後,會將泛型的相關信息擦出,也就是說,成功編譯過後的class文件中是不包含任何泛型信息的。泛型信息不會進入到運行時階段。對此總結成一句話:泛型類型在邏輯上看以看成是多個不同的類型,實際上都是相同的基本類型。
2018-2019-2 20189203 移動平臺應用開發實踐第四周學習總結