20175212童皓桢 《Java程序设计》第六周学习总结
20175212童皓楨 《Java程序設計》第六周學習總結
教材學習內容總結
第七章 內部類與異常類
1.內部類
Java支持在一個類中定義另一個類,這樣的類稱作內部類,包含內部類的類稱為內部類的外嵌類。
- 內部類的外嵌類的成員變量在內部類中仍然有效,內部類中的方法也可以調用外嵌類中的方法。
- 內部類的類體不能聲明類變量和類方法。外嵌類的類體中可以用內部類聲明對象,作為外嵌類的成員。
- 內部類僅供它的外嵌類使用,其他類不可以用某個類的內部類聲明對象。
2.匿名類(被認為是一個子類去掉聲明后的類體)
Bank是類,下列代碼用Bank的一個子類(匿名類)創建對象。
new Bank(){匿名的類體 }- 匿名類可以繼承、重寫父類的方法。
- 匿名類一定是內部類
- 匿名類可以訪問外嵌類中的成員變量和方法
- 匿名類因沒有類名,因此匿名類創建對象時,直接使用父類的構造方法。
感覺匿名類的概念和使用方法不太好理解,故用書中例子以闡明:
Example7_2.java的以上即為使用匿名類的部分。
- 另外的,可以使用接口名和類體組合創建一個匿名對象傳遞給方法的參數,類體必須要重寫接口中的全部方法,如:
3.異常類
Java允許定義方法時聲明該方法調用過程中可能出現的異常,即允許方法調用過程中拋出異常對象,終止當前方法的繼續執行。
另外,異常對象可以調用以下方法得到或輸出有關異常的信息:
- try-catch語句
將可能出現的一場操作放在try部分,一旦try部分拋出異常對象,那么try部分立刻結束執行,轉向執行相應的catch部分。
try{可能發生異常的語句 } catch(ExceptionSubClass1 e) {… } catch(ExceptionSubClass2 e) {… }- 自定義異常類
一個方法在聲明時可以使用throws關鍵詞聲明要產生的若干個異常,并在該方法體中具體給出產生異常的操作。如下:
public void income(int in,int out) throws BankException {if(in<=0||out>=0||in+out<=0) {throw new BankException(in,out); //方法拋出異常,導致方法結束}int netIncome=in+out;System.out.printf("本次計算出的純收入是:%d元\n",netIncome);money=money+netIncome; }4.斷言
在代碼調試階段中,斷言語句一般用于程序不準備通過捕獲異常來處理的錯誤。
- 斷言語句有以下兩種格式:
assert booleanExpression;
若表達式為真,程序從斷言語句處繼續執行,否則程序從斷言語句處停止執行。
與上一種類似,,另外的輸出messageException表達式的值。
- java -ea mainClass 啟用斷言語句
第十章
1. File類
- 文件的屬性
public String getName() 獲取文件的名字。
public boolean canRead()判斷文件是否是可讀的。
public boolean canWrite() 判斷文件是否可被寫入。
public boolean exits() 判斷文件是否存在。
public long length() 獲取文件的長度(單位是字節)。
public String getAbsolutePath() 獲取文件的絕對路徑。
public String getParent() 獲取文件的父目錄。
public boolean isFile() 判斷文件是否是一個普通文件,而不是目錄。
public boolean isDirectroy() 判斷文件是否是一個目錄。
public boolean isHidden() 判斷文件是否是隱藏文件。
public long lastModified() 獲取文件最后修改的時間。
- 目錄
創建目錄 public boolean mkdir()
public String[] list()用字符串形式返回目錄下的全部文件。
public File [] listFiles() 用File對象形式返回目錄下的全部文件。
public String[] list(FilenameFilter obj)用字符串形式返回目錄下的指定類型的所有文件。
public File [] listFiles(FilenameFilter obj) 用File對象形式返回目錄下的指定類型所有文件。
上述兩方法的參數FilenameFilter是一個接口,該接口有一個方法:
public boolean accept(File dir,String name);
- 文件的創建與刪除
File file=new File("c:\\myletter","letter.txt");
如果c:\myletter目錄中沒有名字為letter.txt文件,
文件對象file調用方法
文件對象調用方法 public boolean delete()
可以刪除當前文件,
例如:file.delete();
- 運行可執行文件
用Runtime 類聲明一個對象( Runtime類在java.lang包)
Runtime ec;
然后使用該類的getRuntime()靜態方法創建這個對象:
ec=Runtime.getRuntime();
ec可以調用exec(String command)方法打開本地機的可執行文件或執行一個操作。
2.文件字節輸入流
使用輸入流通常包括4個基本步驟:
(1)設定輸入流的源 (2)創建指向源的輸入流 (3)讓輸入流讀取源中的數據 (4)關閉輸入流。3.文件字節輸出流
(1)給出輸出流的目的地 (2)創建指向目的地的輸出流 (3)讓輸出流把數據寫入到目的地 (4)關閉輸出流。4.文件字符輸入、輸出流
(1)Reader類提供的read方法以字符為單位順序地讀取源中的數據。
int read():
int read(char b[]):
int read(char b[], int off, int len):
void close():
long skip(long numBytes):
(2) Writer流以字符為單位順序地寫文件,每次調用write方法就順序地向目的地寫入內容。 Writer類有如下常用的方法。
void write(int n): 向輸出流寫入一個字符。
void write(byte b[]): 向輸出流寫入一個字符數組。
void write(byte b[],int off,int length): 從給定字符數組中起始于偏移量off處取len個字符寫到輸出流。
void close(): 關閉輸出流。
5.緩沖流
(1)BufferedReader和BufferedWriter類創建的對象稱作緩沖輸入、輸出流。二者的源和目的地必須是字符輸入流和字符輸出流。
構造方法:
BufferedReader(Reader in);
BufferedWriter (Writer out);
(2)BufferedReader和BufferedWriter類讀寫文件的方法:
readLine() 讀取文本行
write(String s,int off,int len) 把字符串s寫到文件中
newLine(); 向文件寫入一個回行符
6.隨機流
使用RandomAccessFile類來創建一個隨機訪問文件流。RandomAccessFile類創建的流的指向既可以作為源也可以作為目的地。
構造方法
RandomAccessFile(String name,String mode) ;
RandomAccessFile(File file,String mode) ;
相關方法:
seek(long a) 定位RandomAccessFile流的讀寫位置
getFilePointer() 獲取流的當前讀寫位置
7.數組流
(1)字節數組流
字節數組輸入流ByteArrayInputStream和字節數組輸出流ByteArrayOutputStream分別使用字節數組作為流的源和目標。
ByteArrayInputStream構造方法及常用方法
ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length);
public int read();順序地從源中讀出一個字節
public int read(byte[] b,int off,int len);順序地從源中讀出參數len指定的字節數
ByteArrayOutputStream流構造方法及常用方法
ByteArrayOutputStream();
ByteArrayOutputStream(int size);
public void write(int b); 順序地向緩沖區寫入一個字節
public void write(byte[] b,int off,int len); 將參數b中指定的len個字節順序地寫入緩沖區
public byte[] toByteArray(); 返回輸出流寫入到緩沖區的全部字節
(2)字符數組
CharArrayReader和CharArrayWriter類是字符數組流,使用字符數組作為流的源和目標。
8.數據流
DataInputStream和DataOutputStream類創建的對象稱為數據輸入流和數據輸出流。
構造方法:
DataInputStream(InputStream in)創建的數據輸入流指向一個由參數in指定的底層輸入流
DataOutputStream(OutnputStream out)創建的數據輸出流指向一個由參數out指定的底層輸出流
9.對象流
ObjectInputStream和ObjectOutputStream類創建的對象稱為對象輸入流和對象輸出流。
它的構造方法是:
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
相關方法:
writeObject(Object obj) 將一個對象obj寫入到一個文件
readObject() 讀取一個對象到程序中
所謂序列化:一個類如果實現了Serializable接口,那么這個類創建的對象就是所謂序列化的對象。
10.使用Scanner解析文件
(1)使用默認分隔標記解析文件
創建Scanner對象,并指向要解析的文件,例如:
File file = new File("hello.java");
Scanner sc = new Scanner(file);
sc將空白作為分隔標記
(2)使用正則表達式作為分隔標記解析文件 :
創建Scanner對象,指向要解析的文件,并使用useDelimiter方法指定正則表達式作為分隔標記。
11.文件對話框
構造方法JFileChooser()創建初始不可見的有模式的文件對話框。然后文件對話框調用下述2個方法:
showSaveDialog(Component a);
showOpenDialog(Component a);
都可以使得對話框可見,只是呈現的外觀有所不同,showSaveDialog方法提供保存文件的界面,showOpenDialog方法提供打開文件的界面。
上述兩個方法中的參數a指定對話框可見時的位置,當a是null時,文件對話框出現在屏幕的中央;如果組件a不空,文件對話框在組件a的正前面居中顯示。
11.帶進度條的輸入流
如果讀取文件時希望看見文件的讀取進度可以使用javax.swing包提供的輸入流類:
ProgressMonitorInputStream
它的構造方法是:
ProgressMonitorInputStream(Conmponent c,String s,InputStream);
12.文件鎖
FileLock、FileChannel類處理Java提供的文件鎖功能。它們分別在java.nio和java.nio.channels包中。
輸入、輸出流讀寫文件時可以使用文件鎖。
RondomAccessFile創建的流在讀寫文件時使用文件鎖的步驟如下:
(1)先使用RondomAccessFile流建立指向文件的流對象,該對象的讀寫屬性必須是rw,例如:
RandomAccessFile input=new RandomAccessFile("Example.java","rw");(2)input流調用方法getChannel()獲得一個連接到地層文件的FileChannel對象(信道),例如
FileChannel channel=input.getChannel();
(3)信道調用tryLock()或lock()方法獲得一個FileLock(文件鎖)對象,這一過程也稱作對文件加鎖.
例如:FileLock lock=channel.tryLock();
教材學習中的問題和解決過程
- 問題1:
中,對于匿名類的使用格式存有疑惑
- 問題1解決方案:經過比較書中的范例和使用規范后得知,匿名類的使用和描述緊跟在聲明之后,即使是在當作參數時。
代碼調試中的問題和解決過程
- 問題1:在IDEA中調試書中Example7_6時無法正確開啟斷言語句。
- 問題1解決方案:發現班課中有同學與我有相同問題,并找到了解決方法:
之后成功調試并啟用assert語句
代碼托管
上周考試錯題總結
- 錯題一:如果有以下程序片段
以下描述正確的是
A
.
編譯失敗
B . 顯示“做一些事”
C
.
發生ClassCastException
D
.
執行時不顯示任何信息
原因和分析:對接口的理解不很到位。在此題中簡單的將接口Some作為父類,并最后調用在子類中重寫的方法即可。
結對及互評
評分標準
- 不使用Markdown不加分
- 有語法錯誤的不加分(鏈接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
- 缺少“教材學習中的問題和解決過程”的不加分
- 缺少“代碼調試中的問題和解決過程”的不加分
- 代碼托管不能打開的不加分
- 缺少“結對及互評”的不能打開的不加分
- 缺少“上周考試錯題總結”的不能加分
- 缺少“進度條”的不能加分
- 缺少“參考資料”的不能加分
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分
- 一周提交次數少于20次的不加分
- 周五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進情況的加1分
- 有動手寫新代碼的加1分
- 課后選擇題有驗證的加1分
- 代碼Commit Message規范的加1分
- 錯題學習深入的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習情況真實可信的加1分
- 有抄襲的扣至0分
- 代碼作弊的扣至0分
- 遲交作業的扣至0分
點評模板:
- 博客中值得學習的或問題:
- 對書上的內容有總結和自己的理解
- 可以多嘗試調試代碼,發現問題
- 代碼中值得學習的或問題:
- 無
- 基于評分標準,我給本博客打分:13分。
得分情況如下:正確使用Markdown語法(加1分),模板中的要素齊全(加1分)教材學習中的問題和解決過程, 兩個問題加2分,本周有效代碼超過300分行的(加2分),感想,體會不假大空的加1分排版精美的加一分
進度條中記錄學習時間與改進情況的加1分
有動手寫新代碼的加1分
代碼Commit Message規范的加1分
錯題學習深入的加1分
點評認真,能指出博客和代碼中的問題的加1分
結對學習情況真實可信的加1分
點評過的同學博客和代碼
- 本周結對學習情況
- 20175227
- 結對學習內容
- 本周教材對于第七章、第十章的知識進行學習
- 合作寫出了四則運算練習器程序的第一階段任務
- 上周博客互評情況
其他(感悟、思考等,可選)
- 本周和結對伙伴初步設計出了四則運算練習器,擴展了如調用eval方法,getPercentInstance方法等知識
通過對教材的學習,了解了兩個特殊類的使用方法及輸入、輸出流相關知識
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 6/6 | 1/1 | 20/20 | |
| 第二周 | 245/251 | 1/2 | 18/38 | |
| 第三周 | 633/884 | 1/3 | 22/60 | |
| 第四周 | 305/1189 | 1/4 | 30/90 | |
| 第五周 | 410/1599 | 3/7 | 30/120 | |
| 第六周 | 1135/2734 | 3/10 | 30/150 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什么這么難,軟件工程 估計方法
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料
Java學習筆記(第8版)
- 《Java學習筆記(第8版)》學習指導
...
轉載于:https://www.cnblogs.com/thz666/p/10665240.html
總結
以上是生活随笔為你收集整理的20175212童皓桢 《Java程序设计》第六周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “小米汽车”商标被纺织品公司抢注
- 下一篇: 远程升级FOTA/SOTA