1. 程式人生 > >JAVASE學習總結(二)

JAVASE學習總結(二)

                Collections.fill(list,student1);
                Collections.replaceAll(list,studnet1,student5);
        }
}

5.泛型
        將物件的型別作為引數,指定到其它類或者方法上,從而保證型別轉換的安全性和穩定性,這就是泛型。泛型的本質就是引數化型別。 
        建立集合時使用泛型指定集合中元素的型別,從集合中取出元素時無需進行強制型別轉換。如果把非指定型別的元素放入集合時,會提示編譯錯誤。
        示例:
                Map<String,Stduent> students = new HashMap<String,Student>();
                students.put("Jack",student1);
                students.put("Jose",student2);
                for(String key:students.keySet()){//遍歷key值
                        System.out.println(key);//key無需再強制型別轉換
                } 
                for(Student stu:students.values()){ //stu無需再強制型別轉換
                        Sytem.out.println(stu.getName()+" "+stu.getSex())
                }
                Iterator it = studnets.iterator();
                while(it.hasNext()){
                        Studnet stus = it.next();//   it.next()獲取到的物件無需再強制型別轉換
                        System.out.println(stus.getName()+" "+suts.getSex());
                }
學習泛型還需瞭解兩個重要的概念:
        a.引數化型別:引數化型別包含了一個類或者介面,以及實際的型別引數列表。
        b.型別變數:是一種非限定性識別符號,用來指定類、介面或者方法的型別。

