黑馬程序員-Java高新技術(一)

------- android培訓java培訓、期待與您交流! ----------

Eclipse的使用技術
工欲善其事,必先利其器

 

MyEclipse和Eclipse的區別
  MyEclipse是Eclipse的插件,我們先安裝上Eclipse,而MyEclipse就是在Eclipse基礎上加一個插件,擴展了
Eclipse的功能,讓它可以開發J2EE的程序,就是WEB項目。每次我們都要下載Eclipse,安裝Eclipse,再下載
MyEclipse插件再安裝MyEclipse插件,於是MyEclipse廠商想到能不能把它們打包成一體化?你下載一個東西,
打包的工具,下載下來再安裝,就連Eclipse以及MyEclipse插件都安裝好了,就免得你再分步驟安裝了。


Workspace與project-工作空間與工程
一個Workspace可以包含多個project,一個workspace保留了eclipse的一套環境選項的配置,例如,所使用的
javac和java命令,等等。細節查看window-->Preferences。如果要爲eclipse再配製一套環境選項,可以再創
建一個workspace。Package explorer視圖窗口中的files菜單項。

IDE開發工具都支持使用工程化方式管理一個項目的程序開發過程,一般來說一個相對獨立的項目就是一個工程,
一個項目中涉及的多個java文件,資源文件等用一個工程進行管理。


Perspective與View-透視圖和視圖
一個Perspective代表了若干個view的集合,如何顯示各種view。


設置單個工程的javac與java
  |--高版本的java能否運行低版本的javac編譯程序?能
  |--低版本的java能否運行高版本的javac編譯程序?不能
工作空間設置:
  編譯版本的設置:window -- Preferences -- java -- Compiler
  運行版本的設置:window -- Preferences -- java -- Installed JREs
單個工程:
   編譯版本的設置:右擊工程 -- Properties -- java Compiler
   運行版本的設置:右擊工程 -- Run As -- Run Configurations -- JRE
多想一想:
   eclipse工作空間中的所有工程繼承工作空間的配置,其中某個工程也可以
   覆蓋工作空間的配置!這是不是java面向對象的思想啊?


代碼模板
  添加新模板
window -- Preferences -- Java -- Editor -- Content Assist -- Templates -- New 
  原來的內容:line_selection
  光標位置:cursor
使用模板
  選中內容 -- 右擊 -- Surround With -- 模板

 
知識點加強-JDK1.5新特性
1.靜態導入
  import語句可以導入一個類或某個包中的所有類
  import static語句導入一個類中的某個靜態方法或所有靜態方法
  語法舉例:
  import static java.lang.Math.sin;
  import static java.lang.Math.*;
2.可變參數
可變參數的特點:
只能出現在參數列表的最後
...位於變量類型和變量名之間,前後有無空格都可以;
調用可變參數的方法時,編譯器爲該可變參數隱含創建
一個數組,在方法體中以數組的形式訪問可變參數。
例:

public static void main(String[] args)  {  
    System.out.println(add(1,2));  
    System.out.println(add(2,3,4));  
}  
public static int add(int x,int ... args)  {  
    int sum = x;  
    for(int i = 0; i < args.length; i++)  {  
        sum += args[i];  
    }  
    return sum;  
}  



增強for循環
語法:
for(type 變量名:集合變量名)
{...}
迭代,如上面add方法for循環:
for(int arg : args){
sum += arg;
}
注意:
迭代變量必須在()中定義!
集合變量可以是數組或實現了Iterable接口的集合類


基本數據類型的自動拆箱與裝箱
Inter num1 = 12;
裝箱:自動把一個基本數據類型裝成了Integer對象,再賦給了引用變量。
System.out.println(num1 + 3);
拆箱:把一個引用類型變量拆箱成一個基本類型數據。
Integer i1 = 5; 
Integer i2 = 5; 
System.out.println(i1 == i2);//true 
 
Integer i1 = 136; 
Integer i2 = 136; 
System.out.println(i1 == i2);//false 


byte常量池
對於這些基本數據整數要裝箱成Integer對象的時候,如果這
個數據在1字節(-128 ~ 127)的數字,就緩存起來,在一個池
裏,叫byte常量池,如果把一個整數裝成Integer對象,是一
個字節以內的話,先看池子裏面有沒有,如果有直接從池子裏
面拿來個。這樣節省了內存空間。
這是一種設計模式
叫做享元模式。(flyweight)
什麼叫享模式:
就是有很多個小的對象,他們有很多屬性相同,把他們
    變成一個對象,那些不同的屬性,把它們變爲方法的參數,
    稱之爲外部狀態,那些相同的屬性的稱之爲這個對象的內部
    狀態。
