javaOOP面向對象編程、知識點總結

對象和封裝

簡述類的封裝的定義,具體步驟和優點?
  1. 定義:隱藏類的一些具體實現,通過提供一些接口來實現一些功能,將類的狀態信息影藏在類的外部,不允許在類的外部直接訪問,而是通過這個類提供的一些方法來對屬性進行操作以及訪問。

  2. 步驟:修改屬性的可見性來限制對屬性的訪問;爲每個屬性創建一對賦值(setter)方法和取值(getter)方法,用於對這些屬性的存取;在賦值方法中,加入對屬性的存取控制語句。

    1. 好處:

    1. 控制存取屬性值的語句來避免對數據的不合理的操作
    2. 一個封裝好的類,是非常容易使用的
    3. 代碼更加模塊化,增強可讀性
    4. 影藏類的實現細節,讓使用者只能通過程序員規定的方法來訪問數據。
簡述構造方法的作用和特點?
  1. 與返回值類型無關(沒有返回值類型)
  2. 方法名和類名必須相同
  3. 分爲有參構造和無參構造
  4. 作用:給聲明的屬性直接賦值
  5. 構造方法不能被繼承
  6. 在沒有聲明有參構造的情況下,系統會默認提供一個無構造方法如果聲明瞭有參數構造,那麼系統就不在提供無參構造
什麼是方法重載?
  1. 方法名相同
  2. 與返回值類型和訪問修飾符無關
  3. 參數的類型、順序和個數至少有一個不一樣
  4. 方法重載必須在同一個類中
  5. 可以是構造方法的重載,也可以是普通方法的重載
如何實現類的封裝?
  1. (封裝的具體步驟):修改屬性的可見性來限制對屬性的訪問:爲每個屬性創建一對賦值(setter)方法和取值(getter)方法,用於對這些屬性的存取;在賦值方法中,加入對屬性的存取控制語句。
  2. 封裝的好處:影藏類的實現細節;讓使用者只能通過程序規定的方法來訪問數據;可以方便地加入存取控制語句,限制不合理操作。
訪問修飾符權限的區別?
  1. private:成員變量和方法 只能在其定義的類中被訪問,具有類可見性。
  2. default:成員變量和方法只能被同一個包裏的類訪問,具有包可見性。
  3. protect:可以被同一個包中的類訪問,被同一個項目中不同包中的子類訪問(父類、子類)。
  4. public:可以被同一個項目中的所有類訪問,具有項目可見性,這是最大的訪問權限。
面向對像設計的過程是什麼?
  • 發現類
  • 發現類的屬性
  • 發現類的行爲
成員變量和局部變量的區別?
  • 成員變量在整個類的內部都可以使用,可以直接聲明不賦值(系統會默認提供初始值)。
  • 佈局變量只能在方法體內部使用,並且聲明的同時需要直接賦值(系統不會默認提供初始值)。
this關鍵字的作用?
  1. 可以調用屬性
  2. 可以調用方法
  3. 可以調用構造方法,但是必須在構造方法中的第一行。
  4. 可以相互調用
static修飾符關鍵字
  1. 可以修飾:變量,方法,代碼塊

    1. static修飾的方法體中的變量必須是靜態的變量
    2. 靜態的變量可以使用類名直接調用
    3. 修飾的方法和代碼塊中必須是靜態的變量
    4. 靜態代碼塊自動加載,並且在第一行輸出
    5. 普通方法(示例方法)不能有靜態的變量。
類class和對象object兩個概念的理解?
  • 類是對某一類事物的描述,是抽象、概念上的定義。對象是實際存在的、具體的事物個體。類和對象就好比模具和鑄件的關係,建築物圖樣和建築物實體的關係。

繼承

如何繼承一個類?
//通過extends關鍵字來繼承類。
public class Penguin extends pet{
	//類定義部分
}
使用繼承有什麼優點?

繼承好處:避免代碼的冗餘,減少重複代碼

  • 繼承:子類繼承父類
  • private:修飾的屬性和方法子類不能繼承
  • public:修飾的屬性和方法子類可以被繼承
