JAVA小知識(shí)

  1. 在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán)?
    在Java中,要想跳出多重循環(huán)虱岂,可以在外面的循環(huán)語(yǔ)句前定義一個(gè)標(biāo)號(hào),然后在里層循環(huán)體的代碼中使用帶有標(biāo)號(hào)的break語(yǔ)句菠红,即可跳出外層循環(huán)第岖。例如:
public static void main(String[] args) {
        ok:
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                System.out.println("i =" + i + ", j = " + j);
                if (j == 5) break ok;
            }
        }
    }
  1. **switch語(yǔ)句能否作用在byte上,能否作用在long上试溯,能否作用在String上? **
    在switch(expr1)中蔑滓,expr1只能是一個(gè)整數(shù)表達(dá)式或者枚舉常量,整數(shù)表達(dá)式可以是int基本類(lèi)型或Integer包裝類(lèi)型,由于烫饼,byte,short,char都可以隱含轉(zhuǎn)換為int猎塞,所以,這些類(lèi)型以及這些類(lèi)型的包裝類(lèi)型也是可以的杠纵。顯然荠耽,long(超出int數(shù)量級(jí)轉(zhuǎn)成int要損失精度)和String類(lèi)型(不是基本類(lèi)型)都不符合switch的語(yǔ)法規(guī)定,并且不能被隱式轉(zhuǎn)換成int類(lèi)型比藻,所以铝量,它們不能作用于swtich語(yǔ)句中。
  2. short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?
    對(duì)于short s1 = 1; s1 = s1 + 1;由于s1+1運(yùn)算時(shí)會(huì)自動(dòng)提升表達(dá)式的類(lèi)型(取精度大的)银亲,所以結(jié)果是int型慢叨,再賦值給short類(lèi)型s1時(shí),編譯器將報(bào)告需要強(qiáng)制轉(zhuǎn)換類(lèi)型的錯(cuò)誤务蝠。
    對(duì)于short s1 = 1; s1 += 1;由于 +=是java語(yǔ)言規(guī)定的運(yùn)算符拍谐,java編譯器會(huì)對(duì)它進(jìn)行特殊處理,因此可以正確編譯(可以理解為此處也是賦值操作馏段,所以沒(méi)有轉(zhuǎn)型問(wèn)題轩拨,a += b; //相當(dāng)于 a = (short)(a+b);)。
  3. 用最有效率的方法算出2乘以8等於幾?
    System.out.print(2<<3);位運(yùn)算快院喜,因?yàn)閷⒁粋€(gè)數(shù)左移n位亡蓉,就相當(dāng)于乘以了2的n次方,那么喷舀,一個(gè)數(shù)乘以8只要將其左移3位即可砍濒,而位運(yùn)算cpu直接支持的,效率最高硫麻,所以爸邢,2乘以8等於幾的最效率的方法是2<<3。
  4. ** Integer與int的區(qū)別拿愧?**
    int是java提供的8種原始數(shù)據(jù)類(lèi)型之一甲棍。Java為每個(gè)原始類(lèi)型提供了封裝類(lèi),Integer是java為int提供的封裝類(lèi)赶掖。int的默認(rèn)值為0感猛,而Integer的默認(rèn)值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別奢赂,int則無(wú)法表達(dá)出未賦值的情況陪白,例如,要想表達(dá)出沒(méi)有參加考試和考試成績(jī)?yōu)?的區(qū)別膳灶,則只能使用Integer咱士。在JSP開(kāi)發(fā)中立由,Integer的默認(rèn)為null,所以用el表達(dá)式在文本框中顯示時(shí)序厉,值為空白字符串锐膜,而int默認(rèn)的默認(rèn)值為0,所以用el表達(dá)式在文本框中顯示時(shí)弛房,結(jié)果為0道盏,所以,int不適合作為web層的表單數(shù)據(jù)的類(lèi)型文捶。另外荷逞,Integer提供了多個(gè)與整數(shù)相關(guān)的操作方法,例如粹排,將一個(gè)字符串轉(zhuǎn)換成整數(shù)种远,Integer中還定義了表示整數(shù)的最大值和最小值的常量。
  5. 接口是否可繼承接口?抽象類(lèi)是否可實(shí)現(xiàn)(implements)接口?抽象類(lèi)是否可繼承具體類(lèi)(concrete class)?抽象類(lèi)中是否可以有靜態(tài)的main方法顽耳?
    接口可以繼承接口坠敷。
    抽象類(lèi)可以實(shí)現(xiàn)(implements)接口,抽象類(lèi)是可以繼承具體類(lèi)射富。
    抽象類(lèi)中可以有靜態(tài)的main方法常拓。
  6. java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?
    靠的是父類(lèi)或接口定義的引用變量可以指向子類(lèi)或具體實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象辉浦,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法茎辐,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法宪郊,而不是引用變量的類(lèi)型中定義的方法。
  7. 內(nèi)部類(lèi)可以引用它的包含類(lèi)的成員嗎拖陆?有沒(méi)有什么限制弛槐?
    完全可以。如果不是靜態(tài)內(nèi)部類(lèi)依啰,那沒(méi)有什么限制乎串!
    如果你把靜態(tài)嵌套類(lèi)當(dāng)作內(nèi)部類(lèi)的一種特例,那在這種情況下不可以訪(fǎng)問(wèn)外部類(lèi)的普通成員變量速警,而只能訪(fǎng)問(wèn)外部類(lèi)中的靜態(tài)成員叹誉。
  8. super.getClass()方法調(diào)用?
    下面程序的輸出結(jié)果是多少闷旧?
