20175227張雪瑩 2018-2019-2 《Java程序設計》第六週學習總結

20175227張雪瑩 2018-2019-2 《Java程序設計》第六週學習總結

教材學習內容總結

第七章 內部類與異常類

  • 內部類:在一個類中定義另外一個類;包含內部類的類爲外嵌類
    • 內部類僅供其外嵌類使用
    • 內部類不能夠聲明類變量和類方法
    • 外嵌類的成員變量在內部類中有效
    • 內部類對應的字節碼文件名字格式是:「外嵌類名$內部類名」
  • 匿名類:被認爲是一個子類去掉類聲明後的類體
    • 不能夠用匿名類聲明對象,卻能夠直接用匿名類建立一個對象
    • 使用匿名類時,必然是在某個類中直接用匿名類建立對象,所以匿名類必定是內部類
    • 在用匿名類建立對象時,要直接使用父類的構造方法
    • 若某個方法的參數是接口類型,那麼可使用接口名和類體組合建立一個匿名對象,類體必需要重寫接口中的所有方法html

    • 如例子2中
    board.showMess(new OutputAlphabet()  //向參數傳遞OutputAlphabet的匿名子類對象
                 {  public void output() //改寫父類中output方法體
                 {  for(char c='α';c<='ω';c++)  //輸出希臘字母
                     System.out.printf("%3c",c); 
                 }  
                 }
                 );
  • 異常類
    • 異常對象能夠調用以下方法獲得或輸出有關異常信息:
public String getMessage();
 public void printStackTrace();
 public String toString();
  • try-catch語句
try{
包含可能發生異常的語句
}
catch(ExceptionSubClass1 e){//若try部分異常,即轉向catch部分
……
}
catch(ExceptionSubClass2 e){
……
}
  • 例子4
……
int n = 0,m = 0,t = 1000;
try{  m = Integer.parseInt("8888");
      n = Integer.parseInt("ab89"); //發生異常,轉向catch
      t = 7777;  //t沒有機會被賦值,來不及執行就已經退出
   }
catch(NumberFormatException e) {
      System.out.println("發生異常:"+e.getMessage());
      }
……
  • 斷言:通常用於程序不許備經過捕獲異常來處理的錯誤
    • 關閉斷言運行:java Example7_6
    • 開啓斷言運行:java -ea Example7_6
import java.util.Scanner;
public class Example7_6 {
  public static void main (String args[ ]) {
       int [] score={-120,98,89,120,99};
       int sum=0;
       for(int number:score) {
          assert number>0:"負數不能是成績";//若是發現成績有負數,程序馬上結束運行
          sum=sum+number;
       } 
       System.out.println("總成績:"+sum);    
   }
}

第十章 輸入、輸出流

  • File類
    • File類對象的三個構造方法
      • File(String filename);//filename是文件名字
      • File(String directoryPath,String filename);//directoryPath是文件的路徑
      • File(File dir,String filename);//dir是一個目錄
      • 使用File(String filename)建立文件時,該文件被認爲與當前應用程序在同一目錄中
  • 文件字節輸入流
    • 使用輸入流一般包括4個基本步驟
      • 設定輸入流的源
      • 建立指向源的輸入流
      • 讓輸入流讀取源中的數據
      • 關閉輸入流:in.close();
    • 構造方法
      • FileInputStream(String name);
      • FileInputStream(File file);
    • 文件字節流能夠調用從父類繼承的read方法順序地讀取文件,只要不關閉流,每次調用read方法就順序地讀取文件中的其他內容,直到文件的末尾或文件字節輸入流被關閉。
    • 例:
File f=new File("Example10_4.java");
InputStream in = new FileInputStream(f);
  • 文件字節輸出流
    • 使用輸出流一般包括4個基本步驟
      • 給出輸出流的目的地
    • 建立指向目的地的輸出流
    • 讓輸出流把數據寫入到目的地
    • 關閉輸出流
    • 構造方法
      • FileOutputStream(String name);
      • FileOutputStream(File file);
    • 輸出流的wirie方法以字節單位向目的地寫數據。
      • void write(int n) 向目的地寫入單個字節。
      • void write(byte b[]) 向目的地寫入一個字節數組。
      • void write(byte b[],int off,int len)從字節數組中偏移量off處取len個字節寫到目的地。
    • 例:
File file = new File("a.txt"); //輸出的目的地
OutputStream out=new FileOutputStream(file);
  • 文件字符輸入、輸出流
    • Reader類提供的read方法以字符爲單位順序地讀取源中的數據。
    • Writer流以字符爲單位順序地寫文件,每次調用write方法就順序地向目的地寫入內容。 Writer類有以下經常使用的方法。
    • 例:
File sourceFile = new File("a.txt");  //讀取的文件
File targetFile = new File("b.txt");  //寫入的文件
Writer out = new FileWriter(targetFile,true); //指向目的地的輸出流
Reader in  = new FileReader(sourceFile);   //指向源的輸入流
  • 緩衝流
    • BufferedReader和BufferedWriter類建立的對象稱做緩衝輸入、輸出流。
    • 兩者的源和目的地必須是字符輸入流和字符輸出流。
    • 構造方法
      • BufferedReader(Reader in);
      • BufferedWriter (Writer out);
    • BufferedReader和BufferedWriter類讀寫文件的方法
      • readLine() 讀取文本行
      • write(String s,int off,int len) 把字符串s寫到文件中
      • newLine(); 向文件寫入一個回行符
    • 例子7