訪問修飾符的權限?
  1. private:在同一個類下纔可以訪問
  2. 默認的(friendly):同一個包下可以訪問
  3. Protected(受保護的):在具有繼承關係下的不同包中可以訪問
  4. Public:整個項目都可以訪問
方法重寫
  1. 不在同一個類中,在具有繼承關係的子類下
  2. 方法名相同
  3. 方法的參數列表必須相同(個數,順序,類型三者必須相同)
  4. 與返回值類型無關
  5. 訪問修飾符不能嚴於父類
  6. 訪問修飾符不能嚴於父類(範圍要比父類更大,列如:父類是protected,子類只能是protected或者public)
  7. 構造方法不能被繼承,所以也不能被重寫
重載(overloading)和重寫(overriding)有什麼區別?
  1. 重載涉及同一個類中的同名方法,要求方法名相同,參數列表不同,與返回值類型,訪問修飾符無關。
  2. 重寫涉及的是子類和父類之間的同名方法,要求方法名相同,參數列表相同,返回值類型相同(或是其子類)、訪問修飾符不能嚴於父類。
多重繼承關係下的執行順序?
  1. 實列化子類對象時候,如果不直接賦值,會用無參構造,並且先執行父類的無參構造,再執行子類的無參構造。
  2. 實列化子類對象時候,如果直接賦值,也會默認先調用父類的無參構造,再執行子類的有參構造。
  3. 綜合:無論子類是有參還是無慘都會默認調用父類中的無慘構造(前提是子類的有參構造沒有調用父類的有參構造)。
  4. 如果父類中只有有參構造,那麼系統不會默認給父類提供無參構造,則子類的有參構造必須調用父類的有參構造(super關鍵字去調用)。
方法重載
  • 在同一個類中
  • 方法名相同
  • 與返回值類型無關
  • 跟訪問修飾符無關
  • 方法的參數列表不同(個數,順序,類型三者有一個不同即可)
抽象類:abstract?
  1. 作用:限制實列化(不讓抽象類進行創建對象),一般將父類設置爲抽象類
  2. 抽象類中既有抽象方法,也可以有普通方法(實列方法)
  3. 抽象方法:public abstract void show();只有方法聲明,沒有方法實現,沒有方法體。
  4. 子類繼承抽象類,必須重寫父類的抽象方法
  5. 抽象方法必須在子類中被實現,除非子類是抽象類
  6. public abstract class student{ }
final作用:
  1. finally修飾類,該類不能被繼承。
  2. finally修飾方法,方法不能被子類重寫。
  3. finally修飾的變量,變量變常量,只在實列化時被賦值一次,不能再次被賦值。
抽象類和抽象方法的特點?
  1. 抽象方法沒有方法體
  2. 如果一個類有抽象方法,那這個類必須定義爲抽象類。
  3. 抽象類可以有抽象方法和非抽象方法。
  4. 抽象類不能new對象。
  5. 繼承抽象類,就必須重寫抽象類裏的所有抽象方法。
this和super的區別?
  1. this:當前對象的引用

    • 調用子類的成員變量
    • 調用子類的成員方法
    • 在子類的構造方法第一行調用子類其他構造方法
  2. super:子類對象的引用

    1. 調用父類的成員變量
    2. 調用父類的成員方法
    3. 在子類的構造方法第一行調用父類的構造方法
java 繼承extends子類繼承父類

java:只支持單個繼承

多態

什麼是多態?
  1. 多態是繼封裝、繼承後,面向對象的第三大特徵。實現實物經常會體
    現出多種形態。可以理解成,對象的多種形態。

  2. 多態存在三個必要條件。

    1. 要有繼承。
    2. 要有重寫。
    3. 父類引用指向子類對象。
使用多態有什麼優勢?
  1. 可替換性:多態對已存在代碼具有可替換性。
  2. 可擴展性:多態對代碼具有可擴展性。
  3. 接口性:多態是超類通過方法簽名,向子類提供了一個共同接口,由子類來完善或者覆蓋它而實現的。
  4. 靈活性:它在應用中體現了靈活多樣的操作,提高了使用效率。
  5. 簡化性:多態簡化對應用軟件的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤爲突出和重要。
