20155302 2016-2017-2 《Java程序设计》第六周学习总结
20155302 2016-2017-2 《Java程序設計》第6周學習總結
教材學習內容總結
Java中的流分為兩種,一種是字節流,另一種是字符流,分別由四個抽象類來表示(每種流包括輸入和輸出兩種所以一共四個):InputStream,OutputStream,Reader,Writer。Java中其他多種多樣變化的流均是由它們派生出來的。
InputStreamReader是InputStream和Reader之間的橋梁,由于System.in是字節流,需要用它來包裝之后變為字符流供給 BufferedReader使用。
InputStream 為字節輸入流,它本身為一個抽象類,必須依靠其子類實現各種功能,此抽象類是表示字節輸入流的所有類的超類。 繼承自InputStream 的流都是向程序中輸入數據的,且數據單位為字節(8bit)。
OutputStream的基本方法: void write(int b) throws IOException 向輸出流寫入一個字節數據 void flush() throws IOException 將輸出流中緩沖的數據全部寫出到目的地
Reader的基本方法: int read() throws IOException 讀取一個字符以整數形式返回,如果返回-1已到輸入流的末尾
Writer的基本方法 void write(int c) throws IOException 向輸出流寫入一個字符數據 void write(String str) throws IOException將一個字符串中的字符寫入到輸出流 void write(String str,int offset,int length) 將一個字符串從offset開始的length個字符寫入到輸出流 void flush() throws IOException 將輸出流中緩沖的數據全部寫出到目的地
java.lang.Thread是Java API中的基礎線程類。定義線程的方法有兩種:一種是制作Thread的子類,覆蓋run()method,然后實例化你的Thread子類;另一種是定義實現了Runnable method的類(也就是定義run() method),然后傳遞此Runnable對象的instance給Thread()構造函數。
線程可以以不同的優先級運行。指定優先級的線程通常會在已無具較高優先級的線程等待時才會運行。
線程是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的操作系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。由于線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間并發執行的程度,從而顯著提高系統資源的利用率和吞吐量。
線程完成run()方法后,就會進入Dead,進入Dead的線程不可以再次調用start()方法,否則會拋出IllegalThreadStateException。
線程和進程的區別在于,子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。
每個對象都會有一個內部鎖定,或稱為監控鎖定。被標示為synchronized的區塊將會被監控,任何線程要執行synchronized區塊都必須先取得指定的對象鎖定。
教材學習中的問題和解決過程
- 問題1:一個線程運行時發生異常會怎樣?
- 問題1解決方案:如果異常沒有被捕獲該線程將會停止執行。Thread.UncaughtExceptionHandler是用于處理未捕獲異常造成線程突然中斷情況的一個內嵌接口。當一個未捕獲異常將造成線程中斷的時候JVM會使用Thread.getUncaughtExceptionHandler()來查詢線程的UncaughtExceptionHandler并將線程和異常作為參數傳遞給handler的uncaughtException()方法進行處理。
- 問題2:為什么wait和notify方法要在同步塊中調用?
- 問題2解決方案:主要是因為Java API強制要求這樣做,如果你不這么做,你的代碼會拋出IllegalMonitorStateException異常。還有一個原因是為了避免wait和notify之間產生競態條件。
代碼調試中的問題和解決過程
問題1:如下代碼為什么打印出來結果只有1次輸出,明明使用了2次println啊??
import java.io.*;public class BasicFileOutput {static String file = "BasicFileOutput.out"; public static void main(String[] args)throws IOException {BufferedReader in = new BufferedReader(new StringReader(BufferedInputFile.read("BasicFileOutput.java")));PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file)));int lineCount = 1;String s;while((s = in.readLine()) != null )out.println(lineCount++ + ": " + s);out.close();// Show the stored file:System.out.println(BufferedInputFile.read(file));}}問題1解決方案:經過我的結對同學學霸秦詩茂的指導與講解,我明白了,第一個println是輸出到文件里去了。第二個println才是輸出到控制臺。所以我看到在控制臺只有一行輸出。
代碼托管
上周考試錯題總結
- 現有:list是?一個合法的集合引?用getCollection()返回?一個合法集合的引?用哪個是合法的?(B,E)
A.or(Object o ; list)
B.for(Object o : getCollection())
C.for(Object o : list.iterator())
D.for(lterator i ; list.iterator() ; i.hasNext () )
E.for(lterator i=list.iterator(); i.hasNext (); )
現有
public class Demo{public static void main (String[] args){ List al=new ArrayList();a1.add("l");a1.add("2");a1.add("2");a1.add("3"); System.out.println (al);}}上述程序執?行行后的輸出是哪項?A.[1,2,3]B.[1,2,3,3]C.[1,2,2,3]D.[2,1,3,2]Which of the following methods will not compile? :(B,D)
A.private void method1(String name) { if (name.equals("star"))
throw new IllegalArgumentException(name);
}
B.private void method2(int age) { if (age > 30)
throw Exception();
}
C.public double method5() throws Exception { return 0.7;
}
D.protected double method4() throws Exception { throw new Throwable();
}
- 表示鍵值對概念的接?口是?:(D)
A.Set
B.List
C.Collection
D.Map
- 創建?一個只能存放String的泛型ArrayList的語句句是哪項?:(B)
A.ArrayList al=new ArrayList(); B.ArrayList al=new ArrayList() C.ArrayList al=new ArrayList(); D.ArrayList al =new List();
結對及互評
評分標準
- 不使用Markdown不加分
- 有語法錯誤的不加分(鏈接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
- 缺少“教材學習中的問題和解決過程”的不加分
- 缺少“代碼調試中的問題和解決過程”的不加分
- 代碼托管不能打開的不加分
- 缺少“結對及互評”的不能打開的不加分
- 缺少“上周考試錯題總結”的不能加分
- 缺少“進度條”的不能加分
- 缺少“參考資料”的不能加分
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分
- 一周提交次數少于20次的不加分
- 周五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進情況的加1分
- 有動手寫新代碼的加1分
- 課后選擇題有驗證的加1分
- 代碼Commit Message規范的加1分
- 錯題學習深入的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習情況真實可信的加1分
- 有抄襲的扣至0分
- 代碼作弊的扣至0分
- 遲交作業的扣至0分
點評模板:
- 博客中值得學習的或問題:
- xxx
- xxx
- ...
- 代碼中值得學習的或問題:
- xxx
- xxx
- ...
基于評分標準,我給本博客打分:XX分。得分情況如下:xxx
參考示例
點評過的同學博客和代碼
- 本周結對學習情況
- 20155322
- 結對照片
- 結對學習內容
串流繼承的內容和架構
- 第十章與第十一章課后練習
代碼調試中遇到的困難和問題
- 線程內容中synchronized,wait(),notify(),notifyAll()等使用方法和環境
- 上周博客互評情況
- 20155333
- 20155233
- 20155230
- 20155339
- 20155306
其他(感悟、思考等,可選)
本周的學習由于其他科目實驗,在代碼量上有些不足,希望自己下周可以再在代碼上下更多的功夫,只有自己動手敲代碼,在做中學才是最好的學習手段和方式,對于書中不好理解的知識要在仔細思考的條件下百度或者計時問老師,不要讓盲點陪自己過夜,邊學邊反思自己哪里做的不夠好,及時修正。
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 20/20 | 2/2 | 20/20 | |
| 第二周 | 140/160 | 2/4 | 18/38 | |
| 第三周 | 113/273 | 1/5 | 20/58 | |
| 第四周 | 335/608 | 1/6 | 20/78 | |
| 第五周 | 1159/1408 | 1/7 | 30/108 | |
| 第六周 | 452/1860 | 1/8 | 20/128 |
轉載于:https://www.cnblogs.com/STILLlover521/p/6654815.html
總結
以上是生活随笔為你收集整理的20155302 2016-2017-2 《Java程序设计》第六周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搭建一个简单的FTP服务器
- 下一篇: Java-NIO(三):直接缓冲区与非直