日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

20145234黄斐《java程序设计》第六周

發布時間:2025/3/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20145234黄斐《java程序设计》第六周 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

教材學習內容總結

第十章:輸入與輸出

InputStream與OutputStream

  • 流(Stream)是對「輸入輸出」的抽象,注意「輸入輸出」是相對程序而言的
  • InputStream與OutputStream
  • InputStream、OutStream提供串流基本操作,如果想要為輸入/輸出的數據做加工處理,則可以使用打包器類。常用的打包器具備緩沖區作用的BufferedOutputStream、BufferedInputStream,具備數據轉換處理的DataInputStream、DataOutputStream,具備對象串行化能力的ObjectInputStream、ObjectOutputStream等。
    • read
    • 針對字符數據的讀取,Java SE提供了java.io.Reader類,其抽象化了字符數據讀入的來源。針對字符數據的寫入,則提供了java.io.Writer類。其抽象化了數據寫出的目的地。
    • write
    • FileReader、FileWriter則可以對文檔做讀取與寫入,讀取或寫入時默認會使用操作系統默認編碼來做字符轉換。在啟動JVM時,可以指定-Dfile.encoding來指定FileReader、FileWriter所使用的編碼。
    • 二進制文件
  • 標準輸入輸出
    • System.in: 標準輸入,默認關聯到鍵盤(終端輸入)
    • System.out: 標準輸出,默認關聯到顯示器(終端輸出)
    • System.err: 標準錯誤,默認關聯到顯示器(終端輸出)
    • 輸入輸出重定向:setIn,setOut,setErr
  • FileInputStream與FileOutPutStream
  • FileInputStream是InputStream的子類,可以指定文件名創建實例,一旦創建文檔就開啟,接著就可用來讀取數據。FileOutputStream是OutputStream的子類,可以指定文件名創建實例,一旦創建文檔就開啟,接著就可以用來寫出數據。無論FileInputStream還是FileOutputStream,不使用時都要使用close()關閉文檔。
    • 文件讀寫
  • 裝飾器類
    • Decorator模式
    • BufferedInputStream與BufferedOutputStream: 內部提供緩沖,提高效率
    • DataInputStream與DataOutputStream:基本數據類型與字節的轉換,API好好研究一下
    • ObjectInputStream與ObjectOutputStream
      • java.io.Serializable接口

字符處理類

  • Reader與Writer
  • Reader、Writer也有一些裝飾器類可供使用。如果串流處理的字節數據,實際上代表某些字符的編碼數據,而你想要將這些字節數據轉換為對應的編碼字符,可以使用InputStreamReader、OutputStreamWriter對串流數據打包。BufferedReader、BufferedWriter可對Reader、Writer提供緩沖區作用,在處理字符輸入/輸出時,對效率也會有所幫助。PrintReader、PrintStream使用上極為類似,不過除了可以對OutputStream打包之外,PrintWriter還可以對Writer進行打包,提供print()、println()、format()等方法。
  • 字符處理裝飾器
    想要將這些字節數據轉換為對應的編碼字符,可以使用InputStreamReader、OutputStreamWriter對串流數據打包。
    BufferedReader、BufferedWriter可對Reader、Writer提供緩沖區作用,在處理字符輸入/輸出時,對效率也會有所幫助。
    PrintWriter還可以對Writer進行打包,提供print()、println()、format()等方法。

第十一章部分 - 線程與并行API

