1. 程式人生 > >迅速學java——100條小知識點快速入門

迅速學java——100條小知識點快速入門

1.首先java是一種高階語言是一個面向物件的程式語言同時最重要的是它的可移植性。 2.java語言的產生及發展歷史,由James Gosling領導的小組在Sun公司開發,發展主要用於開發可嵌入家電產品的軟體之後java的重心轉移到Internet程式設計到現在面向網路應用,類庫不斷豐富性能不斷提升應用領域不斷擴充套件。 3.java具有三大平臺:J2ME(嵌入式平臺)、J2SE(標準平臺)、J2EE(企業級平臺)。 4.java即是編譯性有是解釋性,它採用了基於國際標準的資料型別,java的資料型別仔任何機器上的都是一致的,不支援特定於具體硬體環境的資料型別,編譯器所產生的可執行程式碼並不基於任何具體的硬體平臺,而時基於一種抽象的機器——JVM虛擬機器。 5.java語言的執行機制是源程式編譯成為位元組碼檔案解釋執行成為可執行檔案。 6.java平臺=java應用程式設計介面(API)+java虛擬機器(JVM),java軟體開發工具箱JDK,然後JDK和JVM合起來是java平臺。 7.java程式分為兩類一類是應用程式Application這是一個獨立程式能夠在任何具有java直譯器的計算機上執行,另一種是小程式Applet可以相容的執行在java的web瀏覽器上。 8.java的標誌符由字母,數字,下劃線,美元符組成,不能以數字開頭,不能與關鍵字保留字同名,另外java區分大小寫。 9.java資料型別分為基本資料型別和引用資料型別,基本資料型別為char、byte、short、int、long、float、double、boolean,引用資料型別分為class、interface、array、null。 10.java資料型別所佔位數和範圍: char佔16位數範圍是0~65535 byte佔8位數範圍是-2^7~2^7-1 short佔16位數範圍是-2^15~2^15-1 int佔32位數範圍是-2^31~2^31-1 long佔64位數範圍是-2^63~2^31-1 float佔32位數範圍是3.4e^-38~3.4e^+38 double佔64位數範圍是1.7e^-308~1.7e^+308 11.java的字符采用統一碼Unicode,是一種16位的編碼方案佔兩個位元組同時Unicode包含AscII碼,可以利用型別轉換將字元轉換為數值編碼反之亦然。 12.布林型別來自於布林代數,值域包括真和假即true和false,用布林值進行運算的運算子是比較運算子(關係運算符)和布林運算子(邏輯運算子)。 13.資料型別轉換的自動型別轉換,不同的型別先轉化為同一個型別轉換從低階到高階,byte、short、char——>int——long>——float>——>double,當兩個型別不同的運算物件進行二元運算時,java自動把精度較低的型別轉換為另一個精度較高的型別,如果不進行型別轉換不能將高精度型別的值賦給低精度型別的變數。 14.強制型別轉換即容量大的型別轉換成容量小的型別必須使用強制型別轉換會導致溢位或者損失精度捨棄小數等等。 15.java的常量和變數,變數的值在程式執行的過程中可能會變常量則表示永遠不會變的資料,使用final定義一個常量,必須在使用前給予說明和初始化。 16.java的迴圈控制結構分為順序語句、分支語句(if-else,switch-case)、迴圈語句(while,do-while,for)、轉移語句(break,continue)。 17.java的陣列宣告有兩種宣告方式一種是c語言風格的宣告 資料型別 陣列名[]而還有一種java風格的宣告 資料型別[] 陣列名 ,建立陣列的格式 陣列名=new 資料型別[陣列大小],還可以宣告和建立同時進行,可以使用迴圈初始化陣列,陣列具有length屬性存放陣列的長度。二維陣列是一維陣列的陣列並且二維陣列的每維長度可以是不同的。 18.java類與物件的概念,類的含義為了更好的分析和解決問題,人們通常將事物安照特徵進行分類,屬於同一個類的物件擁有相同的特徵屬性和行為,java中用類來描述物件的共同特徵屬性和行為,其中共同的特徵屬性表現為資料成員變數行為表現為成員方法,對於類也可以理解成為一個新的資料型別 19.類體內包含三種成員,第一種是靜態資料叫成員變數,第二種是動態的方法包括成員方法和構造方法,最後一種是隸屬於該類的其他的類或介面,類是分類存放函式的容器。 20.程式語言中的物件與顯示時間的物件含義是相同的隊形就是一個獨立的事物,所以類的物件有稱為類的例項。 21.類的定義 : 類宣告{ 成員變數的宣告; 成員方法的宣告和實現: 隸屬於該類的其他類或介面; } 22.java的成元變量表示類的狀態和屬性通過成員方法來操作。成員方法實現對類中成員變數的操作通過物件來呼叫。 23.物件的建立和應用,首相要進行對像的宣告:類的名字 物件的名字,之後進行初始化 :物件名字 = new 類的名字()。 24.物件的引用是通過運算子.來運用物件的變數和方法。 25.java類的構造方法,構造方法的名字必須與類名相同,構造方法用於建立類的例項並對例項的成員變數進行初始化,構造方法在被new的時候呼叫。 26.方法的過載關鍵在於方法的名字相同但是引數不同,引數的個數不同或者型別不同。 27.java的this可以理解為一個代詞,代表當前物件,如果方法形參與物件成員變數同名,那麼可以用this區分。 28.在java中由static修飾的變數是類變數,由物件共享這個變數也可以由類來引用,同理由static修飾的方法是類方法但是隻能通過類訪問只能處理static屬性的變數。 29.java類的繼承使用extends來繼承父類建立子類,子類繼承父類訪問許可權為public、protecte變數和方法,不繼承private的變數和方法所有的類都直接或者間接的繼承了java.lang.Object類。 30.在類的繼承過程中,會出現成員變數的隱藏即子類變數與父類變數同名則父類變數被隱藏,還會出現方法重寫即子類重新定義父類已有方法。 31.java的super,this表示當前物件而super表示父類物件,可以通過它來呼叫父類的構造方法,並切在子類構造方法中super必須是第一條構造方法。 32.物件的賦值相容性和向上轉型。 33.abstract抽象類,不能例項化即不能建立物件主要作為基類或父類存在,同時繼承abstract類的子類要實現所有的abstract方法,由於抽象方法在抽象類中沒有具體的方法實現,所以抽象方法必須被子類覆蓋,抽象方法不能為private,不能將構造方法、類成員方法宣告為抽象方法,abstract抽象方法不能和static同用,父類的非抽象方法可以被子類的抽象方法覆蓋。 34.最終類不能被繼承所以abstact和final不能同用。 35.interfance介面是方法定義和常量值的集合,介面是特殊的抽象類,只包含常量和方法的定義而沒有方法的實現,介面宣告: interface 介面名{ //常量和方法定義 } 36.介面使用的關鍵字是implements在類名後使用關鍵字implements+介面名,在使用時注意類體中必須實現介面定義的所有方法,介面中的方法和常量必須是public的,實現時方法頭要一致,父類被繼承時介面同時被繼承,介面也可以被繼承關鍵字是extends,介面一般表示功能類一般表示屬性。 37.java內部類就是在一個外部類的內部在定義一個類,內部類的特性可以隨意使用外部類的成員變數包括私有,而不用生成外部類的物件,程式編譯後會產生兩個class檔案,分別是Out.class和Out$In.class,必須先有外部類的物件才能生成內部類的作用就是為了訪問外部類中的成員變數。 38.java內部匿名類即沒有名字的內部類,使用匿名內部類還有一個前提必須繼承一個父類或者實現一個介面。格式是: new 類或者介面{ //類體 } 38.在java中所有的類都直接或者間接的繼承Object類,在這個類中沒有定義資料只定義了方法,這些方法意味著是所有java類中都具備的特性。 39.陣列類Arrays包含用來運算元組的各種方法 40.String分為兩大類字串常量和字串變數,它被當作物件來處理,其中的常用方法有length(返回字串的個數),indexOf和lastIndexOf檢索特定字元或字串,查詢成功返回匹配的字元位置,沒有查詢到返回-1。兩個字串之間可以使用+號來連線,charAt(int index )可以返回字串中index位置上的字元,使用substring得到字串中指定範圍內的字串,toLowerCase將字串的所有字母都轉為小寫,toUpperCase將字串中的字元轉換成大寫,equals和equalslgnoreCase可以判斷兩個字串是否相等前者區分大小寫後者不需要 41.在java中基本資料型別不作為物件使用,但許多java方法需要物件作為引數所以java提供了一個方便的方法將基本資料型別包裝成為物件,這些類對應了基本資料型別有:Boolean、Character、Byte、Short、Interger、Long、Float、Double。型別轉換通過實現Number類中定義的抽象方法成為longValue、intValue等方法,並覆蓋了Object類中定義的toString和equals方法。其中還有靜態方法valueOf該方法建立一個新物件,並將它初始化為指定字串表示的值 42.java的Math類包含常用數學計算比如執行基本的數學運算的方法,如初等指數、對數、平方根、三角函式 43.java.util包提供了一組集合相關的類庫定義及實現,稱為集合API 44.Vector向量類能夠用來儲存數目不確定的元素,一個向量能跟據需要動態伸縮,通過addElement和insertElement來新增和插入元素,使用setElement和removeElement來修改和刪除 45.java的List介面,保證元素可以按照規定的順序排列,可包含重複的元素,對元素可進行新增和刪除操作,LinkedList類允許將連結串列應用於堆疊、佇列和雙端佇列,ArrayList允許快速訪問元素,適用於遍歷。 46.java的HashMap類,哈西表的Map介面用來存放一組無序的KeyValue例如學號和成績,學號是key成績是value 47.java的隨機數類是Random 48.java的GUI使用框架、面板、簡單使用者介面GUI元件分為AWT和Swing 49.佈局管理器有FlowLayout、GridLayout、BorderLayout 50.JComponent類的常見元件Button、Checkbox、CheckboxGroup,choice,Label,List、Canvas、Scrollbar等。Container類則用來表示各種GUI元件的容器,add()新增一個元件,remove()刪除一個元件,setLayout()設定佈局,常見Container類有Frame、Panel、Applet等 51.頂層容器:Swing頂層容器包括JFrame、JDialog、JApplet等,所有頂層類都提供獲取和設定內窗格的方法,getContentPane()、setCOntentPane() 52.非頂層容器的主要目的是為了更好的管理佈局和佈置元件 53.框架JFrame是一個不被其他窗體所包含的獨立的窗體,是容納其他使用者介面元件的基本單位,用來建立一個窗體。它的預設佈局管理器是BorderLayout。給JFrame新增元件其實是新增到了JFrame的內容窗格。 54.佈局管理提供了一個抽象,自動把使用者介面對映到所有的視窗系統上,java的GUI元件放在容器中放置,這些元件由GUI元件由容器進行管理使用setLayout 55.FLowLayout最簡單的佈局管理器,按新增元件的順序由左到右將元件排列到容器中,一行排滿後在排新的一行 BorderLayout分為東西南北和中五個區域,Frame的預設佈局管理器,元件根據他們最適合的尺寸和在容器的位置來放置,南北元件可以水平擴充套件、東西元件能夠豎直拉伸,中央元件可以水平也可以豎直擴充套件以填滿空白空間。 GridLayout根據構造方法定義的行數和列數以網格的形式排列元件,元件新增的順序從左到右排列 56.面板元件是非頂層容器,可以將其他的控制元件放在JPanel中以組織一個子介面,通過巢狀使用JPanel,面板是分組放置使用者介面元件的更下的容器,通常將元件放置在框架中也可以在一個面板中在放置面板,面板的Swing版是JPanel,預設情況下JPanel使用FlowLayout,給面板新增元件是直接新增到你面板的。 57.各種使用者元件:JButton、JLable、JTextField、JTextArea、JComboBox、Jlist、JCheckBox、JRadioButton、JMenuBar、JMenu、JMenuItem、JCheckBoxMenuItem、JRadioButtonMenuItem、JScrollBar、JScrollPane、JTabbedPane等 JButton元件表示一個命令按鈕,一般用於完成某個特定功能 JLable標籤是簡單的Swing元件,用於顯示一行文字、一個圖示 JTextField用於顯示和編輯單行文字 JPasswordField允許使用者在其中輸入單行密碼,但輸入的字元會以“*”代替 JRdioButton的預設圖示是一個小圓圈被選中時圓圈內會有一個小圓點,在新增單選按鈕時還應該設計ButtonGroup按鈕組類,用於將多個單選按鈕歸於一組 JCheckBox複選框可以用來實現多項選擇,一個複選框選中與否的狀態變化,不會影響其他複選框,通常情況複選框由一個方框和一個標籤組成 58.選單能夠簡化選擇,廣泛用於各種視窗應用程式,一個JFrame和一個JApplet可以擁有一個JMenuBar用來存放選單,可以看作是 存放選單的上層元件,選單由使用者可選擇選單項組成。 選單欄JMenuBar是視窗中,用於容納選單JMenu的容器,而選單JMenu是若干個選單項JMenuItem或子選單的容器,能被新增到JMenuBar或其他JMenu中,選單項JMenuItem是組成選單或快捷選單的最小單位,不可分解完成特定功能。 59.java的事件處理機制,事件可以定義為程式發生了某些事情的訊號,事件源是在其上發生事件的GUI元件被稱為事件的源物件,一個事件是事件類的例項,事件類的根類是EventObject,事件物件包含與事件有關的一切屬性,可以使用EventObject類中的例項方法getSource()獲得事件的源物件 60.元件事件處理,先註冊監聽者物件通過方法addActionLister()事件源會觸發事件ActionEvent事件,呼叫並傳遞引數實現介面監聽者actionPerformed() 61.JButton按鈕事件單擊按鈕引發動作事件ActionEvent對應的監聽介面是ActionListener對應的方法是actionPerformed 62.JTextField文字框事件的ActionEvent當按回車時產生,TextEvent當文字內容變化時產生,會響應文字域的ActionEvent事件 63.彈出對話方塊JDialog例項必須要依賴於某個視窗,訊息對話方塊是有模式對話方塊,進行一個重要動作之前最好能彈出一個訊息對話方塊 public static void showMessageDialog (Compotent parent , Object message )throws HeadlessException 64.滑鼠事件MouseEvent java提供了處理滑鼠事件的兩個監聽器介面MouseListener和MouseMotionListener,MouseListener介面監聽滑鼠的按下鬆開進入退出和點選行為,MouseMotionListener介面監聽滑鼠的移動和拖動行為。 當滑鼠進入或離開元件的時候呼叫:mouseEntered()和mouseExit() 當滑鼠按下或者鬆開時呼叫:mousePressed()和mouseReleased() 當按下滑鼠並鬆開後呼叫:mouseClicked() 當不按按鈕移動滑鼠時呼叫:mouseMoved() 當按下按鈕移動滑鼠時呼叫:mouseDragged() 65.鍵盤介面是KeyListener,java在KeyEvent中為許多鍵定義了常量包括功能鍵在內分別由getKeyChar和getKeyCode方法獲得前者獲得鍵位元組碼後者獲得鍵編碼 67.程式執行過程中,如果出現一個不可能執行的操作就會出現執行時的錯誤,執行時錯誤會引起異常,異常是程式執行過程中出現的事件,中斷正常的程式控制流,沒有異常處理程式碼的程式可能非正常結束引起嚴重的問題,java給程式設計師提供了處理執行時錯誤的功能稱為異常處理。 68.語法錯:如果編譯程式不通過,說明程式中存在語法錯誤,語法錯誤是由於違法語法規則產生的,java編譯器能發現語法錯誤,並給出錯誤的位置和性質 語義錯:編譯通過了但程式在執行時因為出現錯誤而被迫終止執行,則稱這種錯誤為異常,java直譯器在執行時發現了異常,一旦發現將停止程式執行並給出異常的位置和性質,一些錯誤的發生不受程式本身所控制必須進行異常處理 邏輯錯:程式編譯通過也能正常執行,但執行結果與期望不符說明存在邏輯錯誤。 69.java的異常是Throwable子類的一個例項,Throwable包含在lang中它的子類在不同的包中,與圖形相關的錯誤包含在awt中,數值異常包含在lang中。 70.java的異常處理基於三種操作,宣告異常、丟擲異常、補貨異常。通過try-catch捕獲異常,通過throws Exception宣告異常,通過throw new Excception丟擲異常 71.一般來說每一個方法都必須在方法頭說明它可能遇到的異常型別,這一過程稱為宣告異常,在java中執行的語句必然屬於某個方法,當一個語句引起錯誤時,含有這個語句的方法就會建立一個異常物件並將它傳遞給系統,異常物件包含有關異常的資訊,包括它的型別和出錯時程式的狀態,這一過程稱為丟擲異常,一個方法丟擲異常後,java執行系統開始尋找用來處理錯誤的程式碼,處理錯誤的程式碼稱為異常處理器,從當前的方法開始,通過方法呼叫鏈向後搜尋,查詢這一程式碼,處理器必須丟擲的異常型別相匹配,如果未發現異常處理器,程式就會終止。這個尋找異常處理器的過程稱為捕獲異常。 72.宣告異常就是告訴編譯器在執行方法的過程中可能出現的錯誤,在方法宣告中使用關鍵字throws可以宣告異常,在方法頭中用關鍵字throws進行宣告,但是聲明瞭丟擲異常的方法未必會真的丟擲異常 73.丟擲異常在聲明瞭異常的方法中,如果出現異常,就可以丟擲一個異常物件,throw new TheException,一個方法只能丟擲在方法宣告中宣告的異常以及異常Error、RuntimeException和以上這些異常的子類 74.當呼叫一個顯示宣告異常的方法時必須使用try-catch塊括住丟擲異常的語句 75.若程式中有多個catch語句要注意它們的順序,正確的做法是先捕獲最特殊的異常(子類異常),之後逐漸一般化(父類異常),對一段可能丟擲大量不同型別異常的程式來說逐個捕獲處理異常可能會比較繁瑣,而僅僅捕獲它們父類的異常則會比較方便,實際使用中需要避免捕獲最一般的異常使得使用者往往不能確切的判斷異常的具體型別,並作出相應的處理 76.有時不論異常是否出現或者是否被捕獲,都希望執行某些目的的程式碼,java的finally子句可以用來達到這一個目的。 try{ //有異常丟擲的函式呼叫 } catch(捕獲的異常 變數){ //異常處理 } finally{ //無論有無異常丟擲都執行這裡的語句,主要用於資源的釋放。 } 77.程式是一段靜態的程式碼,而程序是程式的動態執行過程,執行緒是程序中單一順序的控制流,多執行緒是計算機同時執行多個執行執行緒的能力。程式載入後進程會分為主執行緒和其他執行緒。 78.建立執行緒的方法一是繼承Thread類,直接定義Thread類,覆寫run方法在方法裡定義要執行的具體操作,也可以實現Runnable介面,只定義了run介面在類定義時實現run方法。 79.Thread類的建立執行緒,Thread(Runnable target,String threadname )分別是執行緒目標物件和名稱,主要方法是start():啟動執行緒從新建狀態進入就緒排隊狀態,run():定義執行緒操作需要定義run方法。步驟是繼承Thread類之後覆寫run方法,之後在建立使用者執行緒例項呼叫start方法啟動執行緒。 80.Runnable介面需要實現run方法將該類物件作為引數建立類Thread的物件呼叫start方法啟動執行緒。 81.兩種建立執行緒方式的比較,直接繼承Thread類:該類具有Thread類宣告的方法其物件本身就是執行緒物件,可以直接控制和操作但該方法僅適用於單繼承,不適用於多繼承,實習Runnable介面:該物件本身並不是執行緒物件,還需要與一個Thread執行緒物件繫結在一起,作為執行緒物件的目標物件來使用,適用於多重繼承。 82.執行緒狀態: 新建態(NEW):使用new建立一個執行緒物件後,即處於新建態,此時系統還未給他分配資源。 可執行態(RUNNABLE):處於新建態的執行緒呼叫start()方法後就可以進入克執行狀態,等待被CPU呼叫。 阻塞態(BLOCKED)、等待態(WAITING)、定時等待(TIMD_WAITING):處於可執行態的執行緒因某種原因不能繼續執行的狀態,只當引起阻塞的原因被消除,或等待的條件滿足時執行緒才轉入可執行狀態。 終止態(TERMINATED):執行緒正常或異常結束後即進入該狀態。 83.在新建狀態時通過start()進入RUNNABLE執行狀態,可以通過sleep()、wait()、synchronized()、run()分別進入到等待狀態、等待態、阻塞態、終止狀態。 84.可以通過sleep()使執行緒暫時進入休眠,而setPriority()可以設定執行緒的優先順序,MIN_PRIORITY代表最小優先順序,NORM_PRIORITY代表普通優先順序,MAX_PRIORITY代表最高優先順序。 85.執行緒同步資源競爭,在多執行緒的環境中,可以同時做多件事情,但是如果兩個或者多個執行緒同時使用同一個受限資源的時候就會出現資源訪問的衝突,併發執行的互動執行緒之間存在與時間有關的錯誤,互動的併發執行緒執行時由於在不同時刻對同一個共享變數進行操作,執行緒之間相互影響、相互干擾,因此計算結果往往取決於這一組併發執行緒的相對速度,各種時間有關的錯誤就可能出現。 86.執行緒之間的競爭關係會出現兩個問題: 1.死鎖:一組執行緒如果都獲得了部分資源,還想要得到其他執行緒所佔用的資源,最終所有的執行緒將陷入死鎖。 2.飢餓:一個執行緒由於其他執行緒總是優先於它而被無限期拖延。 87.執行緒互斥和臨界區管理,執行緒互斥是解決執行緒間競爭關係的手段,指若干個執行緒要使用同一個共享資源時,任何時刻最多允許一個執行緒去使用,其他要使用該資源的執行緒必須等待,知道佔有資源的執行緒釋放該資源,臨界資源則是共享變數代表的資源,臨界區是併發執行緒中與共享變數有關的程式段。 88.作業系統對共享同一個變數的若干執行緒進入各自臨界區的排程原則是:一次至多一個執行緒能夠在它的臨界區內,不能讓一個執行緒無限期的留在它的臨界區內,不能讓一個執行緒無限的等待進入它的臨界區,進入臨界區的任意執行緒不能妨礙正等待進入的其他執行緒的進展。 89.java提供synchronized關鍵字用於宣告一段程式為臨界區,使執行緒對臨界資源採用互斥使用方式,使用的兩種方法一是使用synchronized宣告一條語句為臨界區,該語句稱為同步語句,二是宣告同步方法,同步方法的方法體是呼叫該方法成為臨界區,互斥使用的是呼叫該方法的物件。 90.java的資料流:是連續單路流動資料的抽象,在java中所有的I/O都是資料流的形式進行處理的,流是一個形象的概念,當程式需要讀取資料的時候,就開啟一個通向資料來源的流,這個資料來源是可以是檔案、記憶體或是網路連線。流採用了緩衝區技術對流進行讀寫操作的最小單位是位元組,傳輸效率低下為提高傳輸效率可將一塊記憶體空間設計成緩衝區暫存帶傳送的資料這樣一次可讀寫若干位元組,配備緩衝區的流稱為緩衝流,在緩衝區寫滿之前若要進行資料傳輸,稱為立即傳輸操作。 91.流的分類:按資料的傳輸方向分為輸入流和輸出流,按處理的單位分為位元組流和字元流,按照功能的不同分為節點流和過濾流。 流的作用:從根本設計流的目的是為了使資料傳輸獨立於相關裝置,程式中需要根據待傳輸資料的不同時特性而使用不同的流,資料傳輸給指定裝置後的操作由系統執行裝置驅動程式完成,這樣程式中不需要關注裝置實現細節使得一個源程式能夠用於多種輸入輸出裝置,從而增強了程式的可重用性。 92.控制檯的輸入輸出:互動式輸入輸出有兩種型別,一種是從鍵盤進行簡單的輸入和以純文字形式進行簡單的輸出,另一種是在圖形環境中進行輸入輸出,前者稱為是文字互動式輸入輸出,後者稱為圖形互動式輸入輸出。 93.文字輸入輸出都是使用類System,這個類包含了三個I/O物件,分別是System.in、System.out、System.err,用於從鍵盤輸入、向螢幕輸出和顯示錯誤資訊。同時java不直接支援鍵盤輸入。 94.Scanner是SDK1.5新增的一個類,可以使用該類建立一個物件,然後物件呼叫方法讀取使用者在命令列輸入的各種資料型別,這些方法都會造成堵塞等待使用者進行輸入。 95.位元組流類每次讀寫8位二進位制數,由於只能將資料以二進位制的原始方式讀寫,不能分解、重組和理解這些資料,所以可以使之變換、恢復到原來有意義的狀態,因此位元組流又被稱為二進位制位元組流,Inputstream和Outputstream類是抽象類,定義了位元組流的基本輸入輸出操作,由於不能建立例項物件,故而派生出不同的子類,每個子類實現一種特殊的位元組流操作。 96.字元流一次讀寫16位二進位制數,並將其作為一個字元而不是二進位制位來處理,Reader和Writer提供了基於字元的IO,基於位元組的流無法正確處理基於十六位的unicode字元經常出現亂碼,Reader和Writer在所有的IO操作上提供對unicode的支援。 97.檔案字元輸入輸出流FileReader和FileWriter用於文字檔案的輸入輸出處理,與檔案位元組輸入輸出流功能相似,但處理的基本單位是字元。 98.檔案是儲存在外部儲存介質上的具有標識名的一組相關資訊的集合,檔案系統性提供按名存取實現檔案的儲存和檢索,具有樹形目錄結構,檔案分為二進位制檔案和文字檔案,檔案的存取方法有順序存取、隨機存取和索引存取。 99.File類主要描述系統中檔案在磁碟中的儲存情況,而File類的物件主要用來獲取檔案本身的資訊,還可以利用File物件來對檔案系統做一些查詢和設定的動作,但不涉及對檔案的讀寫操作,不管是檔案還是目錄在java中都以File的例項來表示。該類專門提供一個抽象,用於機器無關的方式進行處理大多數機器有關的、複雜的檔案和路徑名問題,File是檔案的一個包裝類。 100.檔案流的建立因為必須使用檔案資料流對磁碟進行讀寫,FileInputStream和FileOutputStream用於位元組流,FileReader和FileWriter用於字元流。在FileInuputStream中實現了InputStream像read()之類的抽象方法,在FileOutuputStream中也是如此。