1、面向?qū)ο蟮奶卣饔心男┓矫妫?/h2>
封裝、繼承、多態(tài)
2、訪問(wèn)修飾符public,private,protected,以及不寫(默認(rèn))時(shí)的區(qū)別?
封裝、繼承、多態(tài)
| 修飾符 | 當(dāng)前類 | 包內(nèi) | 子孫類 | 包外 |
|---|---|---|---|---|
| public | √ | √ | √ | √ |
| protected | √ | √ | √ | × |
| default | √ | √ | × | × |
| private | √ | × | × | × |
注:
不寫時(shí)默認(rèn)為default,默認(rèn)為包內(nèi)使用。
3、String 是最基本的數(shù)據(jù)類型嗎?
String和Integer都是包裝類型;
Java有8種基本數(shù)據(jù)類型: byte、short、int、long、double、float、boolean、char;
4、float f=3.4;是否正確?
答案:不正確。
原因:精度不準(zhǔn)確,應(yīng)該用強(qiáng)制類型轉(zhuǎn)換,如下所示:float f=(float)3.4 或float f = 3.4f
在java里面,沒(méi)小數(shù)點(diǎn)的默認(rèn)是int,有小數(shù)點(diǎn)的默認(rèn)是 double;
編譯器可以自動(dòng)向上轉(zhuǎn)型,如int 轉(zhuǎn)成 long 系統(tǒng)自動(dòng)轉(zhuǎn)換沒(méi)有問(wèn)題,因?yàn)楹笳呔雀?br> double 轉(zhuǎn)成 float 就不能自動(dòng)做了,所以后面的加上個(gè) f;
5、short s1 = 1; s1 = s1 + 1;有錯(cuò)嗎?short s1 = 1; s1 += 1;有錯(cuò)嗎?
1、對(duì)于short s1 = 1; s1 = s1 + 1; 由于s1+1運(yùn)算時(shí)會(huì)自動(dòng)提升表達(dá)式的類型,所以結(jié)果是int型,再賦值給short類型s1時(shí),編譯器將報(bào)告需要強(qiáng)制轉(zhuǎn)換類型的錯(cuò)誤。
2、對(duì)于short s1 = 1; s1 += 1;由于 += 是java語(yǔ)言規(guī)定的運(yùn)算符,java編譯器會(huì)對(duì)它進(jìn)行特殊處理,因此可以正確編譯。
3、s1是short型,1是int型,所以兩個(gè)加完后是類型加大的那個(gè)是int,但是s1=s1+1;賦值的時(shí)候,s1是short型,不能將int型隱式轉(zhuǎn)換成short。
6、Java有沒(méi)有g(shù)oto?
goto是Java中的保留字,但是現(xiàn)在還沒(méi)有在Java中使用goto,Java用帶標(biāo)簽的continue和break語(yǔ)句能夠完全代替goto的功能,從而避免了goto語(yǔ)句的濫用。
7、int和Integer有什么區(qū)別?
int 是基本數(shù)據(jù)類型,而integer 是對(duì)象(也就是一個(gè)類)。因此在類進(jìn)行初始化時(shí)int類的變量初始為0,而Integer的變量則初始化為null。
類似的還有:float Float; double Double; String等
8、&和&&的區(qū)別?
對(duì)于:& -- > 不管怎樣,都會(huì)執(zhí)行"&"符號(hào)左右兩邊的程序;
對(duì)于:&& -- > 只有當(dāng)符號(hào)"&&"左邊程序?yàn)檎?true)后,才會(huì)執(zhí)行符號(hào)"&&"右邊的程序。
9、解釋內(nèi)存中的棧(stack)、堆(heap)和靜態(tài)區(qū)(static area)的用法。
堆區(qū):專門用來(lái)保存對(duì)象的實(shí)例(new 創(chuàng)建的對(duì)象和數(shù)組),實(shí)際上也只是保存對(duì)象實(shí)例的屬性值,屬性的類型和對(duì)象本身的類型標(biāo)記等,并不保存對(duì)象的方法(方法是指令,保存在Stack中)
1.存儲(chǔ)的全部是對(duì)象,每個(gè)對(duì)象都包含一個(gè)與之對(duì)應(yīng)的class的信息。(class的目的是得到操作指令)
2.jvm只有一個(gè)堆區(qū)(heap)被所有線程共享,堆中不存放基本類型和對(duì)象引用,只存放對(duì)象本身.
3.一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。
棧區(qū):對(duì)象實(shí)例在Heap 中分配好以后,需要在Stack中保存一個(gè)4字節(jié)的Heap內(nèi)存地址,用來(lái)定位該對(duì)象實(shí)例在Heap 中的位置,便于找到該對(duì)象實(shí)例。
1.每個(gè)線程包含一個(gè)棧區(qū),棧中只保存基礎(chǔ)數(shù)據(jù)類型的對(duì)象和自定義對(duì)象的引用(不是對(duì)象),對(duì)象都存放在堆區(qū)中
2.每個(gè)棧中的數(shù)據(jù)(原始類型和對(duì)象引用)都是私有的,其他棧不能訪問(wèn)。
3.棧分為3個(gè)部分:基本類型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)。
4.由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等.
靜態(tài)區(qū)/方法區(qū):
1.方法區(qū)又叫靜態(tài)區(qū),跟堆一樣,被所有的線程共享。方法區(qū)包含所有的class和static變量。
2.方法區(qū)中包含的都是在整個(gè)程序中永遠(yuǎn)唯一的元素,如class,static變量。
3.全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。
10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:11.5+0.5后是12再向下取整是12;-11.5+0.5后是-11再向下取整-11
擴(kuò)展:Math類中提供了三個(gè)與取整有關(guān)的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對(duì)應(yīng),例如,ceil的英文意義是天花板,該方法就表示向上取整, 所以,Math.ceil(11.3)的結(jié)果為12,Math.ceil(-11.3)的結(jié)果是-11;floor的英文意義是地板,該方法就表示向下取整,所以,Math.floor(11.6)的結(jié)果為11,Math.floor(-11.6)的結(jié)果是-12;最難掌握的是round方法,它表示“四舍五入”,算法為Math.floor(x+0.5),即將原來(lái)的數(shù)字加上0.5后再向下取整,所以,Math.round(11.5)的結(jié)果為12,Math.round(-11.5)的結(jié)果為-11。