1. 程式人生 > >javaSE總結(4)

javaSE總結(4)

1. 子父類間異常的注意事項:

     子類重寫父類方法時只能丟擲相同異常或者該異常的子類。

     如果父類方法沒有丟擲異常,子類進行方法重寫時,只能通過try catch進行捕獲。

2.  IO體系:

      InputStream/OutputStream  位元組流的抽象類。               Reader/Writer       字元流的抽象類。

      FileInputStream/FileOutputStream 節點流(操作檔案)    ByteArrayInputStream/ByteArrayOutputStream  節點流

      ObjectInputStream/ObjectOutputStream  處理流(操作物件)  

      DataInputStream/DataOutputStream(操作基本資料型別與字串)

       FileReader/FileWriter  節點流(操作檔案)     BufferedReader/BufferedWriter(處理流,增加快取功能,提高讀寫效率。)

       BufferedInputStream/BufferedOutputStream(處理流,增加快取功能,提高讀寫效率。)

       InputStreamReader/OutputStreamWriter(處理流:將位元組流物件轉化成字元流物件。)

3. 序列化:把Java物件轉換為位元組序列的過程稱為物件的序列化。

    反序列化:把位元組序列恢復為Java物件的過程稱為物件的反序列化。

4. 序列化涉及的類和介面

   ObjectOutputStream代表物件輸出流,它的writeObject(Object obj)方法可對引數指定的obj物件進行序列化。

   ObjectInputStream代表物件輸入流,它的readObject()方法輸入流中讀取位元組序列,再把它們反序列化為一個物件。

   只有實現了Serializable介面的類的物件才能被序列化。 Serializable介面是一個空介面,只起到標記作用。

5. 物件中的某些屬性如果不想被序列化,不能使用static,而是使用transient修飾。

6. java.lang包下的包裝類:八種基本資料型別都有對應的包裝類,分別是:

    Byte  Short   Integer  Long  Float Double  Character  Boolean

7. 包裝類的主要用途:作為和基本資料型別對應的型別存在,方便涉及到物件的操作,如Object[]、集合等的操作。

8. 如果資料在-128~127這個區間,那麼在類載入時就已經為該區間的每個數值建立了物件。

public class Test3 {
    public static void main(String[] args) {
        Integer in1 = -128;
        Integer in2 = -128;
        System.out.println(in1 == in2);//true 因為123在快取範圍內
        System.out.println(in1.equals(in2));//true
        Integer in3 = 1234;
        Integer in4 = 1234;
        System.out.println(in3 == in4);//false 因為1234不在快取範圍內
        System.out.println(in3.equals(in4));//true
    }
}

9. 自動裝箱呼叫的是valueOf()方法。自動拆箱呼叫的xxxValue()方法。

10. DateFormat是一個抽象類,一般使用它的的子類SimpleDateFormat類來實現時間和字串之間的轉換。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat {
    public static void main(String[] args) throws ParseException {
        // new出SimpleDateFormat物件
        SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd");
        // 將時間物件轉換成字串
        String daytime = s1.format(new Date());
        System.out.println(daytime);
        System.out.println(s2.format(new Date()));
        System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
        // 將符合指定格式的字串轉成成時間物件.字串格式需要和指定格式一致。
        String time = "2007-10-7";
        Date date = s2.parse(time);
        System.out.println("date1: " + date);
        time = "2007-10-7 20:15:30";
        date = s1.parse(time);
        System.out.println("date2: " + date);
    }
}

11. 日曆類:Calendar 類是一個抽象類,GregorianCalendar 是 Calendar 的一個具體子類。

12. 列舉:JDK1.5引入了列舉型別。列舉型別的定義包括列舉宣告和列舉體。格式如下:

enum  列舉名 {
      列舉體(常量列表)
}
import java.util.Random;
public class TestEnum {
    public static void main(String[] args) {

        // switch語句中使用列舉
        int a = new Random().nextInt(4); // 生成0,1,2,3的隨機數
        switch (Season.values()[a]) {
        case SPRING:
            System.out.println("春天");
            break;
        case SUMMER:
            System.out.println("夏天");
            break;
        case AUTUMN:
            System.out.println("秋天");
            break;
        case WINDTER:
            System.out.println("冬天");
            break;
        }
    }
}
/**季節*/
enum Season {
    SPRING, SUMMER, AUTUMN, WINDTER//列舉例項預設都是public static final修飾的。
}