importjava.util.Date;
public classTestextends Date{
 public static voidmain(String[] args) {
           new Test().test();
 }
 
 public void test(){
           System.out.println(super.getClass().getName());
       }
}

很奇怪长豁,結(jié)果是Test
這屬于腦筋急轉(zhuǎn)彎的題目,在一個(gè)qq群有個(gè)網(wǎng)友正好問(wèn)過(guò)這個(gè)問(wèn)題忙灼,我覺(jué)得挺有趣匠襟,就研究了一下钝侠,沒(méi)想到今天還被你面到了,哈哈酸舍。
在test方法中帅韧,直接調(diào)用getClass().getName()方法,返回的是Test類(lèi)名
由于getClass()在Object類(lèi)中定義成了final啃勉,子類(lèi)不能覆蓋該方法忽舟,所以,在
test方法中調(diào)用getClass().getName()方法璧亮,其實(shí)就是在調(diào)用從父類(lèi)繼承的getClass()方法萧诫,等效于調(diào)用super.getClass().getName()方法,所以枝嘶,super.getClass().getName()方法返回的也應(yīng)該是Test帘饶。
如果想得到父類(lèi)的名稱(chēng),應(yīng)該用如下代碼:
getClass().getSuperClass().getName();

  1. String s = 'Hello';s = s + ' world!';這兩行代碼執(zhí)行后群扶,原始的String對(duì)象中的內(nèi)容到底變了沒(méi)有及刻?
    沒(méi)有。因?yàn)镾tring被設(shè)計(jì)成不可變(immutable)類(lèi)竞阐,所以它的所有對(duì)象都是不可變對(duì)象缴饭。在這段代碼中,s原先指向一個(gè)String對(duì)象骆莹,內(nèi)容是 'Hello'颗搂,然后我們對(duì)s進(jìn)行了+操作,那么s所指向的那個(gè)對(duì)象是否發(fā)生了改變呢幕垦?答案是沒(méi)有丢氢。這時(shí),s不指向原來(lái)那個(gè)對(duì)象了先改,而指向了另一個(gè) String對(duì)象疚察,內(nèi)容為'Hello world!',原來(lái)那個(gè)對(duì)象還存在于內(nèi)存之中仇奶,只是s這個(gè)引用變量不再指向它了貌嫡。
    通過(guò)上面的說(shuō)明,我們很容易導(dǎo)出另一個(gè)結(jié)論该溯,如果經(jīng)常對(duì)字符串進(jìn)行各種各樣的修改岛抄,或者說(shuō),不可預(yù)見(jiàn)的修改狈茉,那么使用String來(lái)代表字符串的話(huà)會(huì)引起很大的內(nèi)存開(kāi)銷(xiāo)弦撩。因?yàn)?String對(duì)象建立之后不能再改變,所以對(duì)于每一個(gè)不同的字符串论皆,都需要一個(gè)String對(duì)象來(lái)表示益楼。這時(shí)猾漫,應(yīng)該考慮使用StringBuffer類(lèi),它允許修改感凤,而不是每個(gè)不同的字符串都要生成一個(gè)新的對(duì)象悯周。并且,這兩種類(lèi)的對(duì)象轉(zhuǎn)換十分容易陪竿。同時(shí)禽翼,我們還可以知道,如果要使用內(nèi)容相同的字符串族跛,不必每次都new一個(gè)String闰挡。例如我們要在構(gòu)造器中對(duì)一個(gè)名叫s的String引用變量進(jìn)行初始化,把它設(shè)置為初始值礁哄,應(yīng)當(dāng)這樣做:
public class Demo {
          private String s;
          public Demo {
                s = 'Initial Value';
          }
}

