第七章:內部類與異常類html
1.內部類java
(1)類能夠有兩種重要的成員:成員變量和方法,類還能夠有一種成員:內部類。git
(2)java支持在一個類中聲明另外一個類,這樣的類稱爲內部類,而包含內部類的類稱爲內部類的外部類。聲明內部類如同在類中聲明方法和成員變量同樣,一個類把內部類看做是本身的成員.內部類的外嵌類的成員變量在內部類中仍然有效,內部類中的方法也能夠調用外嵌類中的方法。數據庫
(3)內部類的類體中不能夠聲明類變量和方法,外嵌類的類體中能夠用內部類聲明對象,做爲外嵌類的成員。編程
2.匿名類數組
a) 和類有關的匿名類 當使用類建立對象時,程序容許把類體與對象的建立組合在一塊兒,也就是說,類建立對象時,除了構造方法還有類體,此類體被認爲是該類的一個子類去掉類聲明後的類體,稱做匿名類。匿名類就是一個子類,因爲無名可用,因此不可能用匿名類聲明對象,但卻能夠直接用匿名類建立對象。網絡
注:(1)匿名類能夠繼承父類的方法也能夠重寫父類的方法。使用匿名類時,必然是在某個類中直接用匿名類建立對象,所以匿名類必定是內部類,匿名類能夠訪問外嵌類中的成員變量和方法,匿名類的類體中不能夠聲明static成員變量和static方法。dom
(2)儘管匿名類建立的對象沒有經歷類聲明的步驟,但匿名對象的引用必須傳遞一個匹配的參數,匿名類的主要途徑就是向方法的參數傳值。函數
(3)若是匿名類繼承了類的方法,x就調用繼承的方法,若是匿名類重寫了父類的方法,x就調用重寫的方法。工具
b) 和接口相關的匿名類
3.異常類
(1)異常的概念 異常是指當程序中某些地方出錯時建立的一種特殊的運行時錯誤對象。Java建立異常對象後,就發送給Java程序,即拋出異常(throwing an exception)。程序捕捉到這個異常後,能夠編寫相應的異常處理代碼進行處理。使用異常處理可使得程序更加健壯,有助於調試和後期維護。
(2)異常處理 Java異常一般在調用某些方法不必定徹底成功時拋出,針對拋出的異常程序須要給出相應的處理,這稱爲異常處理。異常處理分爲三個部分:捕捉異常、程序流程的跳轉和異常處理語句塊。當一個異常被拋出時,程序中有專門的語句來接收這個被拋出的異常對象,這個過程就是捕捉異常;當一個異常類的對象被捕捉或接收後,用戶程序就會發生流程跳轉,系統停止程序運行,跳轉到異常處理語句的執行,或者直接跳出系統,回到操做系統狀態下。在Java語言中,try語句用來啓動Java的異常處理機制,一般是可能拋出異常的語句的調用;而catch語句進行捕捉和處理異常,有時添加finally語句塊,finally中的語句是正常執行或者處理異常以後必須執行的語句。語句格式以下: try { 語句塊; } catch(異常類 異常類參數名) { 異常處理語句塊; } finally { try或者catch語句完畢後必須執行的語句(一般用於關閉文件 流對象或者數據庫對象等); }
(3)用戶自定義異常 用戶自定義異經常使用來處理用戶應用程序中的特定邏輯的運行錯誤,用戶自定義的異常類一般繼承自Exception類。
第十章:輸入、輸出流
1、理解數據流 流通常分爲輸入流(Input Stream)和輸出流(Output Stream)兩類。
2、Java的標準數據流 標準輸入輸出指在字符方式下(如DOS),程序與系統進行交互的方式,分爲三種: 標準輸入studin,對象是鍵盤。 標準輸出stdout,對象是屏幕。 標準錯誤輸出stderr,對象也是屏幕。
3、字節流方法 字節流:從InputStream和OutputStream派生出來的一系列類。這類流以字節(byte)爲基本處理單位。 InputStream、OutputStream FileInputStream、FileOutputStream PipedInputStream、PipedOutputStream ByteArrayInputStream、ByteArrayOutputStream FilterInputStream、FilterOutputStream DataInputStream、DataOutputStream BufferedInputStream、BufferedOutputStream
一、InputStream 和OutputStream read():從流中讀入數據 skip():跳過流中若干字節數 available():返回流中可用字節數 mark():在流中標記一個位置 reset():返回標記過得位置 markSupport():是否支持標記和復位操做 close():關閉流 int read() :從輸入流中讀一個字節,造成一個0~255之間的整數返回(是一個抽象方法)。 int read(byte b[]) :讀多個字節到數組中。 int read(byte b[], int off, int len):從輸入流中讀取長度爲len的數據,寫入數組b中從索引off開始的位置,並返回讀取得字節數。 write(int b) :將一個整數輸出到流中(只輸出低位字節,抽象) write(byte b[]) :將字節數組中的數據輸出到流中 write(byte b[], int off, int len) :將數組b中從off指定的位置開始,長度爲len的數據輸出到流中 flush():刷空輸出流,並將緩衝區中的數據強制送出 close():關閉流
二、管道流 管道用來把一個程序、線程和代碼塊的輸出鏈接到另外一個程序、線程和代碼塊的輸入。java.io中提供了類PipedInputStream和PipedOutputStream做爲管道的輸入/輸出流 管道輸入流做爲一個通訊管道的接收端,管道輸出流則做爲發送端。管道流必須是輸入輸出並用,即在使用管道前,二者必須進行鏈接 管道輸入/輸出流能夠用兩種方式進行鏈接: 在構造方法中進行鏈接 PipedInputStream(PipedOutputStream pos); PipedOutputStream(PipedInputStream pis); 經過各自的connect()方法鏈接 在類PipedInputStream中,connect(PipedOutputStream 在類PipedOutputStream中,connect(PipedInputStream pis);
三、數據流 DataInputStream和DataOutputStream 在提供了字節流的讀寫手段的同時, 以統一的通用的形式向輸入流中寫入boolean,int,long,double等基本數據類型,並能夠在次把基本數據類型的值讀取回來。 提供了字符串讀寫的手段。 分別實現了DataInput和DataOutput接口 聲明類: Public class DataInputStream extends filterInputStream implements DataInput
四、對象流 對象的持續性(Persistence) 可以紀錄本身的狀態一邊未來再生的能力,叫對象的持續性 對象的串行化(Serialization) 對象經過寫出描述本身狀態的數值來記錄本身的過程叫串行化。串行化的主要任務是寫出對象實例變量的數值,若是變量是另外一個對象的引用,則引用的對象也要串行化。這個過程是遞歸的 對象流 可以輸入輸出對象的流稱爲對象流。 能夠將對象串行化後經過對象輸入輸出流寫入文件或傳送到其它地方 在java中,容許可串行化的對象在經過對象流進行傳輸。只有實現Serializable接口的類才能被串行化, Serializable接口中沒有任何方法,當一個類聲明實現Serializable接口時,只是代表該類加入對象串行化協議 要串行化一個對象,必須與必定的對象輸出/輸入流聯繫起來,經過對象輸出流將對象狀態保存下來(將對象保存到文件中,或者經過網絡傳送到其餘地方) ,再經過對象輸入流將對象狀態恢復 類ObjectOutputStream和ObjectInputStream分別繼承了接口ObjectOutput和ObjectInput,將數據流功能擴展到能夠讀寫對象,前者用writeObject()方法能夠直接將對象保存到輸出流中,然後者用readObject()方法能夠直接從輸入流中讀取一個對象
4、字符流的方法 一、 字符流:從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼錶示的字符爲基本處理單位。 Reader、Writer InputStreamReader、OutputStreamWriter FileReader、FileWriter CharArrayReader、CharArrayWriter PipedReader、PipedWriter FilterReader、FilterWriter BufferedReader、BufferedWriter StringReader、StringWriter
二、Reader類和Writer類 在JDK1.1以前,java.io包中的流只有普通的字節流(以byte爲基本處理單位的流),這種流對於以16位的Unicode碼錶示的字符流處理很不方便。從JDK1.1開始, java.io包中加入了專門用於字符流處理的類,它們是以Reader和Writer爲基礎派生的一系列類 同類InputStream和OutputStream同樣,Reader和Writer也是抽象類,只提供了一系列用於字符流處理的接口。它們的方法與類InputStream和OutputStream相似,只不過其中的參數換成字符或字符數組 一、Reader類 • void close() • void mark(int readAheadLimit) • boolean markSupported() : • int read() • int read(char[] cbuf) • int read(char[] cbuf, int off, int len) • boolean ready() • void reset() • long skip(long n) 二、Writer類 • void close() • void flush() • void write(char[] cbuf) • void write(char[] cbuf, int off, int len) • void write(int c) • void write(String str) • void write(String str, int off, int len)
5、、文件操做類的方法 File類 一、File類聲明以下: public class File ectends Object implements Serializable,Comparable 構造方法: public File(String pathname) public File(File patent,String child) public File(String patent,String child) 二、文件名的處理 String getName( ); //獲得一個文件的名稱(不包括路徑) String getPath( ); //獲得一個文件的路徑名 String getAbsolutePath( );//獲得一個文件的絕對路徑名 String getParent( ); //獲得一個文件的上一級目錄名 String renameTo(File newName); //將當前文件名改名爲給定文件的完整路徑 三、文件屬性測試 boolean exists( ); //測試當前File對象所指示的文件是否存在 boolean canWrite( );//測試當前文件是否可寫 boolean canRead( );//測試當前文件是否可讀 boolean isFile( ); //測試當前文件是不是文件(不是目錄) boolean isDirectory( ); //測試當前文件是不是目錄 四、普通文件信息和工具 long lastModified( );//獲得文件最近一次修改的時間 long length( ); //獲得文件的長度,以字節爲單位 boolean delete( ); //刪除當前文件 五、目錄操做 boolean mkdir( ); //根據當前對象生成一個由該對象指定的路徑 String list( ); //列出當前目錄下的文件 六、文件過濾器 類FilterInputStream和FilterOutputStream分別對其餘輸入/輸出流進行特殊處理,它們在讀/寫數據的同時能夠對數據進行特殊處理。另外還提供了同步機制,使得某一時刻只有一個線程能夠訪問一個輸入/輸出流。 類FilterInputStream和FilterOutputStream分別重寫了父類InputStream和OutputStream的全部方法,同時,它們的子類也應該重寫它們的方法以知足特定的須要 • 要使用過濾流,首先必須把它鏈接到某個輸入/輸出流上,一般在構造方法的參數中指定所要鏈接的流: – FilterInputStream(InputStream in); – FilterOutputStream(OutputStream out); 注:這兩個類是抽象類,構造方法也是保護方法 類BufferedInputStream和BufferedOutputStream實現了帶緩衝的過濾流,它提供了緩衝機制,把任意的I/O流「捆綁」到緩衝流上,能夠提升讀寫效率 • 在初始化時,除了要指定所鏈接的I/O流以外,還能夠指定緩衝區的大小。缺省大小的緩衝區適合於一般的情形;最優的緩衝區大小常依賴於主機操做系統、可以使用的內存空間以及機器的配置等;通常緩衝區的大小爲內存頁或磁盤塊等地整數倍,如8912字節或更小。 – BufferedInputStream(InputStream in[, int size]) – BufferedOutputStream(OutputStream out[, int size]) 七、文件對話框 隨機文件操做 於InputStream 和OutputStream 來講,它們的實例都是順序訪問流,也就是說,只能對文件進行順序地讀/寫。隨機訪問文件則容許對文件內容進行隨機讀/寫。在java中,類 RandomAccessFile 提供了隨機訪問文件的方法。類RandomAccessFile的聲明爲: public class RandomAccessFile extends Object implements DataInput, DataOutput File:以文件路徑名的形式表明一個文件 FileDescriptor:表明一個打開文件的文件描述 FileFilter & FilenameFilter:用於列出知足條件的文件 File.list(FilenameFilter fnf) File.listFiles(FileFilter ff) FileDialog.setFilenameFilter(FilenameFilter fnf) • FileInputStream & FileReader:順序讀文件 • FileOutputStream & FileWriter:順序寫文件 • RandomAccessFile:提供對文件的隨機訪問支持 類RandomAccessFile則容許對文件內容同時完成讀和寫操做,它直接繼承Object,而且同時實現了接口DataInput和DataOutput,提供了支持隨機文件操做的方法 DataInput和DataOutput中的方法 • readInt(), writeDouble()… int skipBytes(int n):將指針鄉下移動若干字節 length():返回文件長度 long getFilePointer():返回指針當前位置 void seek(long pos):將指針調到所需位置 void setLength(long newLength):設定文件長度 構造方法: RandomAccessFile(File file, String mode) RandomAccessFile(String name, String mode) mode 的取值 – 「r」 只讀. 任何寫操做都將拋出IOException。 – 「rw」 讀寫. 文件不存在時會建立該文件,文件存在時,原文件內容不變,經過寫操做改變文件內容。 – 「rws」 同步讀寫. 等同於讀寫,可是任何協操做的內容都被直接寫入物理文件,包括文件內容和文件屬性。 – 「rwd」 數據同步讀寫. 等同於讀寫,但任何內容寫操做都直接寫到物理文件,對文件屬性內容的修改不是這樣。
6、Java中Scanner的用法 Scanner是SDK1.5新增的一個類,但是使用該類建立一個對象. Scanner reader=new Scanner(System.in); 而後reader對象調用下列方法(函數),讀取用戶在命令行輸入的各類數據類型: next.Byte(),nextDouble(),nextFloat,nextInt(),nextLin(),nextLong(),nextShot() 上述方法執行時都會形成堵塞,等待用戶在命令行輸入數據回車確認.例如,擁護在鍵盤輸入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用戶輸入一個文本行而且回車,該方法獲得一個String類型的數據。
#2019-2020-4《Java 程序設計》第六週學習總結 1.經過第六週的學習,利用教材和老師在藍墨雲上的一些教學視頻以及經過老師和同窗的博客以及一些課外資料,充分學習了第7、十章的內容,學習的內容有:內部類,匿名類,異常類,斷言,File類,文件字節輸入流,文件字節輸出流,文件字符輸入、輸出流,緩衝流,隨機流,數組流,數據流,對象流,序列化與對象克隆,使用Scanner解析文件,文件對話框,帶進度條的輸入流,文件鎖。因爲本週的學習任務較重,對這兩章學習內容並非十分理解,但經過學習7、十章內容,會使得編程更加便捷、方便,整體來講,自我感受這兩章內容相對較難。
2.經過手打第7、十章代碼,對語法有必定的幫助,並在調試完代碼後上傳至碼雲倉庫,並提交腳本。(因爲這兩章例子過多,博客中體現部分程序運行截圖)
部分程序運行截圖:
腳本截圖:
注:個人碼雲連接:https://gitee.com/zzm-zcc/zhang_zhi_min
#2019-2020-4 《Java 程序設計》第六週練習題生疏題、錯題總結
一、下列關於異常的說法,錯誤的是(AD)
A .Java使用throws拋出一個異常,使用throw聲明方法可能拋出異常。
B .執行System.out.println(3/0);語句會報ArithmeticException異常。
C .Java中的錯誤是以對象的方式呈現爲java.lang.Throwable的各類子類實例。
D .方法parseInt()在執行過程當中可能拋出DataFormatException異常。
二、下列關於斷言的說法,錯誤的是(D)
A .斷言語句一般用於調試代碼。
B .若是使用assert booleanException:messageException;形式的斷言語句,當booleanException的值是false時,程序從斷言語句處中止執行,並輸出messageException的值。
C .在調試程序時,可使用-ea啓動斷言語句。
D .String n = new AssertDemo().getName("Magical");
三、下列沒法經過編譯的是(C)
class OutClass { int m = 1; static float x; //A class InnerClass { int m =12; //B static float n =20.89f; //C InnerClass(){ } void f() { m = 100; } } void cry() { InnerClass tom = new InnerClass(); //D } }
A .A
B .B
C .C
D .D
四、調用線程的interrupt()方法 ,會拋出哪些異常對象?(ADE)
A .ClosedByInterruptException
B .IllegalStateException
C .RuntimeException
D .InterruptedException
E .SecurityException
五、若是某個方法的參數是接口類型,那麼可使用接口名和類體組合建立一個匿名對象傳遞給方法的參數,類體必需要重寫接口中的所有方法。(A)
A .true
B .false
原文出處:https://www.cnblogs.com/zzmzcc/p/10664472.html