線程

  • 線程
  • 在java中,如果想在main()以外獨立設計流程,可以撰寫類操作java.lang.Runnable接口,流程的進入點是操作在run()方法中。
    在java中,從main()開始的流程會由主線程執行,可以創建Thread實例來執行Runnable實例定義的run()方法。
  • Thread與Runnable
    • JVM是臺虛擬計算機,只安裝一顆稱為主線程的CPU,可執行main()定義的執行流程。如果想要為JVM加裝CPU,就是創建Thread實例,要啟動額外CPU就是調用Thread實例的start()方法,額外CPU執行流程的進入點,可以定義在Runnale接口的run()方法中。
    • 撰寫多線程程序的方式:
      • 將流程定義在Runnable的run()方法中
      • 繼承Thread類,重新定義run()方法
    • 操作Runnable接口的好處就是較有彈性,你的類還有機會繼承其他類。若繼承了Thread,那該類就是一種Thread,通常是為了直接利用Thread中定義的一些方法,才會繼承Thread來操作。
    • 如果想要為JVM加裝CPU,就是創建Thread實例,要啟動額外CPU就是調用Thread實例的start()方法,額外CPU執行流程的進入點,可以定義在Runnale接口的run()方法中。
  • 線程生命周期
  • Daemon線程:主線程會從main()方法開始執行,直到main()方法結束后停止JVM。如果主線程中啟動了額外線程,默認會等待被啟動的所有線程都執行完run()方法才中止JVM。如果一個Thread被標示為Daemon線程,在所有的非Daemon線程都結束時,JVM會自動終止。從main()方法開始的就是一個非Daemon線程,可以使用setDaemon()方法來設定一個線程是否為Daemon線程。還可以使用isDaemon()方法判斷線程是否為Daemon線程。
  • 線程控制的一些方法
  • 接口定義行為
    • interrupt
    • sleep
    • join
    • stop(Deprecated)
    • resume(Deprecated)
    • suspend(Deprecated)
    • destroy(Deprecated)
    • 線程的停止、暫停、重啟要程序員設定實現條件或使用并發API,不要調用Deprecated的方法
    • 同步:synchronized與volatile
    • wait、notify、notifyAll
  • ThreadGroup
    每個線程都屬于某個線程群組,如果沒有指定,則歸入產生該子線程的線程群組,也可以自行指定線程群組,線程一旦歸入某個群組,就無法再更換。ThreadGroup的某些方法,可以對群組中所有線程產生作用。如果想要一次取得群組中所有線程,可以使用enumerate()方法。activeCount()方法取得群組的線程數量。
  • 未捕捉異常會由線程實例setUncaughtExceptionHandler()設定的Thread.UncaughtExceptionHandler實例處理之后是線程ThreadGroup,然后是默認的Thread.UncaughtExceptionHandler。

    package cc.openhome; public class TortoiseHareRace2{ public static void main(String[] args){ Tortoise tortoise = new Tortoise(10); Hare hare = new Hare(10); Thread tortoiseThread = new Thread(tortoise); Thread hareThread = new Thread(hare); tortoiseThread.start(); hareThread.start(); } }

并行API

如果需要的是線程池、讀寫鎖等高級操作。從JDK5之后提供了java.util.concurrent包,可基于其中的API建立更穩固的并行應用程序。java.util.concurrent.looks包中提供Lock、ReadWriter與Condition接口以及相關操作類,可以提供類似 synchronized、 wait()、notify()、notifyAll()的作用,以及更多高級功能。

    • Lock:相對與Thread模型的隱式的鎖對象,Lock提供了顯式的鎖操作從而簡化應用程序。Executors:提供了一組HighLevelAPI用來執行和管理并行任務。  ConcurrentCollections(并行集合):包含了一組支持并行處理的數據結構,大大簡化了并行編程難度。AtomicVariables(原子變量):減少了同步操作并且避免數據不一致。Fork/Join框架:提供了進程操作的支持。
    • 相對與Thread模型的隱式的鎖對象,Lock提供了顯式的鎖操作從而簡化應用程序。Executors:提供了一組HighLevelAPI用來執行和管理并行任務。  ConcurrentCollections(并行集合):包含了一組支持并行處理的數據結構,大大簡化了并行編程難度。AtomicVariables(原子變量):減少了同步操作并且避免數據不一致。Fork/Join框架:提供了進程操作的支持。
    • ReadWriteLock:ReadWriteLock接口定義了讀取鎖定與寫入鎖定行為,可以使用readLock()、writeLock()方法返回Lock操作對象。ReentrantReadWriteLock是ReadWriteLock接口的主要操作類,readLock()方法會返回ReentrantReadWriteLock.ReadLock實例,writeLock()犯法會返回ReentrantReadWriteLock.WriteLock實例。
    • Condition:Condition接口用來搭配Lock,最基本用法就是達到Object的wait()、notify()、notifyAll()方法的作用。Condition的await()、signal()、signalAll()方法,可視為Object的wait()、notify()、notifyAll()方法的對應。
    • Executor:提供了一組HighLevelAPI用來執行和管理并行任務。
    • ScheduledThreadPoolExecutor:ScheduledExecutorService為ExecutorService的子接口,顧名思義,可以讓你進行工作排程:schedule()方法用來排定Runnable或Callable實例延遲多久后執行一次,并返回Future子接口ScheduledFuture的實例,對于重復性的執行,可使用scheduleWithFixedDelay()和scheduleAtFixedRate()方法。
    • ForkJoinPool:所謂分而治之的問題,是指這些問題的解決,可以分解為性質相同的子問題,子問題還可以再分解為更小的子問題,將性質相同的子問題解決并收集運算結果,整體問題也就解決了。
      ForkJoinPool與其他的ExecutorService操作不同的地方在于,它是閑聊了工作竊取演算,其建立的線程如果完成手邊任務,會嘗試尋找并執行其他任務建立的資額任務,讓線程保持忙碌狀態,有效利用處理器的能力。需要注意:ForkJoin框架適用于計算密集式的任務,較不適合用于容易造成線程阻斷的場合。
    • 并行Collection
      • CopyOnWriteArrayList操作了List接口,這個類的實例在寫入操作是,內部會建立新數組,并復制原有數組索引的參考,然后在新數組上進行寫入操作,寫入完成后,再將內部原參考舊數組的變量參考至新數組。
      • CopyOnWriteArraySet操作了Set接口,與CopyOnWriteArrayList相似。
      • BlockedQueue是Queue的子接口,新定義了put()、take()方法。
      • ConcurrentMap是Map的子接口,其定義了putIfAbsent()、remove()、replace()等方法。這些方法都是原子操作。
      • ConcurrentHashMap是ConcurrentMap的操作類,ConcurrentNavigableMap是ConcurrentMap的子接口,其操作類為ConcurrentSkipListMap,可視為支持并行操作的TreeMap版本。

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

  • 問題1:InputStream與Reader差別?OutputStream與Writer差別

