程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java基礎知識總結(二)

java基礎知識總結(二)

編輯:JAVA綜合教程

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)), 就優先按照Comparator LinkedHashSet底層數據結構是什麼?如何保證元素的唯一性的呢?
底層由鏈表和哈希表組成。
由鏈表保證有序。
由哈希表保證唯一。 什麼是可變參數?
針對在寫一個方法的時候,不知道具體要有多少個形式參數的時候。
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
靜態方法:類名.class sleep()和wait()的區別?(*面試題)
sleep():必須指定時間,不釋放鎖對象。
wait():可以指定時間,也可以不指定。釋放鎖對象。 網絡通信三要素是什麼? (*面試題)
A:IP地址
計算機在網絡中的唯一標識。
現在使用的是:”點分十進制”
B:端口
應用程序的的標記。
C:協議
通信的規則。 反射是什麼?反射獲取字節碼文件的三種方式?反射的好處?(*面試題)
在運行狀態下,通過class文件對象(Class的對象),去使用構造方法,成員變量,成員方法。就是反射。
3種方法:
A.用Object類的getClass方法得到。
B.用任意數據類型的靜態class屬性可以得到
C.用Class類的靜態方法forName(String className)方法得到
好處:只要有一個類或者一個類的對象,就可以得到這個類或對象的所有屬性和方法。包括私有的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved