IO流:
四個頂層抽象類:
字節(jié)流: ? ? ?字節(jié)流可以操作任何數(shù)據(jù),但是操作純文本時容易出現(xiàn)亂碼
OutputStream(字節(jié)輸出流)----->FileOutputStream(具體操作類);
InputStream(字節(jié)輸入流)----->FileInputStream(具體操作類);
字符流: ? ? 字符流用于操作純文本數(shù)據(jù)
1. ? ? Reader(字符輸入流)--->InputStreamReader(轉(zhuǎn)換流:把字節(jié)流轉(zhuǎn)化成字符流)--->FileReader(具體操作流)--->BufferedReader(高效流)
2. ? ? ?Writer(字符輸出流)---->OutputStreamWriter(轉(zhuǎn)換流:把字符流轉(zhuǎn)化成字節(jié)流)--->FileWriter(具體操作流)--->BufferedWriter(高效流)
File類-->FileReader/Writer類-->outputStreamWriter/inputStreamReader類||BufferedWriter/BufferedReader類
File file = new File("路徑");//File最常見的構(gòu)造
FileReader fr = new FileReader(file);//普通流構(gòu)造時里面放的是File類型的對象
BufferedReader br = new BufferedReader(fr)//高效流構(gòu)造時里面放的是普通流
* BufferedReader高效字符流特殊方法
* public String readLine()??一次讀一行崖堤,如果讀到末尾返回null
* BufferedWriter高效字符流特殊方法
* public void newLine()??換行
異常體系:exception和Error都繼承于祖類throwable,
exception又分為RunTimeException與非RunTimeException
異常的處理方式
父類沒有的異常子類肯定沒有,
捕獲異常: ?try/catch
//單異常處理
try{
System.out.println(1/0);
}catch(ArithmeticException e) {
System.out.println("MDZZ!");
}
//多異常處理:(一次捕獲,多個catch處理)先檢測try中哪個出現(xiàn)了異常,然后執(zhí)行對應(yīng)catch中的語句,由于java是中斷異常處理機制,所以直接執(zhí)行下面的非異常處理機制的語句
try{
Dateparse= date.parse(s);
System.out.println(1/0);
}catch(ParseException e) {
System.out.println("這是parse異常");
e.printStackTrace();
}catch(ArithmeticException e){
System.out.println("這是數(shù)學(xué)異常");
System.out.println("MDZZ");
e.printStackTrace();
}
//控制臺上輸出的是:這是parse異常...................還有顯示的位置
//上面的代碼也可以修改成另一種形式(不通用)
try{
Dateparse= date.parse(s);
System.out.println(1/0);
}catch(ParseException e|ArithmeticException e) {//不可能兩個異常都產(chǎn)生,最多只能產(chǎn)生一個異常,因為產(chǎn)生異常之后中斷處理,就不會再執(zhí)行try里面的語句了
System.out.println("這是parse異常");
e.printStackTrace();
}
聲明拋出異常
publicvoidmethod()throwsParseException{//方法后面加throws+可能出現(xiàn)的異常,聲明如果出現(xiàn)異常就將異常拋出,誰調(diào)用誰去處理異常,調(diào)用者也可以選擇繼續(xù)拋出,交給JVM來處理! 如果在定義方法是沒有聲明拋出,那么在方法中出現(xiàn)的異常會直接交給JVM處理!
String s ="2010-11-28";
DateFormat date =newSimpleDateFormat("yyyy-MM!dd");
Dateparse= date.parse(s);
System.out.println(1/0);
}
自定義異常:
定義格式:如果是編譯期異常,則繼承exception,如果是運行期異 常則繼承RuntimeException,
注意:自定義異常需要手動拋出,使用throw拋出
1.創(chuàng)建異常對象:普通的創(chuàng)建對象
2.拋出異常:使用throw,結(jié)束之后表示產(chǎn)生了一個異常
3.處理異常:使用throws或者try/catch來處理
publicclassDemo {
publicstaticvoidmain(String[] args)throwsParseException {
Scanner sc =newScanner(System.in);
//自定義異常的練習(xí)
inti = sc.nextInt();
if(i<50>){
Over50 o50 =newOver50();
throwo50;//手動拋出異常
}
System.out.println("呵呵");
}
classOver50extendsRuntimeException{//定義了over50運行異常類
}
泛型
1.概述:用來靈活地將數(shù)據(jù)類型應(yīng)用到不同的類荸镊、方法醇疼、接口當(dāng)中锐秦。將數(shù)據(jù)類型作為參數(shù)傳遞
2.特點: 泛型的使用只有在創(chuàng)建對象時硫眨,數(shù)據(jù)類型時才能夠確定,在編譯成class文件時會被擦除雹姊,在運行時期會被補償
泛型類:直接在類名后加<變量,通常為E或者T>
使用:創(chuàng)建對象時確定類型
泛型方法:
//簡單的將任意類型的一個t打印出來
publicvoidmethod(T t){
System.out.println(t.toString());
}
泛型接口:
定義格式:直接在接口后面加;
//定義泛型接口
publicinterfaceMyInterface{
publicabstractvoidmethod(T t);
}
//泛型接口的使用
1.定義類時,實現(xiàn)接口,此時將接口中的數(shù)據(jù)類型確定下來,這時的類是沒有泛型的,其所有類型都已經(jīng)確定下來了.
classDemo1implementsMyInterface{
publicvoidmethod(String s) {
}
}
2.定義類時,實現(xiàn)接口,此時接口中的數(shù)據(jù)類型還沒有確定下來,這時的類也應(yīng)該要有泛型,其所有類型要等創(chuàng)建對象的時候才能被定下來.
classDemo1implementsMyInterface{
publicvoidmethod(T t) {
}
}