InputStream和OutputStream類處理的是字節流,數據流中的最小單位是字節(8個bit)

Reader與Writer處理的是字符流,在處理字符流時涉及了字符編碼的轉換問

Reader類能夠將輸入流中采用其他編碼類型的字符轉換為Unicode字符,然后在內存中為其分配內存

Writer類能夠將內存中的Unicode字符轉換為其他編碼類型的字符,再寫到輸出流中。

  • 問題2:教材327頁TortoiseHareRace2.java代碼運行代碼運行的時候先執行完烏龜走完10步,再執行兔子走完10步,而不是按烏龜和兔子每輪走的情況來執行的。

上周考試錯題解析

雖然因為大部分人沒有提交所以都是五分,但是我是提交的三個人中的一個,也知道了錯題

1.輸入"cd"命令并按回車鍵后,將會出現什么情況?A.從當前目錄切換到根目錄B.屏幕顯示當前目錄C.從當前目錄切換為上一級目錄D.從當前目錄切換到用戶主目錄(D)

3.現有:

? ? import java.util.*;

? ? ?Class FindStuff? {

? ? ?public static void main (String[]args)??? {

? ? ? ? //insert code here

? ? ? ? c.put ("X", 123);

? ? ? ? }

? ? }

分別插入到第5行,哪幾行允許代碼編譯?(BDF)

?

A . Map c= new SortedMap();

?

B . HashMap c= new HashMap();

?

C . HashMap c= new Hashtable();

?

D .SortedMap c= new TreeMap();

?

E .ArrayList c= new ArrayList();

?

F .Map c = new LinkedHashMap();

4.現有:

??? - list是一個合法的集合引用

??? - getCollection()返回一個合法集合的引用

??? 哪個是合法的?(BE)

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? ();? )

5.現有:

??? import java.util.*;

??? class ForInTest? {

??? ??static List list=new ArrayList();

??? }

??? public static void main (String? []? args)? {

??? ??list. add("a"); list. add("b");list. add( "c");

??? ?????//insert code here

??? ????System.out.print (o);

??? ????}

?? ?}

??? 哪一行插入到第9行將導致輸出“abc"?(D)

?

A .for (Iterator o? :? list.iterator();? o.hasNext? ();? )

B .for (Iterator o :? list)

C .for (Object o? :? list.iterator())

D . for (Object o? :? list)

7.創建一個只能存放String的泛型ArrayList的語句是哪項?(B)

A .ArrayList<int> al=new ArrayList<int>();

B . ArrayList<String> al=new ArrayList<String>()

C .ArrayList al=new ArrayList<String>();

D .ArrayList<String> al =new List<String>();

12.集合API 中Set接口的特點是?(D)

A .不允許重復元素,元素有順序

B .允許重復元素,元素無順序

C .允許重復元素,元素有順序

D .不允許重復元素,元素無順序

15.(D)

17.(C)

19.(AC)

20.(C)

21.(D)

24.(D)

29.(D)

代碼托管

評分 8

  • 教材學習中的問題和解決過程, 一個問題加1分
  • 本周有效代碼超過300分行的(加2分)
  • -排版精美的加一分
  • -進度條中記錄學習時間與改進情況的加1分
  • -錯題學習深入的加1分
  • 互評

    基于評分標準,我給俞昆的博客打分:3分。得分情況如下:
    正確使用Markdown語法:+1
    模板中的要素基本齊全:+1
    代碼Commit Message規范的:+1

    學習進度條

    ?

    轉載于:https://www.cnblogs.com/taigenzhenjun/p/6657747.html

    總結

    以上是生活随笔為你收集整理的20145234黄斐《java程序设计》第六周的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。