20175212童皓楨 《Java程序設計》第六週學習總結

20175212童皓楨 《Java程序設計》第六週學習總結

教材學習內容總結

第七章 內部類與異常類

1.內部類html

Java支持在一個類中定義另外一個類,這樣的類稱做內部類,包含內部類的類稱爲內部類的外嵌類。java

  • 內部類的外嵌類的成員變量在內部類中仍然有效,內部類中的方法也能夠調用外嵌類中的方法。
  • 內部類的類體不能聲明類變量和類方法。外嵌類的類體中能夠用內部類聲明對象,做爲外嵌類的成員。
  • 內部類僅供它的外嵌類使用,其餘類不能夠用某個類的內部類聲明對象。

2.匿名類(被認爲是一個子類去掉聲明後的類體)c++

Bank是類,下列代碼用Bank的一個子類(匿名類)建立對象。git

new Bank(){
     匿名的類體
}
  • 匿名類能夠繼承、重寫父類的方法。
  • 匿名類必定是內部類
  • 匿名類能夠訪問外嵌類中的成員變量和方法
  • 匿名類因沒有類名,所以匿名類建立對象時,直接使用父類的構造方法。
    感受匿名類的概念和使用方法不太好理解,故用書中例子以闡明:
board.showMess(new OutputAlphabet()  
                                                            //向參數傳遞OutputAlphabet的匿名子類對象
                       {  public void output() 
                          {  for(char c='α';c<='ω';c++)  //輸出希臘字母
                               System.out.printf("%3c",c); 
                          }  
                       }
                     );

Example7_2.java的以上即爲使用匿名類的部分。正則表達式

  • 另外的,可使用接口名和類體組合建立一個匿名對象傳遞給方法的參數,類體必需要重寫接口中的所有方法,如:
machine.turnOn( new SpeakHello(){
                          public void speak() {
                             System.out.println("hello,you are welcome!");
                          }
                      } 
                    ); 
      machine.turnOn( new SpeakHello(){
                          public void speak() {
                              System.out.println("你好,歡迎光臨!");
                          }
                      } 
                    );

3.異常類數組

Java容許定義方法時聲明該方法調用過程當中可能出現的異常,即容許方法調用過程當中拋出異常對象,終止當前方法的繼續執行。
另外,異常對象能夠調用如下方法獲得或輸出有關異常的信息:dom

public String getMessage();
public void printStackTrace();
public String toString();
  • 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;
    若表達式爲真,程序從斷言語句處繼續執行,不然程序從斷言語句處中止執行。
assert booleanExpression:messageException;

與上一種相似,,另外的輸出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 createNewFile();

文件對象調用方法 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)BufferedReaderBufferedWriter類建立的對象稱做緩衝輸入、輸出流。兩者的源和目的地必須是字符輸入流和字符輸出流。

構造方法:

BufferedReader(Reader in);

BufferedWriter (Writer out);

(2)BufferedReaderBufferedWriter類讀寫文件的方法:

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)字符數組

CharArrayReaderCharArrayWriter類是字符數組流,使用字符數組做爲流的源和目標。

8.數據流

DataInputStreamDataOutputStream類建立的對象稱爲數據輸入流和數據輸出流。

構造方法:

DataInputStream(InputStream in)建立的數據輸入流指向一個由參數in指定的底層輸入流

DataOutputStream(OutnputStream out)建立的數據輸出流指向一個由參數out指定的底層輸出流

9.對象流

ObjectInputStreamObjectOutputStream類建立的對象稱爲對象輸入流和對象輸出流。

它的構造方法是:

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.文件鎖

FileLockFileChannel類處理Java提供的文件鎖功能。它們分別在java.niojava.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:
board.showMess(new OutputAlphabet()  
                                                            //向參數傳遞OutputAlphabet的匿名子類對象
                       {  public void output() 
                          {  for(char c='α';c<='ω';c++)  //輸出希臘字母
                               System.out.printf("%3c",c); 
                          }  
                       }
                     );

中,對於匿名類的使用格式存有疑惑

  • 問題1解決方案:通過比較書中的範例和使用規範後得知,匿名類的使用和描述緊跟在聲明以後,即便是在看成參數時。

代碼調試中的問題和解決過程

  • 問題1:在IDEA中調試書中Example7_6時沒法正確開啓斷言語句。
    輸入圖片說明
  • 問題1解決方案:發現班課中有同窗與我有相同問題,並找到了解決方法:
run->configrations->VM options:-ea

輸入圖片說明

以後成功調試並啓用assert語句
輸入圖片說明

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

  • 錯題一:若是有如下程序片斷
interface Some{

 void dosome ();

}

class SomeImpl implements Some {

 public void dosome(){

   System.out.println("作一些事");

 }

}

public class Main {

 public static void main (String [] args) {

  Some s= new SomeImpl();

  s.dosome ();

 }

}

如下描述正確的是

A
.
編譯失敗

B . 顯示「作一些事」

C
.
發生ClassCastException

D
.
執行時不顯示任何信息

緣由和分析:對接口的理解不很到位。在此題中簡單的將接口Some做爲父類,並最後調用在子類中重寫的方法便可。

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分

  4. 代碼調試中的問題和解決過程, 一個問題加1分

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至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就接近了。

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索