而非
s = new String('Initial Value');
后者每次都會(huì)調(diào)用構(gòu)造器长酗,生成新對(duì)象,性能低下且內(nèi)存開(kāi)銷(xiāo)大桐绒,并且沒(méi)有意義夺脾,因?yàn)镾tring對(duì)象不可改變,所以對(duì)于內(nèi)容相同的字符串茉继,只要一個(gè)String對(duì)象來(lái)表示就可以了咧叭。也就說(shuō),多次調(diào)用上面的構(gòu)造器創(chuàng)建多個(gè)對(duì)象烁竭,他們的String類(lèi)型屬性s都指向同一個(gè)對(duì)象菲茬。上面的結(jié)論還基于這樣一個(gè)事實(shí):對(duì)于字符串常量,如果內(nèi)容相同派撕,Java認(rèn)為它們代表同一個(gè)String對(duì)象婉弹。而用關(guān)鍵字new調(diào)用構(gòu)造器,總是會(huì)創(chuàng)建一個(gè)新的對(duì)象腥刹,無(wú)論內(nèi)容是否相同。至于為什么要把String類(lèi)設(shè)計(jì)成不可變類(lèi)汉买,是它的用途決定的衔峰。其實(shí)不只String姜胖,很多Java標(biāo)準(zhǔn)類(lèi)庫(kù)中的類(lèi)都是不可變的密幔。在開(kāi)發(fā)一個(gè)系統(tǒng)的時(shí)候鸦难,我們有時(shí)候也需要設(shè)計(jì)不可變類(lèi)凯砍,來(lái)傳遞一組相關(guān)的值秕铛,這也是面向?qū)ο笏枷氲捏w現(xiàn)冠桃。不可變類(lèi)有一些優(yōu)點(diǎn)搏恤,比如因?yàn)樗膶?duì)象是只讀的攘烛,所以多線(xiàn)程并發(fā)訪(fǎng)問(wèn)也不會(huì)有任何問(wèn)題舔痕。當(dāng)然也有一些缺點(diǎn)评抚,比如每個(gè)不同的狀態(tài)都要一個(gè)對(duì)象來(lái)代表豹缀,可能會(huì)造成性能上的問(wèn)題。所以Java標(biāo)準(zhǔn)類(lèi)庫(kù)還提供了一個(gè)可變版本慨代,即 StringBuffer邢笙。

  1. 下面這條語(yǔ)句一共創(chuàng)建了多少個(gè)對(duì)象:String s='a'+'b'+'c'+'d'?
    String s1 = 'a';
    String s2 = s1 + 'b';
    String s3 = 'a' + 'b';
    System.out.println(s2 == 'ab');
    System.out.println(s3 == 'ab');
    第一條語(yǔ)句打印的結(jié)果為false侍匙,第二條語(yǔ)句打印的結(jié)果為true氮惯,這說(shuō)明javac編譯可以對(duì)字符串常量直接相加的表達(dá)式進(jìn)行優(yōu)化,不必要等到運(yùn)行期去進(jìn)行加法運(yùn)算處理想暗,而是在編譯時(shí)去掉其中的加號(hào)妇汗,直接將其編譯成一個(gè)這些常量相連的結(jié)果。
    題目中的第一行代碼被編譯器在編譯時(shí)優(yōu)化后说莫,相當(dāng)于直接定義了一個(gè)”abcd”的字符串杨箭,所以,上面的代碼應(yīng)該只創(chuàng)建了一個(gè)String對(duì)象唬滑。寫(xiě)如下兩行代碼告唆,
    String s ='a' + 'b' + 'c' + 'd';
    System.out.println(s== 'abcd');
    最終打印的結(jié)果應(yīng)該為true。
  2. **Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用晶密。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末擒悬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稻艰,更是在濱河造成了極大的恐慌懂牧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尊勿,死亡現(xiàn)場(chǎng)離奇詭異僧凤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)元扔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)躯保,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人澎语,你說(shuō)我怎么就攤上這事途事。” “怎么了擅羞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵尸变,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我减俏,道長(zhǎng)召烂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任娃承,我火速辦了婚禮奏夫,結(jié)果婚禮上怕篷,老公的妹妹穿的比我還像新娘。我一直安慰自己桶蛔,他們只是感情好匙头,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著仔雷,像睡著了一般蹂析。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碟婆,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天电抚,我揣著相機(jī)與錄音,去河邊找鬼竖共。 笑死蝙叛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的公给。 我是一名探鬼主播借帘,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淌铐!你這毒婦竟也來(lái)了肺然?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腿准,失蹤者是張志新(化名)和其女友劉穎际起,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吐葱,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡街望,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弟跑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灾前。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孟辑,靈堂內(nèi)的尸體忽然破棺而出哎甲,到底是詐尸還是另有隱情,我是刑警寧澤扑浸,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布烧给,位于F島的核電站燕偶,受9級(jí)特大地震影響喝噪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜指么,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一酝惧、第九天 我趴在偏房一處隱蔽的房頂上張望榴鼎。 院中可真熱鬧,春花似錦晚唇、人聲如沸巫财。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)平项。三九已至,卻和暖如春悍及,著一層夾襖步出監(jiān)牢的瞬間闽瓢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工心赶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扣讼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓缨叫,卻偏偏與公主長(zhǎng)得像椭符,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耻姥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容