嘗試以MarkdownPad2方式寫博客,感覺十分有條理,第一次使用花的時間較長,但是熟能生巧,後面會越用越熟練,更快吧~
1. 模板設計模式
(1).模板方法模式就是定義一個算法的骨架,而將具體的算法延遲到子類來實現
(2)優點:使用模板方法模式,在定義算法骨架的同時,可以很靈活的實現具體的算法,滿足用戶靈活多變的需求
(3)缺點:如果算法骨架有修改的話,則需要修改抽象類
實現代碼~
package pra_25;
public class J_48 {
public static void main(String[] args) {
songetTime st=new songetTime();
System.out.println(st.getTime());
}
}
abstract class getTime{
public final long getTime(){
long s=System.currentTimeMillis();
code();
long e=System.currentTimeMillis();
return e-s;
}
public abstract void code();
}
class songetTime extends getTime{
@Override
public void code() {
int i=0;
while(i<10000){
System.out.println(i);
i++;
}
}
}
2.枚舉類
枚舉:是指將變量的值都列出來,變量的值只限於列舉出來的值的範圍內。如:一週只有七天。
枚舉類的注意事項:
1)定義枚舉類要用關鍵字enum
2)所有枚舉類都是用Enum的子類
3)枚舉類的第一行上必須是枚舉項,最後一個枚舉項後的分號是可以省略的,但是如果枚舉類有其他的東西,這個分號就不能省略
4)枚舉類可以有構造器。但必須是private的,它默認的也是private
5)枚舉類也可以有抽象方法,但是枚舉項必須重寫該方法
6)枚舉在switch語句中可以使用
自定義實現枚舉類:
package pra_25;
public class J_49 {
/**
* @param args
*/
public static void main(String[] args) {
//枚舉方式1.空參構造
Week mon=Week.Mon;
Week tue=Week.Tue;
System.out.println(mon);
//枚舉方式2.有參構造
Week2 mon2=Week2.Mon;
System.out.println(mon2.getName());
//枚舉方式3.加了抽象類,抽象方法,只能定義一個匿名內部類,然後重寫其方法
Week3 mon3=Week3.Mon;
mon3.show();
}
}
class Week{ //私有構造,不讓其他類創建本類對象
public static final Week Mon=new Week();
public static final Week Tue=new Week();
private Week(){
}
}
class Week2{ //私有構造,不讓其他類創建本類對象
public static final Week2 Mon=new Week2("週一");
public static final Week2 Tue=new Week2("週二");
private String name;
private Week2(String name){
this.name=name;
}
public String getName() {
return name;
}
}
abstract class Week3{ //私有構造,不讓其他類創建本類對象
public static final Week3 Mon=new Week3("週一"){
public void show(){
System.out.println("週一");
}
};
public static final Week3 Tue=new Week3("週二"){
public void show(){
System.out.println("週二");
}
};
private String name;
private Week3(String name){
this.name=name;
}
public String getName() {
return name;
}
public abstract void show();
}
通過enum實現枚舉類
package pra_25;
public class J_50 {
/**
* @param args
*/
public static void main(String[] args) {
//無參
Month j=Month.Jan;
System.out.println(j); //Jan
//有參
Month2 f=Month2.Feb;
System.out.println(f.getName());
//方法
Month3 m=Month3.Mar;
m.show();
}
}
//枚舉方式1
enum Month{
Jan,Feb,Mar; //空參構造
}
//枚舉方式2
enum Month2{
Jan("一月"),Feb("二月"),Mar("三月");
private String name;
private Month2(String name){
this.name=name;
}
public String getName() {
return name;
}
}
//枚舉方式3
enum Month3{
Jan("一月"){
public void show(){
System.out.println("一月");
}
},Feb("二月"){
public void show(){
System.out.println("二月");
}
},Mar("三月"){
public void show(){
System.out.println("三月");
}
};
private String name;
private Month3(String name){
this.name=name;
}
public String getName() {
return name;
}
public abstract void show();
}
枚舉類的常見方法
int ordinal()
int compareTo(E o)
String name()
String toString()
<T> T valueOf(Class<T> type,String name)
values()
這裏注意一下:因爲尖括號或出現問題,所以這裏建議用<對<>進行處理
package pra_25;
import pra_25.J_50;
public class J_51 {
public static void main(String[] args) {
Month2 J=Month2.Jan;
Month2 F=Month2.Feb;
//枚舉項都是由編號的
System.out.println(J.ordinal());//0
System.out.println(F.ordinal());//1
//比較的是編號
System.out.println(J.compareTo(F)); //-1
//獲取實例的名稱
System.out.println(J.name()); //Jan
//通過字節碼對象,獲取枚舉項
Month2 j2=Month2.valueOf(Month2.class,"Jan");
System.out.println(j2);
//獲取每一個枚舉項
Month2[] arr=Month2.values();
for (Month2 month2 : arr) {
System.out.println(month2);
}
}
}