二、JAVA中常用的實用類
        1.JAVA API
                API除了有“應用程式程式設計介面”的意思外,還特指API幫助文件。
                API提供了以下常用的包:
                java.lang 包含了java程式的基礎類和介面。如包裝類、Math類、String類等
                java.util  包含了系統輔助類或者工具類。如Collection、list、Map等集合類等
                java.io    包含了輸入輸出有關的類。如InputStream \OutputStream 、Reader\Writer類等
                java.net  包含了與網路有關的類。如:Socket、ServerSocket類等
                java.sql   包含了與資料庫有關的類。如:Connection、Statement類等 
        2.列舉類
                列舉類是由一組固定的常量組成的類,使用關鍵字enum定義。
                例如定義標識性別的列舉類:
                public enum Genders{       //使用關鍵字enum而且修飾符一般為public
                        Male,Female           //各個常量之間用","隔開
                }
                示例:
                public enum Week{     //定義列舉類
                        MON,TUE,WED,THR,FRI,SAT,SUN
                }
                class WeekDemo{
                public void doWhat(Week day){
                        switch(day){
                                case MON:
                                case TUE:
                                case WED:
                                case THU:
                                case FRI:
                                        System.out.println("工作日,努力工作");
                                        break;
                                case SAT:
                                case SUN:
                                        System.out.println("休息日,釣魚、看電影");
                                        break;
                                default:
                                        System.out.println("一個星期就7天");
                        }
                }
                public static void main(String[] args){
                        WeekDemo wd = new WeekDemo();
                        wd.doWhat(Week.THU);
                        wd.doWhat(Week.SAT);
                }
              }
        在程式中使用列舉類的好處:
                a.是程式碼易於維護,有助於確保為變數指定合法、期望的值。
                b.便於輸入,使用列舉賦值,只需在列舉名後面輸入“.”就能將所有列舉值顯示出來。
    3.包裝類
        JAVA語言是面向物件的,但JAVA中的基本資料型別卻不是面向物件的,為了解決這個不足,JAVA為8個基本資料型別都分別設計了一個對應的類,稱為包裝類。
        包裝類的主要用途有兩個:
        a.包裝類作為和基本資料型別對應的類存在,方便物件的操作。
        b.包裝類包含了每種基本資料型別的相關屬性,如最大、最小值以及相關的操作方法。
       
        包裝類和基本資料型別的轉換
            1.基本資料型別轉換成包裝類
                a>使用包裝類的兩個構造方法
                public Type(type value)
                public Type(String value)
                使用new關鍵字將一個基本資料型別的值包裝成一個物件。如,要把int包裝成Integer類
                int x = 21;
                Integer intX = new Integer(21); //第一種構造方法public Type(type value)
                Integer intX = new Integer("21");//第二種構造方法public Type(String value)
                char y = w;
                Character charY = new Character('w');//正確
                Character charY = new Character("w"); //這種形式是錯誤的,因為char y是字元,不是字串
                b>使用包裝類的方法valueOf()
                如:
                Integer intX = Integer.valueOf("21"); //正確
                Character charY = Character.valueOf("w");//錯誤,y是char型別不是String型別
                Character charY = Character.valueOf('w');正確
            2.包裝類轉換成基本資料型別
                方法:public type typeValue(); 如:byteValue()、charValue()分別返回byte、char值。
                Integer integer = new Integer(25);
                int intX = integer.intValue()//呼叫Integer包裝類的intValue()方法
            3.基本資料型別和包裝類自動轉換
                JAVA5.0之後,實現了包裝類和基本資料型別的自動轉換,編譯器會自動完成。
                如:
                Integer intObject = 5;//基本資料型別轉換成包裝類
                int intValue = intObject; //包裝類轉換成基本資料型別
            注:包裝類物件只有在基本資料型別需要用物件來表示時才使用,並不是用來取代基本資料型別的。否則相互轉換會增加系統的額外負擔。
    4.Math類
            java.lang.Math類是一個final類,提供了一些基本數學運算和幾何運算的方法。 
            Math類常見的方法有:
            static double abs(double a)   返回double值得絕對值。如:Math.abs(-3.3);返回3.3
            static double max(double a,double b) 返回最大值。如:Math.max(2.5,6.3);返回6.3
            static double random();隨機返回一個double值,該值大於等於0.0且小於1.0  (>=0.0&&<1.0)
            如:隨機產生0-9的數
            int number = (int)(Math.random()*10);
    5.String類
            String類提供了很多方法,如,獲取字串的長度,比較、連線、提取、替換等等。
            a>length()返回字串的長度
            b>equals()比較兩個字串的值是否相同。str1.equals(str2);
                注:java中"=="和equals()方法應用於字串時,所判斷的內容是不同的。"=="判斷的是兩個字串在記憶體中的地址是否相同,也就是判斷是否是同一個物件,而equals()判斷的是兩個字串的值是否相等。用equals()比較兩個字串"java"和"JAVA"時是不相等的,但他們都是同一門課程,因此需要使用另一個方法equalsIgnoreCase()方法。這個方法比較字串時會忽略字元的大小寫。
            c>equalsIgnoreCase()//忽略大小寫
                toLowerCase()//轉換成小寫
                toUpperCase() //轉換成大寫
            d>concat()方法//連線字串。如:str1.concat(str2);返回一個新的字串str1str2
                連線字串也可以用"+"來連線
            e> indexOf(int ch)
                indexOf(String str)  //搜尋第一個出現的字元ch(字串str)
                lastIndexOf(int ch)
                lastIndexOf(String str)//搜尋最後一個出現的字元ch(字串str)
                substring(int index)//提取從索引位置開始的字串部分
                substring(beginindex,endindex)//提取兩個索引之間的字串部分
                trim()//返回一個前後不含任何空格的字串副本
                示例:判斷郵箱名稱和JAVA檔名稱是否合法
                 public class Test{
                    public static void main(String[] args){
                            boolean fileflag = false;//檔案訊號量標識
                            boolean mainflag = false;//郵箱標識
                            Scanner input = new Scanner(System.in);
                            String filename = input.next();
                            String mailname = input.next();
                            //檢查JAVA檔名是否合法
                            int index = filename.lastIndexOf(‘.’);//"."的位置
                            if(index!=-1&&index!=0&&filename.substing(index+1,filename.length()).equals("java")){
                                    fileflag = true;
                            }else{
                                    System.out.println("檔名無效");
                            }
                            //檢查郵箱格式是否合法
                            if(mailname.indexOf(‘@’)!=-1&&mailname.indexOf(‘@’)!=0&&mailname.indexof(‘.’)>mailna
                            me.indexOf(’@‘)){
                                        mailflag = true;
                            }else{
                                        System.out.println("無效的郵箱名");
                            }
                            if(fileflag&&mailflag){
                                    System.out.println("提交成功");
                            }else{
                                    System.out.prinltn("提交失敗");
                            }
                    }
            }
            f> split()//拆分字串
            示例:關鍵程式碼:
                String words ="abc+def+ghi+jkl";
                String[] word = new String[10];
                word = words.split("+");//將字串按"+"拆分
                for(String str:word){
                        System.out.println(str);
                }
        6.StringBuffer類和StringBuilder類
        StringBuffer類的宣告和初始化
            StringBuffer sb = new StringBuffer("浪子回頭");
        StringBuffer常用的方法
            a> toString() //轉換為字串型別
            b> append() //追加字串 str.append(args); 該方法不同於String的concat()方法的是StringBuffer類可
                                以將任何型別的值追加到字串後面。
                示例:
                //關鍵程式碼:
                StringBuffer sb = new StringBuffer("浪子回頭");
                StringBuffer sb2 = sb.append("金不換");
                int num = 100000000;
                StringBuffer sb3 = sb2.append(num);//追加了一個int型別的整數
                System.out.println(sb3);
                執行結果:浪子回頭金不換100000000
            c> insert(index,args)方法   將引數插入到指定的位置後返回,引數可以是任何型別。
                示例:從後往前每隔3位插入","
                String num = "1234567890";
                StringBuffer sb = new StringBuffer(num);
                for(int i=sb.length()-3;i>0;i=i-3){
                        sb.insert(i,',');
                }
                System.out.prinltn(sb.toString());
        StringBuilder類
            StringBuilder類是一個可變的字元序列,此類提供一個與StringBuffer相容的API,它比StringBuffer實
                                現快。
 7.String 、StringBuffer、StringBuilder的區別
         String:字串常量                   
                String 是不可變的物件,在每次對String進行改變的時候其實等於生成了一個新的String物件,然後
                            指向新的String物件地址。
        StringBuffer: 字串變數
                StringBuffer是可變的字串,在每次對StringBuffer物件進行改變時,會對StringBuffer自身進行
                            操作,而不會形成新的物件。在字串連線操作中,Stringbuffer比String效率
        StringBuilder: 字串變數
                StringBuilder它與StringBuffer類等價,區別在於StringBuffer類是執行緒安全的,StringBuilder類是
                            單執行緒的,不提供同步。
8.日期和時間類
        Date類、Calendar類、SimpleDateFormat類等
        Date date = new Date();//獲取系統當前時間
        Calendar類是Date類的增強版,它是個抽象類,可以通過靜態方法getInstance()方法獲得Calendar物件
        SimpleDateFormat類用來格式化時間
        示例:關鍵程式碼:
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        System.out.println("當前時間為:"+sdf.format(date));
        輸出結果:當前時間為:2013年8月30日 14:47:34
        Calendar示例關鍵程式碼:
        Calendar c = Calendar.getInstance();
        System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"
            +c.get(Calendar.DAY_OF_MONTH)+"日"); 
        Ststem.out.println("星期"+(c.get(Calendar.DAY_OF_WEEK)-1);
9.Random類
        Random類用於生成隨機數。
        構造方法:Random()/Random(long seed)種子隨機數生成器
        示例:生成10個10以內大於或等於0的整數
            Random rand = new Random(100);
            Random rand2 = new Random(100)
            for(int i=0;i<10;i++){
                    int num = rand.nextInt(10);
                    System.out.println("第"+(i+1)+"個隨機數為:"+num);
            } 
            for(int i=0;i<10;i++){
                    int num2 = rand2.nextInt(10);
                    System.out.println(