File fRead = new File("english.txt");
File fWrite = new File("englishCount.txt");//命名文件名
      try{  Writer out = new FileWriter(fWrite);// **字符輸出,底層** 
            BufferedWriter bufferWrite = new BufferedWriter(out);
            //輸出預備
            Reader in = new FileReader(fRead);// **字符輸入,底層** 
            BufferedReader bufferRead =new BufferedReader(in);
            //輸入預備
            String str = null;
            while((str=bufferRead.readLine())!=null) {
               StringTokenizer fenxi = new StringTokenizer(str);
               int count=fenxi.countTokens();// **處理字符串有幾個詞(第八章)** 
               str = str+" 句子中單詞個數:"+count;
               bufferWrite.write(str);
               bufferWrite.newLine();
            } 
            bufferWrite.close(); 
            out.close();
            // **先關高級流,再關底層流;Java規定只要關了前者,後者自動會關** 
            in = new FileReader(fWrite);
            bufferRead =new BufferedReader(in);
            String s=null;
            System.out.println(fWrite.getName()+"內容:");
            while((s=bufferRead.readLine())!=null) {
              System.out.println(s);
           }  
           bufferRead.close();
           in.close();
      }
      catch(IOException e) {
          System.out.println(e.toString());
  • 隨機流
    • 使用RandomAccessFile類來建立一個隨機訪問文件流。RandomAccessFile類建立的流的指向既能夠做爲源也能夠做爲目的地。
    • 既不是InputStream的子類也不是OutStream的子類
    • 構造方法
      • RandomAccessFile(String name,String mode) ;(mode能夠是r或rw)
      • RandomAccessFile(File file,String mode) ;
    • 例:
RandomAccessFile in=null;
in=new RandomAccessFile("Example10_9.java","rw");
  • 數據流
    • 容許程序按着機器無關的風格讀取Java原始數據,沒必要再關心這個數值應當是多少個字節
    • 是InputStream的子類和OutStream的子類
    • 構造方法
      • DataInputStream(InputStream in)建立的數據輸入流指向一個由參數in指定的底層輸入流
      • DataOutputStream(OutnputStream out)建立的數據輸出流指向一個由參數out指定的底層輸出流
    • 例:
File file=new File("apple.txt");
FileOutputStream fos=new FileOutputStream(file);
DataOutputStream outData=new DataOutputStream(fos);
  • 對象流:對於對象輸入、輸出
    • 容許程序按着機器無關的風格讀取Java原始數據,沒必要再關心這個數值應當是多少個字節
    • 是InputStream的子類和OutStream的子類
    • 構造方法
      • ObjectInputStream(InputStream in)
      • ObjectOutputStream(OutputStream out)
    • 例:
File file=new File("television.txt");
FileOutputStream fileOut=new FileOutputStream(file);
ObjectOutputStream objectOut=new ObjectOutputStream(fileOut);
  • 使用Scanner解析文件
    • 使用默認分隔標記解析文件
      • 相關方法
        • next()依次返回file中的單詞
        • hasNext()判斷file最後一個單詞是否已被next()方法返回
      • 建立Scanner對象,並指向要解析的文件,例如:
File file = new File("hello.java");
          Scanner sc = new Scanner(file); //sc將空白做爲分隔標記
  • 使用正則表達式做爲分隔標記解析文件
    • 相關方法
      • next()依次返回file中的單詞
      • hasNext() 判斷file最後一個單詞是否已被next()方法返回
    • 建立Scanner對象,指向要解析的文件,並使用useDelimiter方法指定正則表達式做爲分隔標記,例如:
File file = new File("hello.java");
Scanner sc = new Scanner(file);
sc.useDelimiter(正則表達式); //sc將正則表達式做爲分隔標記

教材學習中的問題和解決過程

  • 問題1:不知道書P167中例子4重的e.getMessage();中方法於哪裏
  • 問題1解決方案:書P167最上面有三個異常對象能夠調用的方法例舉
  • 問題2:區分不清書上按字節輸入/出,按字符輸入/出,緩衝流、數據流、對象流、隨機流的使用方法(如何定義、語法格式)
  • 問題2解決方案:掌握誰是誰的子類,或是單獨做爲一類便可很好地寫出語法

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

代碼託管

上週考試錯題總結

若是有如下程序片斷java

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 .執行時不顯示任何信息
正確答案: B 你的答案: Ac++

結對及互評

點評模板:

  • 博客中值得學習的或問題:git

    • 有針對本身的問題積極尋找解決方法,和其餘同窗討論正則表達式

    • 教材總結那裏能夠再精簡一點更好數組

  • 代碼中值得學習的或問題:
  • 基於評分標準,我給本博客打分:12分。得分狀況以下:正確使用Markdown語法(加1分);模板中的要素齊全(加1分);教材學習中的問題和解決過程, 一個問題加1分; 代碼調試中的問題和解決過程, 一個問題加1分;本週有效代碼超過300分行的(加2分);感想,體會不假大空的加1分;排版精美的加一分;進度條中記錄學習時間與改進狀況的加1分;代碼Commit Message規範的加1分;點評認真,能指出博客和代碼中的問題的加1分;結對學習狀況真實可信的加1分app

點評過的同窗博客和代碼

其餘(感悟、思考等,可選)

  • 本週和結對夥伴初步設計出了四則運算練習器,擴展瞭如調用eval方法,getPercentInstance方法等知識
  • 經過對教材的學習,瞭解了兩個特殊類的使用方法及輸入、輸出流相關知識
  • 要注意區別各個類使用時的語法格式

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
第一週 11/11 1/1
第二週 262/273 1/2
第三週 642/915 1/3
第四周 384/1299 2/5
第五週 661/1960 1/6
第六週 1031/2991 2/8

參考資料

  • [Java2實用教程(第5版)]
相關文章
相關標籤/搜索