實現多態有哪幾種方式?
  1. 接口多態性

  2. 繼承多態性

  3. 通過抽象類實現的多態性。

    1. 使用父類作爲方法形參實現多態
    2. 使用父類作爲方法返回值類型實現多態
    3. 多態:父類的一個引用可以指向多個子類對象
//(1)、向上轉型(父類作爲返回值類型,小轉大)
	Pet pet = new Dog();
//(2)、父類作爲參數(主人餵養寵物)
public void feed(Pet pet){
	Dog dog = (Dog)pet
	dog.show();
}
//(3)、父類作爲方法的返回值
public Pet getPet(String typeid){
	Pet pet = null;
	if(typeid.equals("1")){
	pet = new Dog();
	}else if(typeid.equals("2")){
	pet = new Penguin();
	}     
	return pet;
}
面向對象的三大特徵是什麼?

封裝、繼承、多態、有時還會加上抽象

簡述多態的概念?子類和父類之間轉換時遵循的規則?
  1. 多態:是具有表現多種形態的能力的特徵。

  2. 子類轉換成父類(向上轉型):

    1. 將一個父類的引用指向一個子類對象,稱爲向上轉型,自動進行類型轉換。
  3. 父類轉換成子類(向下轉換):

    1. 將一個指向子類對象的父類引用賦給一個子類引用,稱爲向下轉換,此時必須進行強制類型轉換。

接口

如何編寫接口?
//語法
修飾符 interface 接口名 extends 父接口{
	//常量定義
	//方法定義
}
class 類名 父類名 implements 接口{
	//類成員
}

說明:

  • 接口的命名規則與類名相同
  • 接口中可以定義常量,不能定義變量
  • 接口中的屬性都是全部靜態常量,接口中的常量必須在定義時指定初始值。
  • 接口中所有方法都是抽象方法。接口中的方法都會自動用public abstract修飾,即接口中只有全部抽象方法。
  • 和抽象類一樣,接口中不能有構造方法。
  • 接口之間可以通過extends實現繼承關係,一個接口可以繼承多個接口,但接口不能繼承類。
  • 接口的實現類必須實現接口的全部方法,否則必須定義爲抽象類。
接口有哪些特徵?
  1. 接口本質上是一種抽象類
  2. 接口中的方法都是抽象方法
  3. 接口中沒有構造方法和普通方法
  4. 接口不能示例化
  5. 接口可以多實現(實現類可以實現多個接口)
  6. 接口中的屬性都是靜態常量(省略了static和final)
  7. 抽象類不能用final修飾
什麼是接口?
  1. 接口可以看作一種特殊的抽象類。
  2. 接口表示一種能力(體現在方法),還是一種約定(體現在方法的註釋上)
通過面向接口編程的特徵?
  • 可以降低代碼間的耦合性,提高代碼的可擴展性可維護性。
爲什麼需要接口?
  1. 在項目中,有一些功能,不僅僅是一個類去實現,既有很多地方法用到,大家需要統一標準。所以需要用接口,這樣大家同時實現一個接口,就能夠統一規範。在接口中只是定義了基本的方法名,具體的實現交給實現類。
  2. 使用接口好處:代碼簡潔,實現可以多樣化並且維護成本低,降低代碼的耦合性。
怎麼實現抽象類,抽象方法方法?
//語法
public abstract class Door{
	//方法體
	public abstract void open();
	public abstract void close();
}

異常

什麼是異常?
  1. 異常處理,英文名爲exception 是編程語言或計算硬件裏的一種機制,用於處理軟件或信息系統中出現的異常狀況,即超出程序正常執行的某些特殊條件。

    1. 異常處理的好處?
    2. 因爲異常發生的時候,元訂的執行流程就無法繼續,異常處理可以讓程序這種情況下繼續往下執行。提高用戶體驗度。
  2. 異常處理一般用在哪裏?

    1. 使用者(包括用戶、代碼庫使用者)所引發的錯誤的,都需要用過異常機制來處理。
