java基礎知識總結(二)

來源:互聯網
上載者:User

java基礎知識總結(二)
+=隱含了強制類型轉換。
x+=y;等價與:x = (x的資料類型)(x + y);函數重載?
函數名相同,參數列表不同,跟傳回值不關,就是函數重載封裝是什麼?
隱藏對象的屬性和具體的實現細節,僅對外提供公用的訪問方式.
類、方法其實也是封裝的體現。

繼承是什麼?
概念:把多個類中相同的內容抽取出來,單獨定義到一個類(父類)中,再定義其他類(子類)的時候,繼承父類即可.
好處:1.提高了代碼的複用性,降低了代碼的重複率.2.提高了代碼的維護性3.讓類與類之間產生了關係,是多態的前提.
繼承的特點是:Java中類只能夠單繼承,但是可以多層繼承
注意:
子類中所有的建構函式都會預設訪問父類中的空參數的建構函式,因為每一個子類構造內第一行都有預設的語句super();
如果父類中沒有空參數的建構函式,那麼子類的建構函式內,必須通過super語句指定要訪問的父類中的建構函式。
如果子類建構函式中用this來指定調用子類自己的建構函式,那麼被調用的建構函式也一樣會訪問父類中的建構函式。

匿名對象是什麼?應用情境是什麼?
應用情境:A:調用方法。但是僅僅只限調用一次而已。B:匿名對象用作實際參數傳遞。

方法重寫和方法重載的區別?重載可以改變傳回值類型嗎?(*面試題)
方法重寫:子類中出現和父類中一模一樣的方法聲明的方法。
方法重載:同一個類中,出現方法名相同,參數列表不同的方法。
跟傳回值無關。
重載可以改變傳回值類型,因為他跟傳回值無關。static關鍵字是什麼?有什麼特點?什麼時候用呢?
static關鍵字:是靜態意思,可以修飾類中成員變數和成員方法。
靜態特點:隨著類的載入而載入、優先與對象而存在、被所有對象所共用、可以通過類名.靜態內容調用。A:局部代碼快: 就是在方法中用{}括起來的代碼。作用是限定變數的生命週期,提高效率。
B:構造代碼快:在類中,方法外。用{}括起來的代碼。作用是把所有構造方法中相同的內容抽取出來,
定義到構造代碼塊中,將來在調用構造方法的時候,會去自動調用構造代碼塊。構造代碼快優先於構造方法。
C:靜態代碼快:在類中、方法外。用{}括起來的代碼。只不過加了static修飾。
作用是:隨著類的載入而載入,而且只載入一次的代碼。一個類的執行個體化過程有哪些步驟?(*面試題)
Student s = new Student(); 在記憶體中到底執行了哪些步驟。
1,載入Sutdent.class檔案進記憶體(類載入器)
2,在棧記憶體為 s 變數申請一個空間
3,在堆記憶體為Student對象申請空間
4,對類中的成員變數進行預設初始化
5,對類中的成員變數進行顯示初始化
6,有構造代碼塊就先執行構造代碼塊,如果沒有,則省略
7,執行構造方法,通過構造方法對對對象資料進行初始化
8,堆記憶體中的資料初始化完畢,把記憶體值複製給 s 變數子父類中構造方法的執行有什麼特點?為什麼要這樣?
子類構造方法的執行,首先會去執行父類的構造方法。
因為子類中可能直接存取了父類的資料,父類的資料要優先於子類的資料進行初始化。final關鍵字是什麼,可以修飾什麼,有什麼特點?
final關鍵字:是最終意思,可以修飾類、方法、變數。
修飾類:類不可以被繼承。
修飾方法:方法不可被重寫
修飾變數:變數為常量。多態是什麼,前提是什麼?
多態:對象在不同時刻表現出來的多種狀態。是一種編譯時間期狀態和運行時期狀態不一致的現象。
成員變數:編譯看左邊,運行看左邊。
成員方法:編譯看左邊,運行看右邊。普通成員方法可以重寫,變數不可以。
靜態方法:編譯看左邊,運行看左邊。

什麼是抽象類別?抽象類別的特點和好處是什麼?
相同的方法,有相同方法的聲明,但是方法體不一樣,只抽取方法聲明的方法,叫做抽象方法,有抽象方法的類,叫做抽象類別。
特點:
A:類或者方法必須用abstract修飾。
B:具體類在繼承抽象類別的時候,要麼本身也是抽象類別,要麼實現抽象類別中的所有抽象方法。
C:抽象類別不能被執行個體化。要想使用,必須按照多態的方式使用。
D:成員特點:
a:成員變數
可以是變數,也可以是常量。
b:構造方法
有構造方法,但是不能執行個體化。
用於子類訪問父類資料的初始化。
c:成員方法
抽象方法只定義方法聲明,並不定義方法實現。
好處:
A:限定子類必須實現某些功能。
B:提高代碼的複用性。

