1.1 概念:枚舉是由一組固定的常量組成的類型,自定義數據類型;本質是一種類。java
形式:設計模式
【修飾符】 enum enumName{app
常量值1,dom
常量值2,ide
常量值n[;]this
}spa
枚舉的常量值是能夠羅列出來的有限值;類型public static final設計
例子:code
1 public enum Gender { 2 男, 3 女, 4 保密; 5 }
Gender 是一種自定義的數據類型,能夠用於聲明變量,且變量的取值必須是枚舉值的其中一個。gender的值必須是男或者女或者保密orm
1 public static void main(String[] args) { 2 3 // 聲明一個Gender枚舉類型的變量gender,並取值爲男 4 Gender gender = Gender.男; 5 }
枚舉的類都是繼承Enum類
1 public class Student { 2 3 private String name; 4 private int age; 5 private Gender gender; 6 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 public int getAge() { 16 return age; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 23 public Gender getGender() { 24 return gender; 25 } 26 27 public void setGender(Gender gender) { 28 this.gender = gender; 29 } 30 31 public Student(String name, int age, Gender gender) { 32 super(); 33 this.name = name; 34 this.age = age; 35 this.gender = gender; 36 } 37 38 public Student() { 39 super(); 40 } 41 42 @Override 43 public String toString() { 44 return "Student [name=" + name + ", age=" + age + ", gender=" + gender + "]"; 45 } 46 47 } 48 49 // class Gender extends Enum{} 50 enum Gender { 51 男, 女, 保密; 52 }
1 public static void main(String[] args) { 2 Gender gender = gender.男; 3 // 枚舉值->字符串 4 System.out.println(gender.toString()); 5 // 字符串串-> 枚舉值 6 String str="保密"; 7 // 可能產生IllegalArgumentException 非法參數異常 8 System.out.println(Enum.valueOf(Gender.class, str));
System.out.println(gender2);
}
注意:枚舉與switch常常搭配使用,且往後開發中使用頻繁應重點把握
1 public enum Week { 2 MONDAY, 3 TUESDAY, 4 WEDNESDAY, 5 THURSDAY, 6 FRIDAY, 7 SATURDAY, 8 SUNDAY; 9 }
1 public static void main(String[] args) { 2 3 4 // 需求:有一個變量表示星期幾,輸出對於的教學安排 5 Week week = Week.TUESDAY; 6 switch (week) { 7 case MONDAY: 8 case TUESDAY: 9 case THURSDAY: 10 case FRIDAY: 11 case SATURDAY:{ 12 System.out.println("上課"); 13 break; 14 } 15 case WEDNESDAY: 16 case SUNDAY:{ 17 System.out.println("練習"); 18 break; 19 } 20 } 21 }
枚舉的其它方法
1 public static void main(String[] args) { 2 3 // 枚舉變量的其餘方法 4 Week week = Week.SUNDAY; 5 System.out.println(week.name()); 6 System.out.println(week.ordinal()); 7 }
總結:
計算機如何表示時間?
時間戳(timestamp):距離特定時間的時間間隔。
計算機時間戳是指距離曆元(1970-01-01 00:00:00:000)的時間間隔(ms)。
計算機中時間2019-04-29 14:14:00 是該時間距離曆元通過的毫秒數,用long類型存儲。
時間本質上是一個整形。
格林尼治時間(GMT),是一個標準時間,用於全球時間的標準化,也稱世界協調時(UT)。各個國家經過時區偏移來定義各國的標準時間。
中國位於東八區
中國的標準時china standard time = UTC + 08:00
類 Date 表示特定的瞬間,精確到毫秒。
Date 類本質上擁有一個long fastTime屬性的包裝類,提供了不少屬性和方法用於快速獲取年月日、時分秒。而fastTime就是時間戳。
1 public static void main(String[] args) { 2 // 建立一個Date對象,表示當前時間 3 // 根據當前時區、當前語言環境等建立當前時間 4 Date date1 = new Date(); 5 System.out.println(date1); 6 7 // 獲取date1的時間戳 8 long time1 = date1.getTime(); 9 System.out.println(time1); 10 11 // 經過時間戳建立Date對象 12 long ts1 = 0; 13 Date date2 = new Date(ts1); 14 System.out.println(date2); 15 16 // 需求:請構建一個時間,表示將來一天的當前時間。 17 long ts2 = 24*3600*1000+date1.getTime(); 18 Date date3 = new Date(ts2); 19 System.out.println(date3.toString()); 20 }
由於時間屬於整形所以時間能夠比較大小。
1 public static void main(String[] args) { 2 3 // 比較兩個時間 4 Date d1 = new Date(); 5 Date d2 = new Date(d1.getTime()+1000); 6 7 System.out.println(d1.before(d2)); 8 System.out.println(d1.after(d2)); 9 10 System.out.println(d1.compareTo(d2)); 11 12 System.out.println(d1.equals(d2)); 13 14 15 // d1.getTime() - d2.getTime() 16 // setTime:改變Date對象的時間戳 17 d1.setTime(d1.getTime()+24*3600*1000); 18 System.out.println(d1); 19 }
【1】把Date對象格式化爲字符串
1 public static void main(String[] args) { 2 3 Date date = new Date(); 4 System.out.println(date); 5 6 // 日期格式化->字符串 7 SimpleDateFormat df = new SimpleDateFormat(); 8 // [1]使用默認的模式和語言環境 9 // 19-4-29 下午3:36 10 String dateStr = df.format(date); 11 System.out.println(dateStr); 12 13 // [2]使用指定模式格式化 14 // xxxx年xx月xx日 xx時xx分xx秒 15 SimpleDateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); 16 String dateStr2 = df2.format(date); 17 System.out.println(dateStr2); 18 19 // 修改模式 20 // df2.applyPattern("yyyy-MM-dd"); 21 df2.applyPattern("yyyy/MM/dd"); 22 String dateStr3 = df2.format(date); 23 System.out.println(dateStr3); 24 }
【2】把特定的格式的字符串解析成Date對象
public static void main(String[] args) { String str = "2019-04-29 15:48:00"; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 把子串->Date try { Date date = df.parse(str); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); } }
Calendar是日曆類且爲靜態類,所以了方法可直接調用;本質上內部擁有一個屬性longtime,表示該日曆所具體的時間戳。同時Calendar內部經過對time的運算計算出不少日曆字段,把這些字段存在一個容器中,並提供set/get方法用於設置訪問這些字段。
例子
1 // 經過工廠設計模式構建一個對象 2 Calendar cal = Calendar.getInstance(); 3 System.out.println(cal.toString()); 4 5 6 // 獲取年 7 System.out.println(cal.get(Calendar.YEAR)); 8 // 獲取月,索引從0開始,0-表示1月 9 System.out.println(cal.get(Calendar.MONTH)); 10 System.out.println(cal.get(Calendar.DAY_OF_MONTH)); 11 12 // 時 13 System.out.println(cal.get(Calendar.HOUR_OF_DAY)); 14 // 分 15 System.out.println(cal.get(Calendar.MINUTE)); 16 // 秒 17 System.out.println(cal.get(Calendar.SECOND)); 18 System.out.println(cal.get(Calendar.MILLISECOND)); 19 20 // 獲取星期 一週的第一天是週日開始 21 System.out.println(cal.get(Calendar.DAY_OF_WEEK)); 22 23 24 // 本月的第一天和本月的最後一天 25 System.out.println(cal.getActualMinimum(Calendar.DAY_OF_MONTH)); 26 System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
Math 類包含用於執行基本數學運算的方法。例如,隨機數、平方、立方。
1 public static void main(String[] args) { 2 3 // 經常使用屬性 4 System.out.println(Math.PI); 5 6 // 經常使用方法 7 // 絕對值 8 System.out.println(Math.abs(-10)); 9 10 // ceil/floor 11 // 返回比10.1大的最小整數=> 向上取整 12 System.out.println(Math.ceil(10.1)); 13 // 返回比10.1小的最大整數=> 向下取整 14 System.out.println(Math.floor(10.1)); 15 16 17 // max/min 18 System.out.println(Math.max(10, 20)); 19 System.out.println(Math.min(10, 20)); 20 21 // pow(x,y) x的y次方 22 System.out.println(Math.pow(2, 3)); 23 24 25 // Math.random 隨機數 26 // 產生[m,n]隨機整數 <=> (int)(Math.random()*(n-m+1)) + m 27 28 // 四捨五入 29 System.out.println(Math.round(4.4)); 30 31 // 把弧度轉角度 32 System.out.println(Math.toDegrees(Math.PI/2)); 33 // 把角度轉化成弧度 34 System.out.println(Math.toRadians(180)); 35 36 // (C)sin(a)/cos(a)/tan(a) 37 System.out.println(Math.sin(Math.toRadians(30))); 38 39 // 需求:求兩點之間的距離(x1,y1)-(x2,y2)的距離。 40 // Math.sqrt(Math.pow((y1-y2), 2)+Math.pow((x1-x2),2)) 41 }