開篇語:這篇文章是 java面試那件小事 系列文章的第一篇。該系列的文章將所有的讀者都想象成是一個(gè)初學(xué)者,由淺入深的引入java相關(guān)的一些問題。這些問題都是sandeziVIP和朋友一起整理,或在群里或在論壇或查閱網(wǎng)絡(luò)收集的一些出現(xiàn)頻率較高且重要,當(dāng)然也是必須要掌握的內(nèi)容。如果你認(rèn)為i你已經(jīng)超出初學(xué)者了,卻不是很懂每篇文章開頭引入的幾個(gè)問題,請把自己重歸到初學(xué)者的行列。
java基礎(chǔ)知識篇將涉及到 面向?qū)ο蠡荆僮鞣刂茍?zhí)行流程以及初始化相關(guān)的內(nèi)容。
問題:
- 面向?qū)ο蟮奶卣饔心男┓矫妫?/span>
- Integer與int的區(qū)別?
- short num = 1;num = num+1;有什么錯(cuò)?short num =1 ; num +=1;有沒有錯(cuò)?
- &和&&的區(qū)別?以及用最有效率的方法算出2乘以8等于幾
- 靜態(tài)變量和實(shí)例變量的區(qū)別
- equals()和==到底有什么區(qū)別?
- Overloaded和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
- fianl,finally,finalize的區(qū)別?
- 抽象:抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過程抽象,二是數(shù)據(jù)抽象。
- 繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
- 封裝:封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個(gè)受保護(hù)的接口訪問其他對象。
- 多態(tài)性:多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。Java為每個(gè)原始類型提供了封裝類。引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。在jsp開發(fā)中,Integer的默認(rèn)值為null,所以用el表達(dá)式在文本框中顯示時(shí),值為null;而int默認(rèn)為0,所以在el表達(dá)式在文本框中顯示時(shí),結(jié)果為0,所以int不適合作為web層的表單數(shù)據(jù)的類型(具體見下表)。
基本類型 | 大 小 | 最小值 | 最大值 | 封裝類型 |
boolean | — | — | — | Boolean |
char | 16bits(2字節(jié)) | Unicode 0 | Unicode 2^16-1 | Character |
byte | 8bits(1字節(jié)) | -128 | 127 | Byte |
short | 16bits(2字節(jié)) | -2^15 | +2^15-1 | Short |
int | 32bits(4字節(jié)) | -2^31 | +2^31-1 | Integer |
long | 64bits(8字節(jié)) | -2^63 | +2^63-1 | Long |
float | 32bits(4字節(jié)) | IEEE754標(biāo)準(zhǔn) | IEEE754 | Float |
double | 64bits(8字節(jié)) | IEEE754 | IEEE754 | Double |
- 所有數(shù)值類型都有正負(fù)號,所以不要去尋找無符號的數(shù)值類型
- boolean類型所占用存儲空間的大小沒有明確指定,僅定義為能夠取字面值true或false
&&又叫做短路與,即如果第一個(gè)表達(dá)式為false,則不再計(jì)算第二個(gè)表達(dá)式,例如,對于 if(!str=null&&!str.equals(""))表達(dá)式,當(dāng)str為null時(shí),后面的表達(dá)式不會執(zhí)行,所以就不會出現(xiàn)NullPoninterException異常,如果將&&改為&,則會拋出空指針異常。
&還可以用作位運(yùn)算符,當(dāng)&操作符兩邊的表達(dá)式不是boolean類型時(shí),&表示按位與操作。
2<<3應(yīng)該是2*8的最有效率的運(yùn)算方式。因?yàn)椋瑢⒁粋€(gè)數(shù)左移n位,就相當(dāng)于乘以了2的n次方,那么一個(gè)數(shù)乘以8只要將其左移3位即可。而位運(yùn)算(<<)是cpu支持的,效率也就最高。
靜態(tài)變量和實(shí)例變量的區(qū)別?
有static關(guān)鍵字修飾的變量叫做靜態(tài)變量,因?yàn)槠鋭?chuàng)建只是作為整個(gè)類而不是某個(gè)特定對象而存在,所以也叫做類變量。反之沒有被static修飾的變量則叫做實(shí)例變量。
類變量和實(shí)例變量的區(qū)別:
- 一個(gè)static變量對每個(gè)類來說只有一份存儲空;而非static變量(實(shí)例變量)則是對每個(gè)對象都有一個(gè)存儲空間
- static變量即可以通過一個(gè)對象去定位它,也可以空過其類名直接引用;而對于非static變量則只能通過對象去引用
static int i = 5;
}
現(xiàn)在創(chuàng)建兩個(gè)TestSatic對象
TestStatic ts1 = new TestStatic();
TestStatic ts2 = new TestStatic();
這里 ts1.i 和 ts2.1 指向同一存儲空間,因此他們具有相同的值5
如果要引用static變量i的話,既可以通過一個(gè)對象去定位,如同ts1.i;也可以通過其類名直接引用,如TestStatic.i,這個(gè)對于非靜態(tài)變量時(shí)非法的
equals()和==到底有什么區(qū)別?
==操作比較的是兩個(gè)變量的值是否相等,對于引用型變量表示的是兩個(gè)變量在堆中存儲的地址是否相同,即棧中的內(nèi)容是否相同。
equals操作表示的兩個(gè)變量是否是對同一個(gè)對象的引用,即堆中的內(nèi)容是否相同。
==比較的是2個(gè)對象的地址,而equals比較的是2個(gè)對象的內(nèi)容。
深入了解此題詳見sandeziVIP早前的博文:從equals和==說起
Overloaded和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
overloaded表示重載,即在類中可以創(chuàng)建多個(gè)方法,它們具有相同的方法名,但具有不同的參數(shù)類型列表;Override表示重寫,即子類中定義了與基類中具有相同名稱和參數(shù)列表的方法,此時(shí)基類的中的該方法將被隱藏。
深入了解此題詳見sandeziVIP的博文 :關(guān)于java方法的重載(Overloading),覆寫(Override)以及final 方法的幾點(diǎn)說明
fianl,finally,finalize的區(qū)別?
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。
PS:
本系列文章都遵循永久更新原則,發(fā)現(xiàn)新的東西都會及時(shí)加入,所以依舊希望大家積極討論,不吝賜教。
另遇到問題較為繁瑣且重要都會單獨(dú)成文以說明之。