Java是一個支持併發、基於類和麪向對象的計算機編程語言。程序員
下面列出了面向對象軟件開發的優勢:
一、代碼開發模塊化,更易維護和修改。
二、代碼複用。
三、加強代碼的可靠性和靈活性。
四、增長代碼的可理解性。
面向對象編程有不少重要的特性,好比:封裝,繼承,多態和抽象。下面的章節咱們會逐個分析這些特性。
封裝
封裝給對象提供了隱藏內部特性和行爲的能力。對象提供一些能被其餘對象訪問的方法來改變它內部的數據。在Java當中,有3種修飾符:public,private和protected。每一種修飾符給其餘的位於同一個包或者不一樣包下面對象賦予了不一樣的訪問權限。
下面列出了使用封裝的一些好處:
一、經過隱藏對象的屬性來保護對象內部的狀態。
二、 提升了代碼的可用性和可維護性,由於對象的行爲能夠被單獨的改變或者是擴展。
三、禁止對象之間的不良交互提升模塊化。
參考這個文檔獲取更多關於封裝的細節和示例。
多態
多態是編程語言給不一樣的底層數據類型作相同的接口展現的一種能力。一個多態類型上的操做能夠應用到其餘類型的值上面。
繼承
繼承給對象提供了從基類獲取字段和方法的能力。繼承提供了代碼的重用行,也能夠在不修改類的狀況下給現存的類添加新特性。
抽象
抽象是把想法從具體的實例中分離出來的步驟,所以,要根據他們的功能而不是實現細節來建立類。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
short
int
long
float
double
boolean
char
自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間作的一個轉化。好比:把int轉化成Integer,double轉化成double,等等。反之就是自動拆箱。
6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java中的方法重載發生在同一個類裏面兩個或者是多個方法的方法名相同可是參數不一樣的狀況。與此相對,方法覆蓋是說子類從新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
7.Java中,什麼是構造函數?什麼是構造函數重載?什麼是複製構造函數?
當新對象被建立的時候,構造函數會被調用。每個類都有構造函數。在程序員沒有給類提供構造函數的狀況下,Java編譯器會爲這個類建立一個默認的構造函數。
Java中構造函數重載和方法重載很類似。能夠爲一個類建立多個構造函數。每個構造函數必須有它本身惟一的參數列表。
Java不支持像C++中那樣的複製構造函數,這個不一樣點是由於若是你不本身寫構造函數的狀況下,Java不會建立默認的複製構造函數。
8.Java支持多繼承麼?
不支持,Java不支持多繼承。每一個類都只能繼承一個類,可是能夠實現多個接口。
9.接口和抽象類的區別是什麼?
Java提供和支持建立抽象類和接口。它們的實現有共同點,不一樣點在於:
接口中全部的方法隱含的都是抽象的。而抽象類則能夠同時包含抽象和非抽象的方法。
類能夠實現不少個接口,可是隻能繼承一個抽象類
類若是要實現一個接口,它必需要實現接口聲明的全部方法。可是,類能夠不實現抽象類聲明的全部方法,固然,在這種狀況下,類也必須得聲明成是抽象的。
抽象類能夠在不提供接口方法實現的狀況下實現接口。
Java接口中聲明的變量默認都是final的。抽象類能夠包含非final的變量。
Java接口中的成員函數默認是public的。抽象類的成員函數能夠是private,protected或者是public。
接口是絕對抽象的,不能夠被實例化。抽象類也不能夠被實例化,可是,若是它包含main方法的話是能夠被調用的。
也能夠參考JDK8中抽象類和接口的區別
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味着傳遞了對象的一個副本。所以,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味着傳遞的並非實際的對象,而是對象的引用。所以,外部對引用對象所作的改變會反映到全部的對象上。編程