在java中如何進行異常處理?
	try{
		File file = new File("d:/txt");
		if( ! File.Exists())
			file.createNewFile();
		}catch (IoException e){
	}

	public class Main {
	    public static void main(String[] args) {
	        try {
	            createFile();
	        } catch (Exception e) {
	            // TODO: handle exception
	        }
			
			public static void createFile() throws IOException{ // 拋出異常
	        File file = new File("d:/a.txt");
	        if(!file.exists())
	            file.createNewFile();
	    }
	}
如何使用log4j記錄日誌?

使用步驟:

  1. 導入jar包(右鍵項目properties—>java build path—>Libraries—>Add External JARS)
  2. 創建log4j.properties文件
  3. 編寫日誌代碼
  4. 在程序中添加日誌代碼
java的異常處理通過哪幾個關鍵字來實現的?
  • try catch finally throw throws
異常執行順序?
  1. 先try 若無異常直接到finally
  2. 先try 若有異常執行catch,然後在finally
  3. 無論哪種情況都會執行finally(唯一不執行finally的情況是 System.exit(1))
  4. 如果在catch中有return 則順序是
  5. try—>catch—>finally—>return
聲明異常

throws NullPointerException(空指針異常)
指在方法名後面聲明的異常,不進行異常捕獲,
誰調用該方法,則由調用者捕獲異常,若調用者也不進行異常捕獲
最後由java虛擬機進行捕獲
手動拋出異常
throw new Exception(“性別只能是男或女”)

寫出常見的異常?
  1. NullPointerException(空指針異常)
  2. ArrayIndexOutOfBoundsException(數組下標越界異常)
  3. ArithmeticException(算術錯誤,除零異常)
  4. ClassNotFoundException(加載不到所需要的類異常)
  5. ClassCastException(對象強制轉換異常)
  6. InputMismatchException(輸入不合法異常)

結合框架

爲什麼出現集合類?
  • 面嚮對象語言對事物的體現都是以對象的形式,所以爲了方便對多個對象的操作,java就提供了集合類。
數組和集合類同是容器,有何不同?
  1. 數組雖然也可以存儲對象,但長度是固定的,集合長度是可變得。
  2. 數組中可以存儲基本數據類型,集合只能存儲對象。
集合類的特點?

集合只用於存儲對象集合長度是可變的集合可以存儲不同類型的對象。

集合的使用步驟?

  1. 創建集合對象
  2. 創建元素對象
  3. 把元素添加到集合
  4. 遍歷集合
java集合框架包含哪些內容?
  1. 三大塊內容,對外的接口、接口的實現和對象集合運算的算法。
  2. 接口:表示結合的抽象數據類型,如Collection、List、Set、Map、lterator。
  3. 實現:集合框架中接口的具體實現,如ArraYList、LinkedList、HashMap、HashSet。
  4. 算法:在一個實現了某個集合框架中的接口的對象身上完成某種有用的計算的方法,如查找、排序。
java的集合框架共有三大類接口他們有什麼共同點?
  1. 兩大類接口:Collection和Map。Collection又有兩大子接口:List和Set。
  2. 三大接口:List、Set和Map都是集合接口,可以存儲對象。
    區別:
    Collection接口存儲一組不唯一(允許重複)、無序的對象。
    Set接口繼承Collection接口,存儲一組唯一(不允許重複)、無序的對象。
    List接口繼承Collection接口,存儲一組不唯一(允許重複)、有序(以元素插入的次序來放置元素,不會重新排列)的對象。
    Map接口存儲一組成對的鍵-值,提供key(鍵)到value(值)的映射、Map中key不要求有序,不允許重複、Value同樣不要求有序,但允許重複。
    Iterator接口是負責定義訪問和遍歷元素的接口。
List、Set、Map的區別?

List 和 Set 是存儲單列數據的集合,Map 是存儲鍵和值這樣的雙列數據的集合;List 中存儲的數據是有順序,並且允許重複;Map 中存儲的數據是沒有順序的,其鍵是不能重複的,它的值是可以有重複的,Set 中存儲的數據是無序的,且不允許有重複,但元素在集合中的位置由元素的 hashcode 決定,位置是固定的(Set 集合根據 hashcode 來進行數據的存儲,所以位置是固定的,但是位置不是用戶可以控制的,所以對於用戶來說 set 中的元素還是無序的)。

HashMap、TreeMap、linkedHashMap的區別?
  1. HashMap提供了最快的訪問技術,沒有按照明顯的順序保存元素。
  2. TreeMap會按照比較結果的升序保存鍵。
  3. 按照插入鍵的順序保存鍵,同時還保存了HashMap的保存速度。
ArrayList和LinkList的區別?

ArrayList

  1. 優點:get和set調用花費常數時間,也就是查詢的速度快。
  2. 缺點:新項的插入和現有項的刪除代價昂貴,也就是添加和刪除的速度慢。

LinkList

  1. 優點:新項的插入和現有項的刪除開銷很小,即添加和刪除的速度快。
  2. 缺點:對get和set的調用花費昂貴,也就是查詢的速度慢。
Array和ArrayList的區別?
  • ArrayList是Array的複雜版本。
  • 儲存的數據類型:Array只能儲存相同數據類型的數據,而arrayList可以儲存不同類型的數據。
  • 長度的可變:Array長度是固定的,而ArrayList的長度是可變的。
數組轉換成集合的方法,和集合轉換成數組的方法:
  • 數組轉集合的方法:Arrays.asList(數組)(數組轉換成集合後add和remove方法都不可以進行操作)。
使用Iterator遍歷集合類

Iterator爲集合而生,專本實現集合的遍歷,他隱藏了各種集合實現類的內部細節,提供了遍歷集合唯一編程接口。

在java中共有八個包裝類:

Byte、Short、Integer、Long、Float、Double、Boolean、Character。

多線程

進程和線程的區別?
  • 一個線程只屬於一個進程,但是一個進程可以擁有多個線程,但至少一個線程
  • 資源分配個進程,同一進程中所有線程共享該進程的所有資源。
什麼是進程,什麼是線程?

系統要做一件事,運行一個任務,所有運行的任務通常就是一個程序;

每個運行中的程序就是一個進程,這一點在任務管理器上面可以形象的看到。

當一個程序運行時,內部可能會包含多個順序執行流,每個順序執行流就是一個線程。

創建線程的方法有哪幾種?

線程常用的創建方式,有兩種

第一種是使用Runnable。第二種是繼承Thread類型。

  1. 因爲實現Runnable接口可以避免Java單繼承的侷限性。
    當一個類繼承了Thread,就不可以在繼承其他類了。
    而當一個類實現了Runnable,它一樣可以繼承其他類。
    比如 class Demo extends SuperDemo implements Runnable{}
  2. 更符合面向對象的設計。
    run()方法的作用是用來封裝線程要運行的代碼。
    那麼run()方法所屬的對象,就是線程任務對象。
    Thread類的子類對象即使線程對象,又是線程任務對象。耦合性很強。
    有了Runnable接口,可以將線程任務和線程進行解耦,
    提高了程序的擴展性。
    所以建議使用Runnable接口的方式完成線程的創建。
線程的生命週期可分爲幾個階段,各是什麼階段?

線程整個生命週期,可以分爲五個階段。

  1. 分別是新建狀態New
  2. 就緒狀態Runnable
  3. 運行狀態Running
  4. 堵塞狀態Blocked和死亡狀態Terminated。

線程的不同狀態,表明了線程當前正在進行的活動
注意,線程只能從新建狀態,轉換到就緒狀態,反之則不能

使用線程的什麼方法可以設置線程休眠,線程的強制執行,線程的禮讓?
  1. 調用線程的優先級:java線程有優先級,在同等情況下,優先級高的線程會獲得較多的運行機會。Java線程的優先級用1~10的整數表示。
  2. 線程休眠:sleep(long millis)方法使線程轉到堵塞狀態。
  3. 線程的強制運行:join()方法可以強制某一線程運行。
  4. 線程禮讓:yield()方法,暫停當前正在執行的線程對象,把執行機會讓給相同或者更高優先級的線程。
什麼情況下需要進行線程的同步,線程同步有幾種方式?
  1. 當多線程併發, 有多段代碼同時執行時, 我們希望某一段代碼執行的過程中CPU不要切換到其他線程工作. 這時就需要同步。

  2. 如果兩段代碼是同步的, 那麼同一時間只能執行一段, 在一段代碼沒執行結束之前, 不會執行另外一段代碼。
    多線程同步的方法一共有五個:

    1. 使用synchronized 關鍵字構成同步方法。
    2. 使用synchronized 關鍵字構成同步代碼塊。
    3. 使用ReentrantLock類構成同步代碼塊。
    4. 使用volatile關鍵字修飾變量。
    5. 如果使用ThreadLocal對象管理變量。
進程的特點?
  • 進程是系統運行的基本單位。
  • 每一個進程都有自己的一塊內存空間,一組系統資源。
  • 每個進程的內部數據和狀態都是完全獨立的。
多線程的好處?
  • 充分利用CPU的資源
  • 簡化編程模型
  • 帶來良好的用戶體驗
什麼是多線程?
  1. 多線程就是指一個進程中同時有多個執行路徑(線程)正在執行。
  2. 進程:是指在操作系統中正在運行的一個應用程序。
  3. 線程: 線程是指進程內獨立執行某個任務的一個單元。
一個單CPU的機器,如何同時執行多個線程?請簡述其原理。

單CPU的計算機中,CPU同時只能執行一條指令,因此,在僅有一個CPU的計算機上不可能同時執行多個任務。而操作系統爲了能提高程序的運行效率,將CPU的執行時間分成多個時間片,分配給不同的線程,當一個時間片執行完畢後,該線程就可能讓出CPU使用權限交付給下一個時間片的其他線程執行。當然有可能相鄰的時間片分配給同一線程。之所以表面上看是多個線程同時執行,是因爲不同線程之間切換的時間非常短,也許僅僅是幾毫秒,對普通人來說是難以感知的,這樣就看似多個線程在同時執行了。

start( )與run( )之間有什麼區別?
  • run()方法:在本線程內調用該Runnable對象的run()方法,可以重複多次調用;直接執行run()方法不會啓動多線程。
  • start()方法:啓動一個線程,調用該Runnable對象的run()方法,不能多次啓動一個線程;也就是說start()方法做了兩件事情:啓動線程和執行run()方法。
Java中Runnable和Callable有什麼不同?

Runnable沒有返回值;
Callable有返回值,通過對線程執行結果封裝在一個Object裏面,然後通過get獲取該Object,實現有返回值方式;

Java線程池中submit() 和 execute()方法有什麼區別?

submit()有返回值;
execute()無返回值;

Java中CyclicBarrier 和 CountDownLatch有什麼不同?

CyclicBarrier(柵欄),用於阻塞多個線程,達到條件同時執行;
CountDownLatch(閉鎖),用於等待多個操作執行完(比如多個線程)再執行某個動作(比如執行主線程);
底層都是基於AQS實現,AQS是一個基於volatile共享變量state,雙端隊列,線程的等待和喚醒共同實現的一個
同步器,典型的模板方法模式,是Java併發包的基礎實現。

Java內存模型是什麼?

Java內存模型是接機Java線程通信的基礎,通過CPU #Lock指令實現線程副本和主內存更新機制,實現線程通信的方式等。

Java中的volatile 變量是什麼?

volatile是輕量級的同步機制,具有內存可見性和指令重排序的特性,但是它代替不了Java裏面的鎖。

FileI/O

什麼是流?

流是指一連串流動的字符,是以先進發出的方式發送信息的通道。程序各數據源之間是通過流聯繫起來的。

使用字節流讀文本文件的步驟?
  1. 字節流:

    1. 字節流讀取的時候,讀到一個字節就返回一個字節; 主要用於讀取圖片,MP3,AVI視頻文件。
  2. 字符流:

    1. 字符流使用了字節流讀到一個或多個字節,如讀取中文時,就會一次讀取2個字節。只要是處理純文本數據,就要優先考慮使用字符流。
使用什麼流讀寫字符內容更高效?

BufferedReader和BufferedWriter以字符流的方式讀寫文本文件,而且效率更高。

簡述java中流的分類

按照流的流向進行劃分

  1. 輸出流:只能從中讀取數據而不能向其中寫入數據
  2. 輸入流:只能向其中寫入數據而不能從中讀取數據

按照程序運行所在的內存角度劃分

  1. 輸入流由InputStream和Reade作爲基類
  2. 輸出流由OutputStream和Writer作爲基類
  3. 按照操作的數據單元不同可以劃分爲字節流和字節符
文本文件的讀寫過程中需要處理的異常有哪些?

答FileNotFoundException和IOException

  • 異常處理使用try—catch—finally關鍵字進行捕獲,打印相關信息,並保證數據流的關閉。
什麼是IO流?

它是一種數據的流從源頭流到目的地。比如文件拷貝,輸入流從文件中讀取數據存儲到進程(process)中,輸出流從進程中讀取數據然後寫入到目標文件。

字節流和字符流的區別?

字節流用於操作包含ASCII字符的文件。JAVA也支持其他的字符如Unicode,爲了讀取包含Unicode字符的文件,JAVA語言引入了字符流。ASCII作爲Unicode的子集,對於英語字符的文件,可以使用字節流也可以使用字符流。

Java中流類的超類(均爲抽象類)主要由哪些組成?
  1. java.io.InputStream(字節輸入流)
  2. java.io.OutputStream(字節輸出流)
  3. java.io.Reader(字符輸入流)
  4. java.io.Writer(字符輸出流)
FileInputStream和FileOutputStream是什麼?
  1. 這是在拷貝文件操作的時候,經常用到的兩個類。
  2. 在處理小文件的時候,它們的性能表現還不錯,在大文件的時候,最好使用BufferedInputStream(或BufferedReader)和BufferedOutputStream(或BufferedWriter)
字節流和字符流,你更喜歡哪一個?

更喜歡使用字符流。許多在字符流中存在的特性,字節流中不存在。比如使用BufferedReader而不是BufferedInputStream或DataInputStream,它其中包含一個‘readLine()’方法用於讀取文本行;又比如BufferedWriter流中有一個獨特的向文件寫入一個換行符的方法‘newLine()’用來讀取下一行,但是在字節流中我們需要做額外的操作。

System.out.println()是什麼?

println是PrintStream的一個方法。out是一個靜態PrintStream類型的成員變量,System是一個java.lang包中的類,用於和底層的操作系統進行交互。

什麼是Filter流?
  1. Filter Stream是一種IO流。
  2. Filter流的主要作用是:對存在的流增加一些額外的功能,像給目標文件增加源文件中不存在的行數,或者增加拷貝的性能。
有哪些可用的Filter流?

在java.io包中主要由4個可用的filter Stream組成。兩個字節filter stream,兩個字符filter stream。分別是:FilterInputStream、FilterOutputStream、FilterReader和FilterWriter。

有哪些Filter流的子類?

LineNumberInputStream:給目標文件增加行號。
DataInputStream:有些特殊的方法如:readInt()、readDouble()和readLine()等可以一次性的讀取一個int, double和一個string類型的數據。
BufferedInputStream:增加性能。
PushbackInputStream:推送要求的字節到系統中。

SequenceInputStream的作用是什麼?

使用很少的代碼實現‘拷貝多個文件到一個目標文件’的目的。

在文件拷貝的時候,哪一種流可用於提升更多的性能?

在字節流的時候,使用BufferedInputStream和BufferedOutputStream。
在字符流的時候,使用BufferedReader和BufferedWriter。

說說管道流(Piped Stream)

有四種管道流:PipedInputStream、PipedOutputStream、PipedReader和PipedWriter。
在多個線程或進程中傳遞數據的時候管道流非常有用。

什麼叫對象序列化,什麼是反序列化,實現對象序列化需要做哪些工作

對象序列化,將對象以二進制的形式保存在硬盤上
反序列化;將二進制的文件轉化爲對象讀取
實現serializable接口

不想讓字段放在硬盤上就加transient

XML技術

XML是什麼?

XML即可擴展標記語言(Extensible Markup language),你可以根據自己的需要擴展XML。XML中可以輕鬆定義, 等自定義標籤,而在HTML等其他標記語言中必須使用預定義的標籤,比如

,而不能使用用戶定義的標籤。使用DTD和XML Schema標準化XML結構。XML主要用於從一個系統到另一系統的數據傳輸,比如企業級應用的客戶端與服務端。

XML概念
  1. XML 數據以純文本格式存儲
  2. 實現不同應用程序之間的數據通信
  3. 實現不同平臺間的數據通信
  4. 實現不同平臺間的數據共享
  5. 使用 XML 將不同的程序、不同的平臺之間聯繫起來

XML 的作用:數據存儲和數據傳輸

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章