閱讀750 返回首頁    go 小米 go 小米6


java麵試題

麵向對象編程(OOP)
Java是一個支持並發、基於類和麵向對象和計算機編程語言。如下是麵向對象軟件開發的優點:
* 代碼開發模塊化,更容易維護和修改。
* 代碼複用。
* 增強代碼的可靠性和靈活性。
* 增加代碼的可理解性。

麵向對象編程有很多重要的特性,比如:封裝,繼承,多態和抽象。
* 封裝:
* 封裝給對象提供了隱藏內部特性和行為的能力。對象提供一些能被其他對象訪問的方法來改變它內部的數據。
* 在Java當中,有4種修飾符:public,private,default和protected。
* 每一種修飾符給其他的位於同一個包或者不用包下麵對象賦予了不同的訪問權限。
* 其中private的作用範圍限定於當前類中;
* default是默認的訪問修飾符,作用範圍是同一個包中;
* protected的作用範圍不包括其他的包,在同一包,當前類和其子類中均能使用;
* public是公開的,在當前工程中均可以使用。

封裝的一些優點:
* 通過隱藏對象的屬性來保護對象內部的狀態;
* 提高了代碼的可用性和可維護行,因為對象的行為可以被單獨的改變或者是擴展。
* 禁止對象之間的不良交互提高模塊化。

多態:
* 多態是編程語言給不同的底層數據類型做相同的接口展示的一種能力。
* 一個多態類型上的操作可以應用到其他類型的值上麵。

繼承:
* 繼承給對象提供從基類獲取字段的方法和能力。
* 繼承提供類代碼的重用行,也可以在不修改類的情況下給現存的類添加新特性

抽象:
* 抽象是把想發從具體的實例中分離出來的步驟,因此,要根據他們的功能而不是實現細節類常見類。
* Java支持創建隻暴露接口而不包含方法實現的抽象的類,
* 這種抽象技術的主要目的是把類的行為和實現細節分離開。

抽象個封裝的不同點:
* 抽象個封裝是互補的概念,一方麵,抽象關注對象的行為。另一方麵,封裝關注對象行為的細節。
* 一般是通過隱藏對象內部狀態信息做到瘋轉,因此,封裝可以看成是用來提供抽象的一種策略。

常見的Java問題:
1、什麼是Java虛擬機?為什麼Java被稱作是“平台無關的編程語言”?
* Java虛擬機是一個可執行Java字節碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執行的字節碼文件。
* Java被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者重新編譯。
* Java虛擬機讓這個變為可能,因為它知道底層硬件平台的指令長度和其他特性。

2、JDK和JRE的區別是什麼?
* Java運行時環境(JRE)是將要執行的Java程序的Java虛擬機。它同時也包含了執行applet需要的瀏覽器插件。
* Java開發工具包(JDK)是完整的Java軟件開發包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調試器),
可以讓開發者開發、編譯、執行Java應用程序。

3、“static”關鍵字是什麼意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
* “static”關鍵字表明一個成員變量或者成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
Java中static方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而static方法是編譯時靜態綁定的。
static方法跟類的任何實例都不相關,所以概念上不適用。

4、是否可以在static環境中訪問非static變量?
* static變量在Java中是屬於類的,它在所有的實例中的值是一樣的。
當類被Java虛擬機載入的時候,會對static變量進行初始化。如果你的代碼嚐試不用實例來訪問非static的變量,
編譯器會報錯,因為這些變量還沒有被創建出來,還沒有跟任何實例關聯上。

5、Java支持的數據類型有哪些?什麼是自動拆裝箱?
* Java語言支持的8種基本數據類型是:
* byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
自動裝箱是Java編譯器在基本數據類型和對應的包裝類型之間做一個轉化,比如:把int轉化成integer等等。反之就是自動拆箱。

6、Java中的方法覆蓋(override)和方法重載(overloading)是什麼意思?
* Java中的方法重載發生在同一個類裏麵兩個或者多喝方法的方法名相同凡是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。
* 方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限製它所覆蓋的方法的訪問。

7、Java中,什麼是構造函數?什麼是構造函數重載?什麼是複製構造函數?
* 當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。
在程序員沒有給類提供構造函數的情況下,Java編譯器會為這個類創建一個默認的構造函數。
Java中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java不支持像C++中那樣的複製構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java不會創建默認的複製構造函數。
8、Java支持多繼承麼?
* 不支持,Java不支持多繼承。每個類隻能繼承一個類,但是可以實現多個接口。
9、接口和抽象類的區別是什麼?
* Java提供和支持創建抽象類和接口。它們的實現有共同點,不同點在於:
接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個接口,但是隻能繼續一個抽象類
類如果要實現一個接口,它必須要實現接口聲明的所有方法。但是,類可以不是想抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成抽象的。
抽象類可以在不提供接口方法實現的情況下實現接口。
Java接口中聲明的變量默認都是final的。抽象類可以包含非final的變量。
Java接口中的成員函數默認是public的。抽象類的成員函數可以是其他修飾符修飾的。
接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調用的。
10、什麼是 值傳遞和引用傳遞?
* 對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。

最後更新:2017-09-05 10:02:35

  上一篇:go  ARMS 發布 V2.2.6 版本,全新支持 前端前監控, MQ數據源
  下一篇:go  Changing the Way of Continuous Delivery with Docker (Part 2)