lo流
input output
異常:exception
程序的異常:分兩種,一種是編譯期間運行,二是運行期間的問題。
編譯期間的問題:Java程序必須進行處理不然不能通過編譯。
運行期間的問題:
是可以編譯處理的,也可以和編譯時異常一樣處理。
我們通過兩種方式來處理異常:
A:try….Catch….finally
try{
//可能出現的問題代碼
}catch(異常名 變量){
}finally{
//釋放資源
}
注意:try裏面的代碼越少越好。
catch要有內容,不然就是隱藏問題。
B:throws
案列演示:
// 第一階段
int a = 10;
// int b = 2;
int b = 0;
try {
System.out.println(a / b);
} catch (ArithmeticException ae) {
System.out.println("除數不能爲0");
}
// 第二階段
System.out.println("over");
throws方法的處理:拋出一個異常。我們沒有能力的時候是拋出異常。
格式:必須跟在方法後面。
throw異常:
在方法內部出現某種情況,程序不能繼續運行,需要進行跳轉,就把throw拋出。
注意:throw拋出的是對象,不是類名。
throws和throw的區別(面試題)
throws
用在方法聲明後面,跟的是異常類名
可以跟多個異常類名,用逗號隔開
表示拋出異常,由該方法的調用者來處理
throws表示出現異常的一種可能性,並不一定會發生這些異常
throw
用在方法體內,跟的是異常對象名
只能拋出一個異常對象名
表示拋出異常,由方法體內的語句處理
throw則是拋出了異常,執行throw則一定拋出了某種異常
面試題:
1:final,finally和finalize的區別
* final:最終的意思,可以修飾類,成員變量,成員方法
* 修飾類,類不能被繼承
* 修飾變量,變量是常量
* 修飾方法,方法不能被重寫
* finally:是異常處理的一部分,用於釋放資源。
* 一般來說,代碼肯定會執行,特殊情況:在執行到finally之前jvm退出了
* finalize:是Object類的一個方法,用於垃圾回收
面試二
2:如果catch裏面有return語句,請問finally裏面的代碼還會執行嗎?
如果會,請問是在return前,還是return後。
會。前。
準確的說,應該是在中間。
* 3:try...catch...finally的格式變形
* A:try...catch...finally
* B:try...catch
* C:try...catch...catch...
* D:try...catch...catch...finally
* E:try...finally
* 這種做法的目前是爲了釋放資源
面試題:
a爲什麼輸出的是30?不是40?
getIn();
System.out.println(getIn());
}
private static int getIn() {
// TODO Auto-generated method stub
int a=10;
try{
System.out.println(a/0);
a=20;
}catch(ArithmeticException e){
a=30;
return a;
}finally{
a=40;
}
return a;
}
File
創建功能:
*public boolean createNewFile():創建文件 如果存在這樣的文件,就不創建了
*public boolean mkdir():創建文件夾 如果存在這樣的文件夾,就不創建了
*public boolean mkdirs():創建文件夾,如果父文件夾不存在,會幫你創建出來
File file =new File("E:\\demo");
System.out.println(file.mkdir());
File file1=new File("E:\\demo\\yan55.txt");
System.out.println(file);
System.out.println(file1.createNewFile());
File file2=new File("E:\\gg\\hh\\jj\\kk\\ll");
System.out.println(file2.mkdirs());
file的刪除功能:
delete();
注意:要刪除一個文件夾,裏面不能包含文件夾。
file的重命名功能:
renameto();
File file=new Filew(“張三.txt”)
File file1=new Filew(“張三.txt”)
systeam.out.pritln(file.renameto(file1));
File 的判斷功能
public boolean isDirectory():判斷是否是目錄
* public boolean isFile():判斷是否是文件
* public boolean exists():判斷是否存在
* public boolean canRead():判斷是否可讀
* public boolean canWrite():判斷是否可寫
* public boolean isHidden():判斷是否隱藏
File file = new File(“a.txt”);
System.out.println("isDirectory:" + file.isDirectory());// false
System.out.println("isFile:" + file.isFile());// true
System.out.println("exists:" + file.exists());// true
System.out.println("canRead:" + file.canRead());// true
System.out.println("canWrite:" + file.canWrite());// true
System.out.println("isHidden:" + file.isHidden());// false
File的獲取功能
獲取功能:
* public String getAbsolutePath():獲取絕對路徑
* public String getPath():獲取相對路徑
* public String getName():獲取名稱
* public long length():獲取長度。字節數
* public long lastModified():獲取最後一次的修改時間,毫秒值
案列:
// 創建文件對象
File file = new File(“demo\test.txt”);
System.out.println("getAbsolutePath:" + file.getAbsolutePath());
System.out.println("getPath:" + file.getPath());
System.out.println("getName:" + file.getName());
System.out.println("length:" + file.length());
System.out.println("lastModified:" + file.lastModified());
// 1416471971031
Date d = new Date(1416471971031L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
獲取功能(有點重要):
* public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組
* public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組
*/
public class FileDemo {
public static void main(String[] args) {
// 指定一個目錄
File file = new File("e:\\");
// public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組
String[] strArray = file.list();
for (String s : strArray) {
System.out.println(s);
}
System.out.println("------------");
// public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組
File[] fileArray = file.listFiles();
for (File f : fileArray) {
System.out.println(f.getName());
}
}
案列(重要):
判斷E盤目錄下是否有後綴名爲.jpg的文件,如果有,就輸出此文件名稱
*
* 分析:
* A:封裝e判斷目錄
* B:獲取該目錄下所有文件或者文件夾的File數組
* C:遍歷該File數組,得到每一個File對象,然後判斷
* D:是否是文件
* 是:繼續判斷是否以.jpg結尾
* 是:就輸出該文件名稱
* 否:不搭理它
* 否:不搭理它
*/
public class FileDemo {
public static void main(String[] args) {
// 封裝e判斷目錄
File file = new File("e:\\");
// 獲取該目錄下所有文件或者文件夾的File數組
File[] fileArray = file.listFiles();
// 遍歷該File數組,得到每一個File對象,然後判斷
for (File f : fileArray) {
// 是否是文件
if (f.isFile()) {
// 繼續判斷是否以.jpg結尾
if (f.getName().endsWith(".jpg")) {
// 就輸出該文件名稱
System.out.println(f.getName());
}
}
}
}
}
總結:
1:異常(理解)
(1)程序出現的不正常的情況。
(2)異常的體系
Throwable
|--Error 嚴重問題,我們不處理。
|--Exception
|--RuntimeException 運行期異常,我們需要修正代碼
|--非RuntimeException 編譯期異常,必須處理的,否則程序編譯不通過
(3)異常的處理:
A:JVM的默認處理
把異常的名稱,原因,位置等信息輸出在控制檯,但是呢程序不能繼續執行了。
B:自己處理
a:try...catch...finally
自己編寫處理代碼,後面的程序可以繼續執行
b:throws
把自己處理不了的,在方法上聲明,告訴調用者,這裏有問題
(4)面試題
A:編譯期異常和運行期異常的區別?
編譯期異常 必須要處理的,否則編譯不通過
運行期異常 可以不處理,也可以處理
B:throw和throws是的區別
throw:
在方法體中,後面跟的是異常對象名,並且只能是一個
throw拋出的是一個異常對象,說明這裏肯定有一個異常產生了
throws:
在方法聲明上,後面跟的是異常的類名,可以是多個
throws是聲明方法有異常,是一種可能性,這個異常並不一定會產生
(5)finally關鍵字及其面試題
A:finally用於釋放資源,它的代碼永遠會執行。特殊情況:在執行到finally之前jvm退出了
B:面試題
a:final,finally,finalize的區別?
b:如果在catch裏面有return,請問finally還執行嗎?如果執行,在return前還是後
會,前。
實際上在中間。這個上課我們講過
C:異常處理的變形
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
(6)自定義異常
繼承自Exception或者RuntimeException,只需要提供無參構造和一個帶參構造即可
(7)異常的注意實現
A:父的方法有異常拋出,子的重寫方法在拋出異常的時候必須要小於等於父的異常
B:父的方法沒有異常拋出,子的重寫方法不能有異常拋出
C:父的方法拋出多個異常,子的重寫方法必須比父少或者小
2:File(掌握)
(1)IO流操作中大部分都是對文件的操作,所以Java就提供了File類供我們來操作文件
(2)構造方法
A:File file = new File("e:\\demo\\a.txt");
B:File file = new File("e:\\demo","a.txt");
C:File file = new File("e:\\demo");
File file2 = new File(file,"a.txt");
(3)File類的功能(自己補齊)
A:創建功能
B:刪除功能
C:重命名功能
D:判斷功能
E:獲取功能
F:高級獲取功能
G:過濾器功能
(4)案例:
A:輸出指定目錄下指定後綴名的文件名稱
a:先獲取所有的,在遍歷的時候判斷,再輸出
b:先判斷,再獲取,最後直接遍歷輸出即可
B:批量修改文件名稱