JAVA面試題總結【2】
一、基礎知識:
1、JVM、JRE和JDK的區別:
JVM(Java Virtual Machine):java虛擬機器,用於保證java的跨平臺的特性。
java語言是跨平臺,jvm不是跨平臺的。
JRE(Java Runtime Environment):java的執行環境,包括jvm+java的核心類庫。
JDK(Java Development Kit):java的開發工具,包括jre+開發工具
2、環境變數path和classpath的作用是什麼?
(1)path是配置Windows可執行檔案的搜尋路徑,即副檔名為.exe的程式檔案所在的目錄,
用於指定DOS視窗命令的路徑。
(2)Classpath是配置class檔案所在的目錄,用於指定類搜尋路徑,JVM就是通過它來尋找該類的class類檔案的。
3、變數有什麼用?為什麼要定義變數?什麼時候用?
答:變數的作用:用來儲存資料。
為什麼要定義變數:用來不斷的存放同一型別的常量,並可以重複使用
4、&和&&的區別?
答:(1)&&會出現短路,如果可以通過第一個表示式判斷出整個表示式的結果,則不繼續後面表示式的運算;
只能操作boolean型別資料;
(2)&不會出現短路,將整個表示式都運算。既可以操作boolean資料還可以運算元。
5、標示符命名規則:
由數字(0-9),大小寫英文字母,以及_和$組成。
不能以數字開頭。
不能使用關鍵字來自定義命名。
6、資料型別:
(1)基本資料型別(4類8種):
整數型別:byte、short、int、long
浮點數型別:float、double
字元型別:char
布林型別:boolean(ture false)
(2)引用資料型別:
類
介面
陣列
7、型別轉換
精度從高到低 double float long int short(char) byte
(1)自動型別轉換 將一個低精度---高精度
(2)強制型別轉換 將一個高精度---低精度(精度會下降)
8、java語言的三種技術架構
J2EE:企業版
是為開發企業環境下的應用程式提供的一套解決方案。
該技術體系中包含的技術如 Servlet、Jsp等,主要針對於Web應用程式開發。
J2SE:標準版
是為開發普通桌面和商務應用程式提供的解決方案。
該技術體系是其他兩者的基礎,可以完成一些桌面應用程式的開發。
比如Java版的掃雷。
J2ME:小型版
是為開發電子消費產品和嵌入式裝置提供的解決方案。
該技術體系主要應用於小型電子消費類產品,如手機中的應用程式等。
9、java的跨平臺性:
通過Java語言編寫的應用程式在不同的系統平臺上都可以執行。
跨平臺的原因:
只要在需要執行java應用程式的作業系統上,先安裝一個Java虛擬機器(JVM Java Virtual Machine)即可。
由JVM來負責Java程式在該系統中的執行。
10、有符號資料的表示法(次重點)
原碼,反碼(原碼取反),補碼(反碼+1)。
11、函式
定義:函式就是定義在類中的具有特定功能的一段獨立小程式。
特點:
定義函式可以將功能程式碼進行封裝
便於對該功能進行復用
函式只有被呼叫才會被執行
函式的出現提高了程式碼的複用性
對於函式沒有具體返回值的情況,返回值型別用關鍵字void表示,
那麼該函式中的return語句如果在最後一行可以省略不寫。
函式的應用兩個明確:
明確要定義的功能最後的結果是什麼?
明確在定義該功能的過程中,是否需要未知內容參與運算
12、過載:
概念:在同一個類中,允許存在一個以上的同名函式,只要它們的引數個數或者引數型別不同即可。
特點:與返回值型別無關,只看引數列表(引數型別以及引數個數)。
好處:方便於閱讀,優化了程式設計。
13、陣列:
概念:同一種資料型別的集合。
好處:可以自動給陣列中的元素從0開始編號,方便操作這些元素。
14、記憶體結構:
棧記憶體:用於儲存區域性變數,當資料使用完,所佔空間會自動釋放。
堆記憶體:陣列和物件,通過new建立的例項都存放在堆記憶體中。
方法區:靜態成員、建構函式、常量池、執行緒池
本地方法區:window系統佔用
暫存器:
二、面向物件
1、面向物件思想:
(1)概述:面向物件是相對於面向過程而言的,面向過程強調的是功能,面向物件強調的是將功能封裝進物件,
強調具備功能的物件;
(2)思想特點:
A:是符合人們思考習慣的一種思想;
B:將複雜的事情簡單化了;
C:將程式設計師從執行者變成了指揮者;
比如我要達到某種結果,我就尋找能幫我達到該結果的功能的物件,如我要洗衣服我就買洗衣機,
至於怎麼洗我不管。
(3)特徵:
封裝:隱藏物件的屬性和實現細節,僅對外提供公共訪問方式
繼承: 多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義
這些屬性和行為,只要繼承那個類即可。
多型: 一個物件在程式不同執行時刻代表的多種狀態,父類或者介面的引用指向子類物件
2、類和物件:
類:對現實世界中某類事物的描述,是抽象的,概念上的定義。
物件:事物具體存在的個體。
3:成員變數和區域性變數的區別(重點)
(1)作用域
成員變數:針對整個類有效。
區域性變數:只在某個範圍內有效。(一般指的就是方法,語句體內)
(2)儲存位置
成員變數:隨著物件的建立而存在,隨著物件的消失而消失,儲存在堆記憶體中。
區域性變數:在方法被呼叫,或者語句被執行的時候存在,儲存在棧記憶體中。
當方法呼叫完,或者語句結束後,就自動釋放。
(3)初始值
成員變數:有預設初始值。
區域性變數:沒有預設初始值,使用前必須賦值。
4、匿名物件
(1)匿名物件就是沒有名字的物件。是物件的一種簡寫形式。
(2)應用場景
A:只調用一次類中的方法。
B:可以作為實際引數在方法傳遞中使用
5、封裝:
指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式;比如電腦機箱、筆記本等
好處:
將變化隔離;
方便使用;
提高複用性;
提高安全性
6、關鍵字private:封裝在程式碼中的體現
(1)私有的意思,許可權修飾符
(2)用來修飾成員變數和成員函式
(3)用private修飾的成員只在本類中有效
(4)私有是封裝的一種體現
7、構造方法:
(1)特點:
方法名與類名相同
沒有返回型別
沒有返回值
(2)作用:建構函式是用於建立物件,並對其進行初始化賦值,物件一建立就自動呼叫相對應的建構函式,
(3)構造方法的注意事項:
A:如果一個自定義類沒有構造方法,系統會預設給出一個無參構造方法。
B:如果一個自定義類提供了構造方法,那麼,系統將不再給出無參構造方法。
這個時候,你可以不使用無參構造方法。
如果你想使用,那麼,就必須手動給出無參構造方法。
建議:一般情況下,我們的自定義類都要手動給出無參構造方法。
(4)構造方法和成員方法的區別
A:格式區別
構造方法和類名相同,並且沒有返回型別,也沒有返回值。
普通成員方法可以任意起名,必須有返回型別,可以沒有返回值。
B:作用區別
構造方法用於建立物件,並進行初始化值。
普通成員方法是用於完成特定功能的。
C:呼叫區別
構造方法是在建立物件時被呼叫的,一個物件建立,只調用一次相應建構函式
普通成員方法是由建立好的物件呼叫,可以呼叫多次
8、構造程式碼塊:
(1)作用:給物件進行初始化,物件一建立就執行,而且優先於建構函式執行
(2)構造程式碼塊和建構函式的區別:
構造程式碼塊是給所有不同物件的共性進行統一初始化
建構函式是給對應的物件進行初始化
9、this關鍵字
(1)this關鍵字代表本類物件的一個引用,誰呼叫this所在的方法,this就代表誰
(2)this的使用場景
A:用於區分同名成員變數和區域性變數;
B:在定義函式時,該函式內部要用到呼叫該函式的物件時,因為此時物件還沒建立,故this代表此物件
B:建構函式間呼叫
**這個時候,this(引數)必須作為第一條語句存在。
10、Person p = new Person();在記憶體中做了哪些事情。
(1)將Person.class檔案載入進記憶體中。
(2)如果p定義在主方法中,那麼,就會在棧空間開闢一個變數空間p。
(3)在堆記憶體給物件分配空間。
(4)對物件中的成員進行預設初始化。
(5)對物件中的成員進行顯示初始化。
(6)呼叫構造程式碼塊對物件進行初始化。(如果沒有就不執行)
(7)呼叫構造方法對物件進行初始化。物件初始化完畢。
(8)將物件的記憶體地址賦值給p變數,讓p變數指向該物件。
11、static關鍵字:
(1)靜態的意思,用來修飾成員變數和成員函式
(2)靜態的特點:
隨著類的載入而載入
優先於物件存在
對所有物件共享
可以被類名直接呼叫
(3)靜態的注意事項
A:靜態方法只能訪問靜態成員
為什麼:因為靜態的內容是隨著類的載入而載入,它是先進記憶體的。
B:靜態方法中不能使用this,super關鍵字
C:主方法是靜態的
public static void main(String[] args)
public:公共的意思,是最大許可權修飾符。
static:由於jvm呼叫main方法的時候,沒有建立物件。
只能通過類名呼叫。所以,main必須用static修飾。
void:由於main方法是被jvm呼叫,不需要返回值。用void修飾。
main:main是主要的意思,所以jvm採用了這個名字。是程式的入口。
String[]:字串陣列
args:陣列名
在執行的時候,通過java命令給args陣列賦值。
格式:java MainTest hello world itcast
(4)靜態變數和成員變數的區別
A:呼叫方式
靜態變數也稱為類變數,可以直接通過類名呼叫。也可以通過物件名呼叫。
這個變數屬於類。
成員變數也稱為例項變數,只能通過物件名呼叫。這個變數屬於物件。
B:儲存位置
靜態變數儲存在方法區長中的靜態區。
成員變數儲存在堆記憶體。
C:生命週期
靜態變數隨著類的載入而存在,隨著類的消失而消失。生命週期長。
成員變數隨著物件的建立而存在,隨著物件的消失而消失。
D:與物件的相關性
靜態變數是所有物件共享的資料。
成員變數是每個物件所特有的資料。
(5)靜態的優點和弊端
優點:
對物件的共享資料進行單獨空間的儲存,節省記憶體,沒有必要每個物件都儲存一份
可直接被類名呼叫
弊端:
生命週期過長,隨著類的消失而消失
訪問出現許可權,即靜態雖好但只能訪問靜態
(6)什麼使用使用靜態呢?
A:當所有物件共享某個資料的時候,就把這個成員變數定義為靜態修飾的。
B:當某個方法沒有訪問該類中的非靜態成員,就可以把這個方法定義為靜態修飾。
靜態的生命週期比較長,所以一般不推薦使用。
(7)靜態程式碼塊
A:它只執行一次,它比main還先執行。
B:執行順序
靜態程式碼塊--構造程式碼塊--構造方法
12、製作API(次重點)
API(全拼):ApplicationProgram Interface 應用程式程式設計介面。
(1)類中的內容需要用文件註釋。
(2)使用JDK\bin目錄下的javadoc工具。
格式:javadoc -d 目錄 -author -version ArrayTool.java
13、單例設計模式:
(1)設計模式:
解決某類問題行之有效的方法,是一種思想,是規律的總結
(2)用來保證某個類在記憶體中只有一個物件
(3)保證唯一性的思想及步驟
**為了避免其他程式建立該類物件,先禁止其他程式建立該類物件,即將建構函式私有化
**為了其他程式訪問到該類物件,須在本類中建立一個該類私有物件
**為了方便其他程式訪問到該類物件,可對外提供一個公共訪問方式
比如API中的Runtime類就是單例設計模式。
(4)單例設計模式的兩種方式
A:餓漢式 當類載入的時候,就建立物件。
classStudent
{
privateStudent(){}
privatestatic final Student s = new Student();
publicstatic Student getInstance()
{
returns;
}
}
B:懶漢式 當使用的使用,才去建立物件。
classStudent
{
privateStudent(){}
privatestatic final Student s = null;
publicstatic Student getInstance()
{
if(s==null)
{
//執行緒1就進來了,執行緒2就進來了。
s= new Student();
}
returns;
}
}
餓漢式和懶漢式的區別:
**
餓漢式是類一載入進記憶體就建立好了物件;
懶漢式則是類才載入進記憶體的時候,物件還沒有存在,只有呼叫了getInstance()方法時,
物件才開始建立。
**
懶漢式是延遲載入,如果多個執行緒同時操作懶漢式時就有可能出現執行緒安全問題,解決執行緒安全問題
可以加同步來解決。但是加了同步之後,每一次都要比較鎖,效率就變慢了,
所以可以加雙重判斷來提高程式效率。
注:開發常用餓漢式,因為餓漢式簡單安全。懶漢式多執行緒的時候容易發生問題
14、Math類的使用(重點)
(1)數學操作類:該類沒有建構函式,方法均為靜態的
(2)掌握內容
A:成員變數
**E:比任何其他值都更接近e(即自然對數的底數)的double值。
**PI:比任何其他值都更接近pi(即圓的周長與直徑之比)的double值。
B:成員方法
**staticdouble abs(double a)
返回 double 值的絕對值。返回絕對值
**staticdouble ceil(double a)
返回最小的(最接近負無窮大)double 值,該值大於等於引數,並等於某個整數。
**staticdouble floor(double a)
返回最大的(最接近正無窮大)double 值,該值小於等於引數,並等於某個整數。
**max:返回兩個值中較大的那個
**min:返回兩個值中較小的那個
**staticlong round(double a) 返回最接近引數的 long。
static int round(float a) 返回最接近引數的 int。
**staticdouble random()
返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。
**staticdouble pow(double a, double b)
返回第一個引數的第二個引數次冪的值。
**staticdouble sqrt(double a)
返回正確舍入的 double 值的正平方根。
15、Random類的使用(重點)
(1)產生隨機數的類
(2)掌握內容
A:構造方法
**Random()建立一個新的隨機數生成器。
**Random(longseed) 使用單個 long 種子建立一個新的隨機數生成器。
B:成員方法
**intnextInt() 返回下一個偽隨機數,它是此隨機數生成器的序列中均勻分佈的 int 值。
**intnextInt(int n) 返回一個偽隨機數,它是取自此隨機數生成器序列的、
在 0(包括)和指定值(不包括)之間均勻分佈的 int 值。
16、Scanner類的使用
(1)可以獲取從鍵盤的輸入資料
(2)掌握內容
構造方法:
Scanner(InputStreamsource) 構造一個新的 Scanner,它生成的值是從指定的輸入流掃描的。
如:Scanner sc = newScanner(System.in);
方法摘要
sc.nextInt();獲取整型資料
sc.nextLine();獲取字串資料
17、繼承(重點)
(1)把很多類的相同特徵和行為進行抽取,用一個類來描述。讓多個類和這個類產生一個關係。
這樣的話,多個類就可以省略很多程式碼。這個關係就是繼承。java中用extends關鍵字表示。
(2)繼承的體系結構
A:多個具體的物件,不斷的向上抽取共享的內容,最終形成了一個體系。這個體系叫做繼承體系。
B:繼承體系的學習和使用原則
**學習頂層的內容。因為他是整個體系的共性內容。
**建立子類使用。也就是使用底層的具體物件。
(3)繼承的特點:
A:java中只能單繼承,沒有多繼承。
B:java可以有多重(層)繼承。
(4)繼承的好處:
繼承的出現提高了程式碼的複用性。
繼承的出現讓類與類之間產生了關係,提供了多型的前提。
(5)子父類中的成員關係
A:成員變數
在子類方法中使用一個變數時:
首先,在方法的區域性變數中找這個變數,有則使用。
否則,在本類中找成員變數,有則使用。
否則,在父類中找成員變數,有則使用。
否則,報錯。
B:成員方法
用子類物件使用一個方法時。
首先,在子類中找這個方法,有則使用。
否則,在父類中找這個方法,有則使用。
否則,報錯。
重寫和過載的區別?
過載:在同一類中。方法名相同,引數列表不同。過載可以改變返回型別。
重寫:在不同類中(子父類中)。
方法宣告相同(返回型別,方法名,引數列表均相同)。
重寫需要注意:
**子類方法的訪問許可權要大於等於父類方法的訪問許可權。
**靜態只能重寫靜態。但是這種情況一般不會出現。
構造方法
**子類的例項化過程
***子類建立物件時,會先去建立父類的物件。
預設是去呼叫父類的無參構造方法。
***子類構造方法中,第一行預設是super()
***為什麼子類中第一行會預設有super()
因為他繼承父類的成員使用,使用前這些成員必須初始化,
而他們是父類的成員,所以,必須通過父類進行初始化。
所以,會先建立一個父類的物件。
**當父類沒有無參構造方法時
必須使用this或者super呼叫其他的構造方法。
(6)this和super的區別
this:代表本類物件的引用。
super:代表父類的儲存空間。
18、final關鍵字(重點)
(1)最終的意思,可以用於修飾類,方法,變數。
(2)final修飾的類不能被繼承。
final修飾的方法不能被重寫。
final修飾的變數是一個常量。只能被賦值一次。
內部類只能訪問被final修飾的區域性變數。
19、抽象類(重點)
(1)多個類有相同的方法宣告,但是方法體不一樣。這個時候,我們考慮把方法宣告進行抽取。
讓子類繼承後,自己去實現方法體。沒有方法體的方法,我們需要用抽象標誌下。
抽象的關鍵字是:abstract。
(2)抽象類:
該方法稱為抽象方法,包含抽象方法的類就是抽象類。
(3)抽象類的特點:
A:抽象類和抽象方法都要用abstract進行修飾
B:抽象類不能被例項化
C:抽象類中不一定有抽象方法,但是,有抽象方法的類一定是抽象類。
(4)抽象類中資料的特點
A:成員變數
抽象類中可以有變數,也可以有常量。
B:成員方法
抽象類中可以有抽象方法,也可以有非抽象方法。
C:構造方法
抽象類是一個類,所以,它有構造方法。
雖然本身不能例項化。但是可以給子類例項化使用。
(5)抽象類中的問題
A:抽象類中是否有構造方法?能不能被例項化?如果不能,為什麼有構造方法?
抽象類有構造方法。
抽象類不能被例項化。
抽象類中的構造方法供子類例項化呼叫。
B:抽象關鍵字abstract不可以和哪些關鍵字共存?
**private:
私有內容子類繼承不到,所以,不能重寫。
但是abstract修飾的方法,要求被重寫。兩者衝突。
**final
final修飾的方法不能被重寫。
而abstract修飾的方法,要求被重寫。兩者衝突。
**static
假如一個抽象方法能通過static修飾,那麼這個方法,就可以直接通過類名呼叫。
而抽象方法是沒有方法體的,這樣的呼叫無意義。所以,不能用static修飾。
C:抽象類中可不可以沒有抽象方法?如果可以,這樣的類有什麼用嗎?
抽象類可以沒有抽象方法。
抽象類中沒有抽象方法的作用,只是為了不讓別的類建立該抽象類物件。這個在awt中有體現。
20、介面interface
(1)當一個類中的方法都是抽象的時候,java提供了另一種表示方式,叫介面。
用interface關鍵字表示。類與介面關係用implements表示。
2)介面的成員特點
A:成員變數
是常量,預設修飾 public staticfinal
B:成員方法
都是抽象的,預設修飾 publicabstract
(3)關係
A:類與類的關係
是繼承關係。類與類只能單繼承,可以多重繼承。
B:類和介面的關係
是實現關係。類可以多實現介面。
類在繼承一個類的同時,可以實現多個介面。
C:介面和介面的關係
是繼承關係。介面可以多繼承介面。
(4)介面的特點
A:是對外暴露的規則
B:是功能的擴充套件
C:介面的出現降低耦合性。
耦合(類與類之間的關係)
內聚(類完成功能的能力)
程式設計規範:低耦合,高內聚。
D:介面可以多實現。如:CPU和主機板、筆記本的USB插口、插座
(5)介面和抽象類的區別
A:抽象類只能被單繼承
介面可以多實現,介面的出現避免了多繼承的侷限性。
B:抽象類中的資料特點:
成員變數:可以是變數,也可以是常量
成員方法:可以是抽象方法,也可以是非抽象方法
構造方法:有構造方法
介面中的資料特點:
成員變數:是常量。預設修飾 publicstatic final
成員方法:都是抽象方法。都有預設修飾 public abstract
構造方法:沒有構造方法
C:抽象類中定義的是繼承體系中的共性功能。
介面中定義的是繼承體系中的擴充套件功能。
D:抽象類被繼承是"isa"關係:xx是yy的一種
介面被實現是"like a"關係:xx像yy的一種
21、多型:
(1)同一個物件,在程式不同時刻的多種執行狀態。舉例:動物,狗是狗,狗是動物。水(氣態,液態,固態)
(2)多型前提
A:存在著繼承或者實現關係
B:有方法的重寫
C:父類(介面)引用指向子類(實現)物件
(3)多型的好處和弊端:
好處:多型的存在提高了程式的擴充套件性和後期可維護性
弊端:雖然可以預先使用,但是隻能訪問父類中已有的功能,執行的是後期子類的功能內容。
不能預先使用子類中定義的特有功能。
(4)多型中物件呼叫成員的特點
Fuf = new Zi();
A:成員變數
編譯看左邊,執行看左邊
B:成員方法
編譯看左邊,執行看右邊
C:靜態方法
編譯看左邊,執行看左邊
(5)多型的思想
指揮同一批物件做事情。舉例:帶兵打仗,下課等。
22、instanceof關鍵字
A:用於判斷某個物件是否是某種型別。
B:格式
物件名 instanceof 子類(實現)名
23、Object類:
(1)是所有類的根類,超類。
java中提供的類以及我們自定義的類都直接或者間接的繼承自Object類。
(2)Object類中的方法
A:void finalize()
當垃圾回收器確定不存在對該物件的更多引用時,由物件的垃圾回收器呼叫此方法。
B:ClassgetClass()
獲取物件的位元組碼檔案的描述類,後面再講反射的時候還會在說這個類。
String name = s.getClass().getName();
C:inthashCode()
獲取物件的雜湊值。其實就是物件的記憶體地址值十進位制表示
D:StringtoString()
返回物件的字串表示。
表示格式:
getClass().getName()+"@"+Integer.toHexString(hashCode());
一般我們輸出物件名的時候,其實底層呼叫的就是該物件的toString()方法。
這種返回沒有意義,所以,我們會重寫這個方法,顯示類的成員變數資訊。
E:booleanequals(Object obj)
用於比較兩個物件的地址值是否相同。
我們獲取物件後,比較它的地址值意義不大。所以也會對這個方法進行重寫。
重寫要完成什麼功能,是根據需求定的。
(3)==和equals的用法:
A:==怎麼用?
**可以用於比較基本資料型別,比較的就是基本資料型別的值是否相等。
**可以用於比較引用資料型別,比較的是物件的地址值是否相等。
B:equals怎麼用?
equals只能用於比較引用資料型別的。
**Object提供的equals是用於比較物件地址值是否相同。
**自定義類中,如果重寫了equals方法,那麼就是按照你自己的需求來比較的。
24、package關鍵字
(1)包:其實就是資料夾。用於區分不同包下相同的類名。
(2)好處:
A:對類檔案進行分類管理。
B:給類提供了多層名稱空間
aaa.Demo
bbb.Demo
C:寫在程式檔案的第一行。
D:包也是一種封裝形式。
25、import關鍵字
(1)匯入包的關鍵字
(2)格式:
import 包名;
(3)注意:
A:一個程式檔案中只有一個package,可以有多個import。
B:用來導包中的類,不匯入包中的包。
C:通常寫import mypack.Demo,明確自己使用的類。
(4)關鍵字的順序
類,包,導包這些關鍵的順序。
包 -- > 到包 -- > 類
26、不同修飾符可以修飾哪些內容
本類中 同一個包中 不同包中的子類中 不同包中
private OK
預設 OK Ok
protected OK Ok OK
public OK Ok OK Ok
類 構造方法 成員變數 成員方法
private OK OK OK
預設 Ok Ok Ok OK
protected OK OK Ok
public Ok Ok OK OK
static OK Ok
final Ok OK OK
abstract Ok OK
一般格式:
成員變數:
許可權修飾符+static/final+資料型別+成員變數名
publicstatic final int NUM = 10;
成員方法:
許可權修飾符+static/final/abstract+返回型別+方法名
27、內部類(次重點)
(1)把一個類定義在某個類中的,這個類就被稱為內部類,內建類,巢狀類。
(2)訪問特點:
A:內部類可以直接訪問外部類中的成員,因為內部類持有外部類的引用,
格式為:外部類名.this
B:外部類要想訪問內部類的成員,必須建立物件訪問。
(3)內部類的訪問格式:
A:當內部類定義在外部類的成員位置,而且非私有,則可以在其他外部類中直接建立內部類物件
格式:外部類名.內部類名 變數名 = new 外部類物件.內部類物件
如:Outer.Inner in = newOuter().new Inner()
B:當內部類在外部類成員位置,且被static修飾時
**外部其他類可直接訪問靜態內部類的非靜態成員
格式:new 外部類名.內部類名().內部類成員
如:new Outer.Inner().function();
**外部其他類可直接訪問靜態內部類的靜態成員
格式:new 外部類名.內部類名.內部類成員
如:new Outer.Inner.function();
(4)什麼使用時候內部類呢?
假如有A類和B類,A類想直接訪問B類的成員,B類訪問A類成員的時候,
需要建立A類物件進行訪問,這個時候,就可以把A類定義為B類的內部類。
(5)內部類的位置
A:成員位置
**可以被private修飾(Body,Heart)
**可以被static修飾。(它訪問的外部類的成員必須是靜態的)
B:區域性位置
**可以直接訪問外部類中的成員,因為還持有外部類的持用
也可以直接訪問區域性成員,但是區域性成員要用final修飾。
注意:區域性內部類不能用private和static修飾
(6)通過class檔案我們就可以區分是否帶有內部類,以及內部類的位置
一、基礎知識:
1、JVM、JRE和JDK的區別:
JVM(Java Virtual Machine):java虛擬機器,用於保證java的跨平臺的特性。
ja
java面試題整理(2)
JAVA常考點總結2
目錄
1、
首先程式是靜態的指令集合,而程序是執行中的指令集合。 程序是分配資源的基本單位,而執行緒是獨立執行和排程的基本單位。 任意時刻,一個CPU只能執行一個程序,程序獲得資源後進行分配,由不同的執行緒來執行和協作。 1. 程序:程式的一次執行
2. 執行緒:CPU的基本排程單位 一個程序的記 對象 符號 向上 ont 轉換 選擇 同時 是什麽 object 此為JDK API1.6.0對ArrayList的解釋。
ArrayList
使用java泛型創建類很復雜,但是應用預定義的泛型很簡單。例如,要想定義用來保存Apple對象的ArrayList,可以聲明 .title { text-align: center; margin-bottom: .2em }
.subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 }
.todo { font-famil .title { text-align: center; margin-bottom: .2em }
.subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 }
.todo { font-famil 轉自於:https://zhuanlan.zhihu.com/p/39804394
1、MySQL的delete與truncate區別?
回答:delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存以便進行回滾操作,不清空AUTO_INCREM 轉自於:https://zhuanlan.zhihu.com/p/39322967
1、JAVA中能建立volatile陣列嗎?volatile能使得一個非原子操作變成原子操作嗎?
回答: 能,Java 中可以建立 volatile 型別陣列,不過只是一個指向陣列的引用,而不是整個陣列。J 轉自於:https://zhuanlan.zhihu.com/p/40098726
1、談談對spring框架的瞭解 ,spring有什麼作用(IOC,AOP),spring的核心是什麼?回答:Spring是一個開源框架,它是為了解決企業應用開發的複雜性而建立的。框架的主要優勢之一就是其分層
面試題 1、String和StringBuffer的區別 2、gc的概念,如果A和B物件迴圈引用,是否可以被GC? 3、Java中的記憶體溢位是如何造成的 4、String s = “123”;這個語句有幾個物件產生 5、Error、Exception和RuntimeException的區別,作用又
多執行緒和Java虛擬機器
建立執行緒有幾種不同的方式?你喜歡哪一種?為什麼?
繼承Thread類
實現Runnable介面
應用程式可以使用Executor框架來建立執行緒池
實現Callable介面。
我更喜歡實現Runnable介面這種方法,當然這也是現
List,Set,Map三者的區別及總結
List:對付順序的好幫手 List介面儲存一組不唯一(可以有多個元素引用相同的物件),有序的物件
Set:注重獨一無二的性質 不允許重複的集合。不會有多個元素引用相同的物件。
Map:用Key來搜尋的專家 使用鍵值對儲存。M
來自:https://www.cnblogs.com/tietazhan/articles/5771886.html
一、Java基礎
1. 例項方法和靜態方法有什麼不一樣?
2. Java中的異常有哪幾類?分別怎麼使用?
檢出異常,非檢出異常。檢出異常需要try.
1.什麼是B/S架構?C/S架構?
B/S(Browser/Server),瀏覽器/伺服器程式;
C/S(Client/Server),客戶端/服務端,桌面應用程式。
2.網路協議有哪些?
HTTP:超文字傳輸協議;
SMPT:簡單郵件協議;
TELNET:遠端終端
1. 面向物件的特徵有哪些方面?
a.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。
b.繼承
來自:https://www.cnblogs.com/lanxuezaipiao/p/3371224.html
下面是我在原文中選擇了我比較容易犯錯的題
1. 下面哪些是Thread類的方法()
A start() B run(
以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識點和相關試題。
JAVA基礎
JAVA中的幾種基本資料型別是什麼,各自佔用多少位元組。
String類能被繼承嗎,為什麼。
String,Stringbuffer
這部分主要是與Java Web和Web Service相關的面試題。96、闡述Servlet和CGI的區別? 答:Servlet與CGI的區別在於Servlet處於伺服器程序中,它通過多執行緒方式執行其service()方法,一個例項可以服務於多個請求,並且其例項一般不會銷燬
福利:看本文之前,推薦給大家一個阿里雲雙11活動,真的非常非常非常推薦,對於新人福利,阿里雲這次真的是下血本了,建議阿里雲新人一定一定一定不要錯過。如果覺得這單純是廣告的話(阿里雲肯找我做廣告就好了,嘿嘿),你可以直接跳過看正文。
阿里雲雙11最新活動(僅限阿
1.什麼是B/S架構?C/S架構?
B/S(Browser/Server),瀏覽器/伺服器程式;
C/S(Client/Server),客戶端/服務端,桌面應用程式。
2.網路協議有哪些?
HTTP:超文字傳輸協議;
相關推薦
JAVA面試題總結【2】
【JAVA面試】java面試題整理(2)
Java常見面試題整理【2】
java持有對象【2】ArrayList容器續解
Java面試題總結-Day2
Java面試題總結-Day4
2018年最新JAVA面試題總結之資料庫(3)
2018年最新JAVA面試題總結之基礎(1)
2018年最新JAVA面試題總結之框架(4)
2018阿里社招Java面試題總結(收藏明年跳槽用)
超詳細的Java面試題總結(二)之Java基礎知識篇
超詳細的Java面試題總結(三)之Java集合篇常見問題
java面試題總結(二)--java中級面試題 含答案
2018年java面試題總結(附答案)
Java面試題總結
java面試題總結(三)--本文都是筆試題,很值得學習一下
史上最全阿里 Java 面試題總結
Java面試題全集(2)
超詳細的Java面試題總結(一)之Java基礎知識篇
Java面試題總結(附答案)