應用:
1.word中輸入英文字母,可創建26對象,每個對象值是出現的位置不同(座標),所以可用一個對象調用位置的方法:
如,字母i:i.display(intx,int y),將高度重複使用的char類型的字母i封裝成一個對象使用。
2.圖標:window下的文件夾圖標,只喲名稱這個屬性不同,包含了很多其他相同的屬性,那麼可以應用享元模式。


枚舉(1.5新特性)
1.通過enum定義枚舉類,在其中列出所有同類的元素常量值作爲子類的實例對象使用。枚舉類是一個特殊的類,
每個元素都是該類的一個實例對象。
2.用枚舉類規定值,WeekDay類。以後用此類型定義的值只能是這個類中規定好的那些值,若不是這些值,編譯器不會通過。
3.如果調用者想打印枚舉類中元素的信息,需由編寫此類的人定義toString方法。
4.採用抽象方法定義的nextDay可將大量的if else語句轉換成了一個個獨立的類。
5.如果想在一個類中編寫完每個枚舉類和測試調用類,那麼可將枚舉類定義成調用類的內部類。

實例:

public abstract class WeekDayTest {    
    public WeekDayTest(){}    
    public final static WeekDayTest SUN = new WeekDayTest(){    
        public WeekDayTest nextDay(){    
            return MON;    
    	}  
    };    
    public final static WeekDayTest MON = new WeekDayTest(){    
        public WeekDayTest nextDay() {    
            return SUN;    
    	}  
    };    
    public abstract WeekDayTest nextDay();    
    public String toString(){    
        return this==SUN ? "SUN" : "MON";    
    }  
}  

好處:在編譯時期就會發現錯誤,表明值不符合,減少了運行時期的錯誤。

 

枚舉類
是一個class,而且是一個不可被繼承的final類,其中的元素都是類靜態常量。

 

枚舉的特徵及用法示例:

public class EnumText {    
    public static void main(String[] args) {    
        WeekDayTest weekDay = WeekDayTest.MON;      
        System.out.println(weekDay.nextDay());      
            
        WeekDay weekDay2 = WeekDay.FRI;    
        System.out.println("獲取此對象:" + weekDay2);    
        System.out.println("獲取對象名稱:" + weekDay2.name());    
        System.out.println("獲取排行:" + weekDay2.ordinal());    
        System.out.println("獲取類名:" + weekDay2.getClass());    
        //靜態方法:    
        System.out.println("通過字符串獲取對象:"+WeekDay.valueOf("SUN"));    
        System.out.println("將元素存入數組:"+WeekDay.values().length);    
            
    }    
    //定義星期枚舉類    
    public enum WeekDay{    
        SUN(1),MON,TUE,WED,THI,FRI,SAT;    
        private WeekDay(){    
            System.out.println("first");    
        }    
        private WeekDay(int x){    
            System.out.println("second");    
        }    
    }    
    //定義交通燈    
    public enum TrafficLamp{    
        //定義3個元素,即此類的子類,覆寫抽象方法    
        RED(30){    
            public TrafficLamp nextLamp() {    
                return GREEN;    
        }  
    },    
        GREEN(45){    
            public TrafficLamp nextLamp() {    
                return YELLOW;    
        }  
    },    
        YELLOW(5) {    
            public TrafficLamp nextLamp() {    
                return RED;    
        }  
    };    
        private int time;    
        //構造方法    
        private TrafficLamp(int time){this.time = time;}    
        //抽象方法,轉爲下個燈    
        public abstract TrafficLamp nextLamp();    
    }    
}    



構造器:
1.構造器只是在構造枚舉值的時候被調用。
2.構造器只有私有private,絕不允許有public構造器。這樣可以保證外部代碼無法重新構造枚舉類的實例,這樣是合情合理的,因爲枚舉值是public static final的常量,但是枚舉類的方法和數據域是可以被外部訪問的。
3.構造器可以有多個,調用哪個即初始化相應的值。


所有的枚舉類都繼承了Enum方法,方法如下:
1.toString() ---> 返回枚舉量的名稱
2.ordina() ---> 返回枚舉值在枚舉類中的順序,按定義的順序排
3.getClass() ---> 獲取對應的類名

 

靜態方法:
1.valueOf(String e) ---> 轉爲類中對應的對象,即將字符串轉爲對象
2.values() ---> 獲取數組,將元素放入一個數組中。

注意:
1.元素列表即所有的元素項目,必須放在整個類的最前面。
2.元素列表後要有分號
3.枚舉類中的方法爲private
4.在元素後跟上(),就可指定要使用的構造方法,含參數。
5:枚舉類中的每個元素都是它的一個子類對象,當枚舉類中存在abstract方法,須在子類後加{},並在其中實現此方法。

 

總結:
1.匿名內部類比較常用
2.類的方法返回的類型可以是類的類型
3.類中可定義靜態常量,常量的結果就是自己這個類型的實例對象
4.如果枚舉只有一個成員,就可以作爲一種單利的實現方式,對象只有一個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章