java從入門到棄坑第十二天

1.異常:程序出現的不正常的情況。分爲編譯時異常和運行時異常。

              編譯時異常:開始就必須處理,否則程序就無法運行。

              運行時異常:在程序運行時出現的異常,需修改程序解決。

   異常演示:除數不能爲0:java.lang.ArithmeticException: / by zero

public class ExceptionDemo6 {
	public static void main(String[] args) {
		System.out.println(10/0);
	}
}
//Exception in thread "main" java.lang.ArithmeticException: / by zero
針對異常,系統默認處理方案爲把問題的類名,錯誤原因,錯誤的位置等信息打印在控制檯,以便我們觀察。

但是系統出問題時,不應該直接停止,而是停止出問題的部分讓其他部分繼續執行。

2.異常處理:A:try...catch...finally

                     B:throws

3.try...catch...finally:try{

可能出現問題的代碼

                                   }catch (異常類名  變量名){

針對異常的代碼處理

   }finally{

釋放資源的地方

   }

   finally特點:被finally修飾的語句一定會被執行,除了在執行finally之前jvm虛擬機退出。

   注:針對多個異常,可以每一個出現問題的地方使用一次try  catch語句,也可以採用一個try,多個catch'的情況

          遇到try裏面的問題,自動和catch進行匹配,匹配到就執行catch中的內容,在執行後面的代碼。

public class ExceptionDemo6 {
	public static void main(String[] args) {
		try {
			System.out.println(10/0);
			int arr[]=new int[3];
			System.out.println(arr[3]);
		} catch (ArithmeticException e) {
			System.out.println("除數不能爲0");
		} catch (ArrayIndexOutOfBoundsException e){
			System.out.println("數組越界");
		}
	}
}
//除數不能爲0
由上述代碼可知:try語句中存在的異常可以匹配多個catch時,一旦匹配到第一個catch,就會執行其中的語句並且不                     會在匹配其他catch的情況。且如果catch中的異常由子父關係,父類異常必須在最後。

4.throwable中存在printStackTrace():打印異常信息,程序從出問題的地方開始就會打印創建一個該異常對應的對      象,該對象直接調用打印方法
5.throws:用在方法聲明的後面,跟異常類名,可以跟多個異常,用逗號隔開。此方法表示拋出異常,由方法的調用          者來處理該異常,throws表示出現異常的一種可能,並不一定會發生這些異常。

6.A:子類重寫父類方法時,子類方法必須拋出和父類相同的異常       或     父類異常的子類。

   B:父類拋出多個異常時,子類只能拋出    父類異常的子類。

   C:如果父類方法沒有異常,那麼子類重寫的方法不能拋出異常,遇到異常只能在子類方法中try處理。

7.throw和throws:throws表示出現異常的一種可能性,並不一定會發生這些異常

     throw則是拋出了異常,執行throw則一定拋出了某種異常

8.編譯時期異常必須在方法聲明上拋出,運行時期異常可以拋出也可以不拋出。

9.File:文件和目錄的抽象表示形式。

   構造方法:File(String pathname):把一個路徑名稱封裝成File對象。

                     File(String parent, String child):把一個父路徑和一個子路徑封裝成一個File對象。

                     File(File parent, String child):把一個父路徑File對象和一個子路徑封裝成一個File對象。

   成員方法:A:public boolean createNewFile():如果文件不存在,就創建。否則,不創建。

     B:public boolean mkdirs():如果目錄不存在,就創建。否則,不創建。

                     C:public boolean delete():既可以刪除文件,又可以刪除目錄。

 判斷功能:public boolean isDirectory():是否是目錄
     public boolean isFile():是否是文件
     public boolean exists():是否存在
     public boolean canRead():是否可讀
     public boolean canWrite():是否可寫
     public boolean isHidden():是否隱藏

 獲取功能:public String getAbsolutePath():獲取絕對路徑
     public String getPath():獲取相對路徑
   public String getName():獲取名稱

10.I/O流:按流向分爲輸入流和輸出流,按數據類型分爲字節流和字符流

11.I/O字節流:OutputStream,字節輸出流,從虛擬機向外部輸出字節,該類爲抽象類,所以創建對象應該用其子類

                        FileOutputStream的對象,向文件寫入數據的時候:A:創建字節輸出流對象。B:調用寫數據的方法

                        C:釋放資源(關流)

exp:向根目錄1.txt中寫入“helloworld”

import java.io.FileOutputStream;
import java.io.IOException;


public class OutStreamDemo {
	public static void main(String[] args) throws IOException  {
		FileOutputStream fos=new FileOutputStream("a.txt");
		//創建字節輸出流對象,該路徑爲相對地址,若不存在會自動創建
		byte[]b="holloworld".getBytes();//創建字節數組
		fos.write(b);//向文件中輸出目標字節
		fos.close();//釋放資源
	}
}
12.字節輸出流write方法:write(int b) :一次寫一個字節,write(byte[] b, int off, int len) :一次寫一個字節數組的一部                                          分,後者寫入時效率更高。
13.InputStream:字節輸入流,從外部獲取字節數據,該類同樣爲抽象類,所以創建文件是用子類FileInputStream 

                            讀取數據步驟:A:創建字節輸入流對象。B:調用方法讀取數據。C:釋放資源(關流)

exp:讀取並顯示1.txt中的文本。

import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamDemo {
	public static void main(String[] args) throws IOException {
		FileInputStream fis=new FileInputStream("a.txt");//創建字節輸入流對象
		int b;
		while((b=fis.read())!=-1){//讀取時以ASCII碼錶方式識別,若沒有內容爲-1,因此用改循環讀取文本部分
			System.out.print((char)b);//將讀取到的字節轉爲字符輸出
		}
		fis.close();//關流
	}
}
14.在讀取的同時進行文件向外輸出,便可完成複製。

exp:把1.txt中的文本內容複製到2.txt中:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyDemo {
	public static void main(String[] args) throws IOException {
		FileInputStream fis=new FileInputStream("a.txt");
		FileOutputStream fos=new FileOutputStream("b.txt");
		byte chs[]=new byte[1024];//定義字節數組,加快文件複製速度
		int size;//定義一次複製內容的字節長度
		while((size=fis.read(chs))!=-1){
			fos.write(chs, 0, size);//一次寫入以讀取到的字節數組
		}
		fis.close();//關流
		fos.close();
	}
}





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