抽象類別的幾個問題:
A:抽象類別不能執行個體化,構造方法有什麼用。
用於子類訪問父類資料的初始化。
B:抽象類別沒有抽象方法,有什麼意義?
限制建立對象。
C:abstract不能和哪些關鍵字共存?
final: 衝突
private: 衝突
static: 無意義

什麼是介面? 介面的特點?
如果一個抽象類別中的方法全部是抽象方法,那麼java就針對這種類型的抽象類別,給出了一個更抽象的運算式:介面。
特點:
A:所有的方法,都是抽象方法。
B:類實現介面
要麼本身是抽象類別,要麼重寫介面中的抽象方法。
C:介面不能被執行個體化,要想使用,用多態。
D:成員特點
a:成員變數
只有常量,並且是靜態常量。預設修飾符:public static final
b:構造方法
沒有構造方法,子類資料的初始化預設走的是Ojbect類的構造方法
c:成員方法
全部是抽象的,有預設修飾符:public abstract抽象類別和介面的區別? (*面試題)
A:成員區別
抽象類別:
成員變數:可以是變數,也可以是常量。
構造方法:有。
成員方法:有,可以是抽象的,也可以是非抽象的。
介面:
成員變數:只能是常量。預設修飾符:publci static final
構造方法:沒有,子類資料的初始化預設走的是Ojbect類的構造方法。
成員方法:只能是抽象的,預設修飾符是:public abstract
B:類與介面的關係區別
類與類:
繼承關係,單繼承。
類與介面:
實現關係,單實現、多實現。
介面與介面:
繼承關係,單繼承、多繼承。
C:設計理念的區別
抽象類別被繼承體現的是:is a的關係。抽象類別中一般定義的是整個繼承結構的共性功能。
介面被實現體現的是:like a的關係。介面中一般定義的是整個繼承結構的擴充功能。內部類的訪問特點:
A:內部類可以直接存取外部類的成員,包括私人。
B:外部類要訪問內部類的成員,必須建立對象。為什麼內部類訪問局部變數必須加final修飾?(*面試題)
A: 防止在使用後資料發生改變。
B: 延長變數的生命週期。什麼是匿名內部類?本質是什嗎?
匿名內部類就是沒有名字的內部類。
格式:
new 類名或者介面名() {
重寫方法;
};
本質:是繼承類或者實現介面的子類匿名對象。==和equals()的區別? (*面試題)
A:==
a:基本類型 比較的是基本類型的值
b:參考型別 比較的是參考型別的地址值
B:equals()
只能比較參考型別。
預設比較地址值。String、StringBuffer、StringBuilder的區別?(*面試題)
String:字元長度是固定的。
StringBuffer/StringBuilder:字元長度是可變的。
StringBuffer:安全的,但效率較低一些。
StringBuilder:不安全的,但效率較高一些。
StringBuffer和StringBuilder相容什麼是基本資料封裝類?
對應的類型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean集合和數組有什麼區別?(*面試題)
集合:
長度可以發生改變。
只能儲存物件類型,參考型別。
可以儲存任意類型的對象。
數組:
長度固定。
可以儲存基本類型,也可以儲存引用資料類型。
只能儲存同一種類型的元素。泛型是什麼?有什麼用?在哪裡用?泛型有什麼好處和弊端?
泛型是一種把明確資料類型的工作延遲到建立對象或者調用方法的時候才去明確的特殊的資料類型。
能最佳化程式設計,解決了黃色警告線問題。
把運行時期的異常提前到了編譯時間。
避免了強制類型轉換。
弊端:讓類型統一了,不能儲存不同的資料類型了。HashSet如何保證元素唯一性的呢?
底層資料結構是雜湊表(散列表)。具體的是由一個元素是單向鏈表的數組組成。
它依賴於兩個方法:hashCode()和equals()方法。
執行順序:
先判斷hashCode()是否相同,
如果相同
繼承執行equals()方法,看其傳回值:
true:元素重複,不儲存。
false:元素不重複,儲存。
如果不同
儲存。
記住:
看到HashXxx結構的集合,就要知道,被該集合儲存的元素要重寫hashCode()和equals()方法。
而且,是自動產生的。TreeSet底層資料結構是什嗎?如何保證元素的唯一性的呢?
底層資料結構是二叉樹。
根據比較的傳回值是否是0來決定。
如何保證元素的排序的呢?
A:自然排序 元素具備比較性
讓集合中被儲存的元素所屬的類實現Comparable介面。
B:比較子排序 集合具備比較性
在建立集合對象的時候,讓構造方法接收一個Comparator介面的子類對象。
自然排序和比較子排序的區別:
TreeSet建構函式什麼都不傳, 預設按照Comparable(介面,compareTo(T))的順序(沒有實現Comparable就報錯ClassCastException)
TreeSet如果傳入Comparator(介面compare(T1,T2)), 就優先按照ComparatorLinkedHashSet底層資料結構是什嗎?如何保證元素的唯一性的呢?
底層由鏈表和雜湊表組成。
由鏈表保證有序。
由雜湊表保證唯一。什麼是可變參數?
針對在寫一個方法的時候,不知道具體要有多少個形式參數的時候。
java提供了可變參數的用法。
注意:
A:變數其實是該資料類型的一個數組。
B:形式參數如果有多個的話,可變參數只能是最後一個。
C:資料類型要一致。Hashtable和HashMap的區別?(面試題)
A:HashMap 線程不安全,效率高。允許null鍵和null值。
B:Hashtable 安全執行緒,效率低。不允許null鍵和null值。throws和throw的區別? (*面試題)
throws
位置:在方法()後面,跟的是類名,後面可以跟多個異常類名,並且用逗號隔開
表示拋出異常,交給調用者去處理
如果後面根據的是RuntimeException及其子類,那麼,該方法可以不用處理。
如果後面根據的是Exception及其子類,那麼,必須要編寫代碼進行處理,或者調用的時候拋出。
throw
位置:在方法中,跟的對象名稱。後面只能跟一個異常對象
表示拋出異常,由方法體內語句處理
如果方法中,有throw拋出RuntimeException及其子類,那麼,聲明上可以沒有throws。
如果方法中,有throw拋出Exception及其子類,那麼,聲明上必須有throws。final、finally、finalize的區別?(*面試題)
final:是最終的意思,用於修飾類、變數、和方法。修飾類的時候,類是最終類,不可以被繼承。
修飾變數的時候,變數為常量,不可以被改變。修飾方法的時候,方法不能被重寫。
finally:是異常處理的一部分,它裡面的代碼永遠會執行(前提:jvm沒退出),一般用於釋放資源。
finalize:是object類的一個方法,用於垃圾處理。什麼是遞迴?使用遞迴需要注意哪些?
遞迴就是方法定義中調用方法本身的現象。
A:遞迴一定要有出口,否則就是死遞迴。
B:遞迴的次數不能太多,否則記憶體溢出。
C:構造方法不能遞迴使用。基本的IO流有哪些?(*面試題)
位元組流:InputStream、OutputStream、FileInputStream、FileOutputStream、
字元流:Writer、Reader、FileWriter、FileReader、
高效位元組流:BufferedInputStream、BufferedOutputStream
高效字元流:BufferedWriter、BufferedReader
最開始的時候,只有位元組流,但是後來由於中文字元或者其他字元的出現,用兩個位元組才能表示。
如果用位元組流也是可以讀寫字元檔案的資料的,但是比較麻煩。為了簡化這種操作,就提供了字元流。flush()和close()的區別?(*面試題)
flush():重新整理緩衝區,流對象還可以繼續使用。
close():釋放流資源,但是會先重新整理一次緩衝區,操作完畢後,流對象不可以再使用。多線程有幾種實現方案?分別是什嗎?如何操作?(*面試題)
多線程有兩種實現,分別是:
1,繼承Thread類
自訂類繼承Thread類,在類中重寫run()方法,測試類別中建立自訂類對象,並調用start()方法
2,實現Runnable介面
自訂類實現Runnable介面,重寫run()方法,測試類別中建立自訂對象,
建立Thread對象,把自訂對象作為構造參數傳遞。調用Thread類的start()方法。線程的生命週期? (*面試題)
建立: 建立線程對象
就緒: 具備cup執行資格,沒有執行權,隨時準備執行
運行: 具備執行資格,執行權,執行run()中的代碼
堵塞: 是當線程運行到符合某個我們定義的條件時,它會停止下來等待喚醒
死亡: run()結束了多線程為什麼會出現安全問題?怎麼解決呢?(*面試題)
如果滿足以下條件,那麼就會出現安全問題:
A:是多線程程式。
B:有共用的資料。
C:針對共用資料有多條語句操作。
只要我們把多線程環境中,把操作共用資料的操作,變成單線程就沒有問題了。
Java針對這種情況,就提供了同步技術:
A:同步代碼塊
B:同步方法
C:JDK5以後的Lock鎖同步的鎖對象分別是?(*面試題)
代碼塊:任意對象
方法:this
靜態方法:類名.classsleep()和wait()的區別?(*面試題)
sleep():必須指定時間,不釋放鎖對象。
wait():可以指定時間,也可以不指定。釋放鎖對象。網路通訊三要素是什嗎? (*面試題)
A:IP地址
電腦在網路中的唯一標識。
現在使用的是:”點分十進位”
B:連接埠
應用程式的的標記。
C:協議
通訊的規則。反射是什嗎?反射擷取位元組碼檔案的三種方式?反射的好處?(*面試題)
在運行狀態下,通過class檔案對象(Class的對象),去使用構造方法,成員變數,成員方法。就是反射。
3種方法:
A.用Object類的getClass方法得到。
B.用任意資料類型的靜態class屬性可以得到
C.用Class類的靜態方法forName(String className)方法得到
好處:只要有一個類或者一個類的對象,就可以得到這個類或對象的所有屬性和方法。包括私人的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.