13. 程序執行中的程式叫做程序(Process),是一個動態的概念。現代的作業系統都可以同時啟動多個程序。比如:在用酷

                 狗聽音樂,也可以使用eclipse寫程式碼,也可以同時用瀏覽器檢視網頁。

14. 執行緒:執行緒是一個程序內部的一個執行單元,它是程式中的一個單一的順序控制流程。 一個程序可以產生多個執行緒。

15. java中實現多執行緒的兩種方式:

      通過繼承Thread類實現多執行緒  :

public class TestThread extends Thread {//自定義類繼承Thread類
    //run()方法裡是執行緒體
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(this.getName() + ":" + i);//getName()方法是返回執行緒名稱
        }
    }
 
    public static void main(String[] args) {
        TestThread thread1 = new TestThread();//建立執行緒物件
        thread1.start();//啟動執行緒
        TestThread thread2 = new TestThread();
        thread2.start();
    }
}

       通過Runnable介面實現多執行緒:

public class TestThread2 implements Runnable {//自定義類實現Runnable介面;
    //run()方法裡是執行緒體;
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }
    public static void main(String[] args) {
        //建立執行緒物件,把實現了Runnable介面的物件作為引數傳入;
        Thread thread1 = new Thread(new TestThread2());
        thread1.start();//啟動執行緒;
        Thread thread2 = new Thread(new TestThread2());
        thread2.start();
    }
}

16. 執行緒的五個狀態:建立  就緒  執行  阻塞  死亡

      start()方法從建立狀態到就緒狀態。  獲得cpu,通過run方法進入執行狀態。  sleep(int millsecond)+wait()+join()三種方法

      可使執行緒進入阻塞狀態。

17 . 終止執行緒的典型方式:

public class TestThreadCiycle implements Runnable {
    String name;
    boolean live = true;// 標記變數,表示執行緒是否可中止;
    public TestThreadCiycle(String name) {
        super();
        this.name = name;
    }
    public void run() {
        int i = 0;
        //當live的值是true時,繼續執行緒體;false則結束迴圈,繼而終止執行緒體;
        while (live) {
            System.out.println(name + (i++));
        }
    }
    public void terminate() {
        live = false;
    }
 
    public static void main(String[] args) {
        TestThreadCiycle ttc = new TestThreadCiycle("執行緒A:");
        Thread t1 = new Thread(ttc);// 新生狀態
        t1.start();// 就緒狀態
        for (int i = 0; i < 100; i++) {
            System.out.println("主執行緒" + i);
        }
        ttc.terminate();
        System.out.println("ttc stop!");
    }
}

18. sleep()方法:可以讓正在執行的執行緒進入阻塞狀態,直到休眠時間滿了,進入就緒狀態。

19. yield()方法:可以讓正在執行的執行緒直接進入就緒狀態,讓出CPU的使用權。

20. 執行緒A在執行期間,可以呼叫執行緒B的join()方法,讓執行緒B和執行緒A聯合。這樣,執行緒A就必須等待執行緒B執行完畢後,才能

      繼續執行。

public class TestThreadState {
    public static void main(String[] args) {
        System.out.println("爸爸和兒子買菸故事");
        Thread father = new Thread(new FatherThread());
        father.start();
    }
}
 
class FatherThread implements Runnable {
    public void run() {
        System.out.println("爸爸想抽菸,發現煙抽完了");
        System.out.println("爸爸讓兒子去買包紅塔山");
        Thread son = new Thread(new SonThread());
        son.start();
        System.out.println("爸爸等兒子買菸回來");
        try {
            son.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("爸爸出門去找兒子跑哪去了");
            // 結束JVM。如果是0則表示正常結束;如果是非0則表示非正常結束
            System.exit(1);
        }
        System.out.println("爸爸高興的接過煙開始抽,並把零錢給了兒子");
    }
}
 
class SonThread implements Runnable {
    public void run() {
        System.out.println("兒子出門去買菸");
        System.out.println("兒子買菸需要10分鐘");
        try {
            for (int i = 1; i <= 10; i++) {
                System.out.println("第" + i + "分鐘");
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("兒子買菸回來了");
    }
}