java筆試題

  • 在基本JAVA類型中扩借,如果不明確指定椒惨,整數(shù)型的默認是什么類型?帶小數(shù)的默認是什么類型潮罪?(int double)

  • 下列關(guān)于java 中的 wait()方法和 sleep()方法的區(qū)別描述錯誤的是康谆?(D)

A.wait()方法屬于Object類凄杯,sleep()屬于Thread類
B.調(diào)用wait()方法的時候,線程會放棄對象鎖
C.調(diào)用sleep()方法的過程中秉宿,線程不會釋放對象鎖
D.sleep()方法導致了程序暫停執(zhí)行指定的時間戒突,讓出cpu給其他線程

解析:
sleep和wait的區(qū)別有:
1,這兩個方法來自不同的類分別是Thread和Object
2描睦,最主要是sleep方法沒有釋放鎖膊存,而wait方法釋放了鎖,使得敏感詞線程可以使用同步控制塊或者方法忱叭。
3隔崎,wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用韵丑,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必須捕獲異常爵卒,而wait,notify和notifyAll不需要捕獲異常

  • 下列說法正確的是(B)

A.在類方法中可用this來調(diào)用本類的類方法
B.在類方法中調(diào)用本類的類方法時可直接調(diào)用
C.在類方法中只能調(diào)用本類中的類方法
D.在類方法中絕對不能調(diào)用實例方法

解析:所謂類的方法就是指類中用static 修飾的方法(非static 為實例方法)撵彻,在類方法中不能有關(guān)鍵字

  • try {}里有一個return語句钓株,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行陌僵,在return前還是后

答:會執(zhí)行轴合,在return前執(zhí)行

  • 以下代碼將打印出

public static void main (String[] args) {
String classFile = "com.jd.". replaceAll(".", "/") + "MyClass.class";
System.out.println(classFile);
}
A.com. jd
B.com/jd/MyClass.class
C./////////MyClass.class
D.com.jd.MyClass

解析:
C。由于replaceAll方法的第一個參數(shù)是一個正則表達式碗短,而"."在正則表達式中表示任何字符受葛,所以會把前面字符串的所有字符都替換成"/"。如果想替換的只是"."偎谁,那么久要寫成"\.".

  • 代碼片段

byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
關(guān)于上面代碼片段敘述正確的是(C)
A.輸出結(jié)果:13
B.語句:b6=b4+b5編譯出錯
C.語句:b3=b1+b2編譯出錯
D.運行期拋出異常
解析:被final修飾的變量是常量总滩,這里的b6=b4+b5可以看成是b6=10;在編譯時就已經(jīng)變?yōu)閎6=10了
而b1和b2是byte類型巡雨,java中進行計算時候?qū)⑺麄兲嵘秊閕nt類型闰渔,再進行計算,b1+b2計算后已經(jīng)是int類型鸯隅,賦值給b3澜建,b3是byte類型,類型不匹配蝌以,編譯不會通過炕舵,需要進行強制轉(zhuǎn)換。
Java中的byte跟畅,short咽筋,char進行計算時都會提升為int類型。

  • Which are keywords in Java?(DE)

A.null
B.true
C.sizeof
D.implements
E.instanceof

解析

image.png

  • Java程序可以分為兩類:java application 和java applet徊件。前者是完整的應(yīng)用程序奸攻,需要獨立的解釋器來解釋運行蒜危;后者則是嵌在網(wǎng)頁中的非獨立程序,由瀏覽器所自帶的java解釋器來解釋運行睹耐。

  • 關(guān)于以下application,說法正確是什么辐赞?(B)

public class Test {
static int x=10;
static {x+=5;}
public static void main(String[] args) //4
{
System.out.println("x="+x);
}
static{x/=3;};
}//9

A.4行與9行不能通過編譯,因為缺少方法名和返回類型
B.編譯通過硝训,執(zhí)行結(jié)果是:x=5
C.編譯通過响委,執(zhí)行結(jié)果是:x=3
D.9行不能通過編譯,因為只能有一個靜態(tài)初始化器

解析:靜態(tài)塊:用static申明窖梁,JVM加載類時執(zhí)行赘风,僅執(zhí)行一次,且按聲明順序執(zhí)行
構(gòu)造塊:類中直接用{}定義纵刘,每一次創(chuàng)建對象時執(zhí)行
執(zhí)行順序優(yōu)先級:靜態(tài)塊>main()>構(gòu)造塊>構(gòu)造方法

Java初始化順序:
1 繼承體系的所有靜態(tài)成員初始化(先父類邀窃,后子類)
2 父類初始化完成(普通成員的初始化-->構(gòu)造函數(shù)的調(diào)用)
3 子類初始化(普通成員-->構(gòu)造函數(shù))

  • 如下代碼的 輸出結(jié)果是什么?(D)

public class Test {
public int aMethod() {
static int i = 0;
i++;
return i;
}
public static void main (String args[]) {
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}

A.0
B.1
C.2
D.編譯失敗

解析:靜態(tài)變量只能在類主體中定義假哎,不能在方法中定義

  • 對Collection和Collections描述正確的是(BD)

A.Collection是java.util下的類瞬捕,它包含有各種有關(guān)集合操作的靜態(tài)方法
B.Collection是java.util下的接口,它是各種集合結(jié)構(gòu)的父接口
C.Collections是java.util下的接口位谋,它是各種集合結(jié)構(gòu)的父接口
D.Collections是java.util下的類山析,它包含有各種有關(guān)集合操作的靜態(tài)方法

解析:java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法掏父。Collection接口在Java 類庫中有很多具體的實現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式秆剪。
java.util.Collections 是一個包裝類赊淑。它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法。此類不能實例化仅讽,就像一個工具類陶缺,服務(wù)于Java的Collection框架。

  • 下列正確的有( ACD)

A.call by value不會改變實際參數(shù)的數(shù)值
B.call by reference能改變實際參數(shù)的參考地址
C.call by reference不能改變實際參數(shù)的參考地址
D.call by reference能改變實際參數(shù)的內(nèi)容

解析:引用數(shù)據(jù)類型是引用傳遞(call by reference)洁灵,基本數(shù)據(jù)類型是值傳遞(call by value)

  • 下列關(guān)于Java語言中String和char的說法饱岸,正確的是(C)

A.String是Java定義的一種基本數(shù)據(jù)類型。
B.String是以“\0”結(jié)尾的char類型的數(shù)組char[]徽千。
C.使用equals()方法比較兩個String是否內(nèi)容一樣(即字符串中的各個字符都一樣)苫费。
D.Char類型在Java語言里面存儲的是ASCII碼。

解析:A 基本數(shù)據(jù)類型包括byte双抽,short百框,int,long牍汹,float铐维,double柬泽,char,boolean嫁蛇,所以A錯锨并。
B,C語言當中是這樣,java不是睬棚, String內(nèi)部是用char[]數(shù)組實現(xiàn)的第煮,不過結(jié)尾不用\0。
C 對闸拿,字符串內(nèi)容比較用equals方法空盼。
D char存儲的unicode碼,不僅可以存儲ascII碼新荤,漢字也可以揽趾。

  • 下列Java代碼中的變量a、b苛骨、c分別在內(nèi)存的____存儲區(qū)存放篱瞎。(C)

class A {
private String a = “aa”;
public boolean methodB() {
String b = “bb”;
final String c = “cc”;
}
}

A.堆區(qū)、堆區(qū)痒芝、堆區(qū)
B.堆區(qū)俐筋、棧區(qū)、堆區(qū)
C.堆區(qū)严衬、棧區(qū)澄者、棧區(qū)
D.堆區(qū)、堆區(qū)请琳、棧區(qū)
E.靜態(tài)區(qū)粱挡、棧區(qū)、堆區(qū)
F.靜態(tài)區(qū)俄精、棧區(qū)询筏、棧區(qū)
解析:
a是類中的成員變量,存放在堆區(qū)
b竖慧、c都是方法中的局部變量嫌套,存放在棧區(qū)
堆區(qū):只存放類對象,線程共享圾旨;
方法區(qū):又叫靜態(tài)存儲區(qū)踱讨,存放class文件和靜態(tài)數(shù)據(jù),線程共享;
棧區(qū):存放方法局部變量碳胳,基本類型變量區(qū)勇蝙、執(zhí)行環(huán)境上下文、操作指令區(qū),線程不共享;

  • 在Java語言中味混,下列關(guān)于字符集編碼(Character set encoding)和國際化(i18n)的問題产雹,哪些是正確的?(CD)

A.每個中文字符占用2個字節(jié)翁锡,每個英文字符占用1個字節(jié)
B.假設(shè)數(shù)據(jù)庫中的字符是以GBK編碼的蔓挖,那么顯示數(shù)據(jù)庫數(shù)據(jù)的網(wǎng)頁也必須是GBK編碼的。
C.Java的char類型馆衔,通常以UTF-16 Big Endian的方式保存一個字符瘟判。
D.實現(xiàn)國際化應(yīng)用常用的手段是利用ResourceBundle類

解析:
A 顯然是錯誤的,Java一律采用Unicode編碼方式角溃,每個字符無論中文還是英文字符都占用2個字節(jié)拷获。
B 也是不正確的,不同的編碼之間是可以轉(zhuǎn)換的减细,通常流程如下:
將字符串S以其自身編碼方式分解為字節(jié)數(shù)組匆瓜,再將字節(jié)數(shù)組以你想要輸出的編碼方式重新編碼為字符串。
例:String newUTF8Str = new String(oldGBKStr.getBytes("GBK"), "UTF8");
C 是正確的未蝌。Java虛擬機中通常使用UTF-16的方式保存一個字符
D 也是正確的驮吱。ResourceBundle能夠依據(jù)Local的不同,選擇性的讀取與Local對應(yīng)后綴的properties文件萧吠,以達到國際化的目的左冬。

  • 類中聲明的變量有默認初始值;方法中聲明的變量沒有默認初始值纸型,必須在定義時初始化拇砰,否則在訪問該變量時會出錯。

boolean類型默認值是false

  • 結(jié)果是(B)

public class Example{
String str = new String("good");
char[] chs = {'a','b','c'};
public static void main(String[] args) //4
{
Example ex = new Example(); ex.change(ex.str, ex.chs);
System.out.print(ex.str+" and ");
System.out.print(ex.chs);
}
public void change(String str, char[] chs){
str= "test ok";
chs[0] = 'g';
}
}

A.good and abc
B.good and gbc
C.test ok and abc
D.test ok and gbc
解析:
首先明確 這里str和數(shù)組都是對象都是引用傳遞
狰腌,首先得清楚類中的str和change方法中的str都是指向堆中的new String("
good"
)對象毕匀,但是它們不是同一個東西,類似于指向同一個對象的不同的指針癌别。首先str="test ok"
使得change()中的str指向"test ok"這個常量字符串(也可以說這個字符串對象),根本的原因就是
由于java字符串對象是不能修改的蹋笼,無法像數(shù)組一樣可以在原來的地址上對數(shù)組的值進行修改展姐。
但是原來的類中的str指向的還是
new String("
good"
)這個對象,chs[0] = 'g'剖毯,把原來chs[0]中的'a'改為'g'圾笨。
所以就會出現(xiàn)上面的結(jié)果

  • 以下關(guān)于final關(guān)鍵字說法錯誤的是(AC)

A.final是java中的修飾符,可以修飾類逊谋、接口擂达、抽象類、方法和屬性
B.final修飾的類肯定不能被繼承
C.final修飾的方法不能被重載
D.final修飾的變量不允許被再次賦值

解析:
final修飾類胶滋、方法板鬓、屬性悲敷!不能修飾抽象類,因為抽象類一般都是需要被繼承的俭令,final修飾后就不能繼承了后德。
final修飾的方法不能被重寫而不是重載!
final修飾屬性抄腔,此屬性就是一個常量瓢湃,不能被再次賦值!

  • 關(guān)于sleep()和wait()赫蛇,以下描述錯誤的一項是( D)

A.sleep是線程類(Thread)的方法绵患,wait是Object類的方法;
B.sleep不釋放對象鎖悟耘,wait放棄對象鎖
C.sleep暫停線程落蝙、但監(jiān)控狀態(tài)仍然保持,結(jié)束后會自動恢復
D.wait后進入等待鎖定池作煌,只有針對此對象發(fā)出notify方法后獲得對象鎖進入運行狀態(tài)

解析:
Java中的多線程是一種搶占式的機制掘殴,而不是分時機制。搶占式的機制是有多個線程處于可運行狀態(tài)粟誓,但是只有一個線程在運行奏寨。
共同點 :

  1. 他們都是在多線程的環(huán)境下,都可以在程序的調(diào)用處阻塞指定的毫秒數(shù)鹰服,并返回病瞳。
  2. wait()和sleep()都可以通過interrupt()方法 打斷線程的暫停狀態(tài) ,從而使線程立刻拋出InterruptedException悲酷。
    如果線程A希望立即結(jié)束線程B套菜,則可以對線程B對應(yīng)的Thread實例調(diào)用interrupt方法。如果此刻線程B正在wait/sleep/join设易,則線程B會立刻拋出InterruptedException逗柴,在catch() {} 中直接return即可安全地結(jié)束線程。
    需要注意的是顿肺,InterruptedException是線程自己從內(nèi)部拋出的戏溺,并不是interrupt()方法拋出的。對某一線程調(diào)用 interrupt()時屠尊,如果該線程正在執(zhí)行普通的代碼旷祸,那么該線程根本就不會拋出InterruptedException。但是讼昆,一旦該線程進入到 wait()/sleep()/join()后托享,就會立刻拋出InterruptedException 。
    不同點 :
    1.每個對象都有一個鎖來控制同步訪問。Synchronized關(guān)鍵字可以和對象的鎖交互闰围,來實現(xiàn)線程的同步赃绊。
    sleep方法沒有釋放鎖,而wait方法釋放了鎖辫诅,使得其他線程可以使用同步控制塊或者方法凭戴。
    2.wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用炕矮,而sleep可以在任何地方使用
    3.sleep必須捕獲異常么夫,而wait,notify和notifyAll不需要捕獲異常
    4.sleep是線程類(Thread)的方法肤视,導致此線程暫停執(zhí)行指定時間档痪,給執(zhí)行機會給其他線程,但是監(jiān)控狀態(tài)依然保持邢滑,到時后會自動恢復腐螟。調(diào)用sleep不會釋放對象鎖。
    5.wait是Object類的方法困后,對此對象調(diào)用wait方法導致本線程放棄對象鎖乐纸,進入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態(tài)摇予。
  • 下面這三條語句

System.out.println(“is ”+ 100 + 5)汽绢;
System.out.println(100 + 5 +“ is”);
System.out.println(“is ”+ (100 + 5))侧戴;
的輸出結(jié)果分別是宁昭? ( D)

A.is 1005, 1005 is, is 1005
B.is 105, 105 is, is 105
C.is 1005, 1005 is, is 105
D.is 1005, 105 is, is 105

解析:
1."is"說明后面的內(nèi)容都會被強制轉(zhuǎn)換為string,所以是最后結(jié)果是拼接起來的
2.100+5先得到105酗宋,然后與is拼接
3.先算括號內(nèi)的

  • 以下關(guān)于集合類 ArrayList 积仗、 LinkedList 、 HashMap 描述錯誤的是:(C)

A.HashMap實現(xiàn)Map接口蜕猫,它允許任何類型的鍵和值對象寂曹,并允許將null用作鍵或值
B.ArrayList和LinkedList均實現(xiàn)了List接口
C.添加和刪除元素時,ArrayList的表現(xiàn)更佳
D.ArrayList的訪問速度比LinkedList快

解析:
Hashtable不允許 null 值(key 和 value 都不可以)回右,HashMap允許 null 值(key和value都可以)稀颁。 ArrayList和LinkedList均實現(xiàn)了List接口
ArrayList基于數(shù)組實現(xiàn),隨機訪問更快
LinkedList基于鏈表實現(xiàn)楣黍,添加和刪除更快

  • 以下代碼結(jié)果是什么?(C)

public class foo {
public static void main(String sgf[]) {
StringBuffer a=new StringBuffer(“A”);
StringBuffer b=new StringBuffer(“B”);
operate(a,b);
System.out.println(a+”.”+b);
}
static void operate(StringBuffer x,StringBuffer y) {
x.append(y);
y=x;
}
}

A.代碼可以編譯運行棱烂,輸出“AB.AB”租漂。
B.代碼可以編譯運行泳姐,輸出“A.A”沮焕。
C.代碼可以編譯運行,輸出“AB.B”。
D.代碼可以編譯運行兔毒,輸出“A.B”。

解析:
這里簡單地說,a,b,x,y就是四個指針姨俩。y本來指向的是b所指向的對象匆赃,但是一個“=”,y就指向了x所指向的目標即是a指向的對象蒜胖,因此原來b所指向的目標并沒有發(fā)生任何改變消别。與y不同的是,x進行的是對象操作,此時此對象在內(nèi)存中是真正的本質(zhì)上的改變台谢。有點繞寻狂,但是手機打字,沒發(fā)畫圖朋沮,不然其實很容易理解蛇券。

  • Java類Demo中存在方法func0、func1樊拓、func2纠亚、func3和func4,請問該方法中筋夏,哪些是不合法的定義蒂胞?( AD)

public class Demo{
  float func0()
  {
    byte i=1;
    return i;
  }
  float func1()
  {
    int i=1;
    return;
  }
  float func2()
  {
    short i=2;
    return i;
  }
  float func3()
  {
    long i=3;
    return i;
  }
  float func4()
  {
    double i=4;
    return i;
  }
}
A.func1
B.func2
C.func3
D.func4

解析:
數(shù)據(jù)類型的轉(zhuǎn)換,分為自動轉(zhuǎn)換和強制轉(zhuǎn)換叁丧。自動轉(zhuǎn)換是程序在執(zhí)行過程中 “ 悄然 ” 進行的轉(zhuǎn)換啤誊,不需要用戶提前聲明,一般是從位數(shù)低的類型向位數(shù)高的類型轉(zhuǎn)換拥娄;強制類型轉(zhuǎn)換則必須在代碼中聲明蚊锹,轉(zhuǎn)換順序不受限制。
自動數(shù)據(jù)類型轉(zhuǎn)換
自動轉(zhuǎn)換按從低到高的順序轉(zhuǎn)換稚瘾。不同類型數(shù)據(jù)間的優(yōu)先關(guān)系如下:
低 ---------------------------------------------> 高
byte,short,char-> int -> long -> float -> double
運算中牡昆,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進行運算摊欠,轉(zhuǎn)換規(guī)則如
下:

操作數(shù) 1 類型 操作數(shù) 2 類型 轉(zhuǎn)換后的類型
byte 丢烘、 short 、 char int int
byte 些椒、 short 播瞳、 char 、 int long long
byte 免糕、 short 赢乓、 char 忧侧、 int 、 long float float
byte 牌芋、 short 蚓炬、 char 、 int 躺屁、 long 肯夏、 float double double

強制數(shù)據(jù)類型轉(zhuǎn)換
強制轉(zhuǎn)換的格式是在需要轉(zhuǎn)型的數(shù)據(jù)前加上 “( )” ,然后在括號內(nèi)加入需要轉(zhuǎn)化的數(shù)據(jù)類型犀暑。有的數(shù)據(jù)經(jīng)過轉(zhuǎn)型運算后驯击,精度會丟失,而有的會更加精確

  • 對于同一類中的兩個方法 , 在判斷它們是不是重載方法時 , 不考慮(C)

A.參數(shù)個數(shù)
B.參數(shù)類型
C.返回值類型
D.參數(shù)順序

解析:
重載:類中可以創(chuàng)建多個方法母怜,它們具有相同的名字余耽,但具 有不同的參數(shù)和不同的定義。調(diào)用方法時通過傳遞 給它們的不同參數(shù)個數(shù)和參數(shù)類型 給它們的不同參數(shù)個數(shù)和參數(shù)類型 給它們的不同參數(shù)個數(shù)和參數(shù)類型 來決定具體使用哪個方法 , 這就是多態(tài)性苹熏。
重寫 Overriding 是父類與子類之間多態(tài)性的一種表現(xiàn)碟贾, 在子類中定義某方法與其父類有相同的名稱和參數(shù)。
重載 Overloading 是一個類中多態(tài)性 的一種表現(xiàn)轨域。
重載的時候袱耽,方法名要一樣,但是參數(shù)類型和個數(shù)不一樣干发,返回值類型可以相同 也可以不相同朱巨。 無法以 返回型別 作為重載函數(shù)的區(qū)分標準。而且編譯的時候只有返回值不同枉长,會報錯冀续。及使不報錯,運行時無法區(qū)分調(diào)用哪個方法

  • 在使用super 和this關(guān)鍵字時必峰,以下描述正確的是(A)

A.在子類構(gòu)造方法中使用super()顯示調(diào)用父類的構(gòu)造方法洪唐,super()必須寫在子類構(gòu)造方法的第一行,否則編譯不通過
B.super()和this()不一定要放在構(gòu)造方法內(nèi)第一行
C.this()和super()可以同時出現(xiàn)在一個構(gòu)造函數(shù)中
D.this()和super()可以在static環(huán)境中使用吼蚁,包括static方法和static語句塊

解析:
使用super()或者this()方法是必須放在構(gòu)造函數(shù)的第一行
由于this函數(shù)指向的構(gòu)造函數(shù)默認有super()方法凭需,所以規(guī)定this()和super()不能同時出現(xiàn)在一個構(gòu)造函數(shù)中。
因為staic方法或者語句塊沒有實例時可以使用肝匆,而此時不需要構(gòu)造實例粒蜈,所以不能用this()和super()

  • 下面代碼的輸出是什么?(A)

Paste_Image.png

A.null
B.sub
C. base

解析:
new Sub();在創(chuàng)造派生類的過程中首先創(chuàng)建基類對象旗国,然后才能創(chuàng)建派生類枯怖。
創(chuàng)建基類即默認調(diào)用Base()方法,在方法中調(diào)用callName()方法能曾,由于派生類中存在此方法嫁怀,則被調(diào)用的callName()方法是派生類中的方法设捐,此時派生類還未構(gòu)造,所以變量baseName的值為null

  • 權(quán)限表

Paste_Image.png
  • 下面程序的輸出結(jié)果是塘淑?(D)

Paste_Image.png

A.出錯
B.342
C.34234
D.3423

解析:
1、try中沒有拋出異常蚂斤,則catch語句不執(zhí)行存捺,如果有finally語句,則接著執(zhí)行finally語句曙蒸,繼而接著執(zhí)行finally之后的語句捌治;
2、try中拋出異常纽窟,有匹配的catch語句肖油,則catch語句捕獲,如果catch中有return語句臂港,則要在finally執(zhí)行后再執(zhí)行森枪;

  • Where statement is true(A)

void waitForSignal()
{
Object obj = new Object();
synchronized(Thread.currentThread())
{
obj.wait();
obj.notify();
}
}

A.This code may throw an InterruptedException
B.This code may throw an IllegalStateException
C.This code may throw a TimeOutException after ten minutes
D.This code will not compile unless”obj.wait()”is replaced with”(Thread)obj).wait()”
E.Reversing the order of obj.wait()and obj.notify()may cause this method to complete normally

解析:
第一,記住wait必須要進行異常捕獲
第二审孽,記住調(diào)用wait或者notify方法必須采用當前鎖調(diào)用县袱,即必須采用synchronized中的對象
void waitForSignal() {
Object obj = new Object();
synchronized (obj) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
obj.notify();
}
}

  • 下列 java 程序輸出結(jié)果為______。(B)

int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));

A.true,false
B.true,true
C.false,true
D.false,false
E.對于不同的環(huán)境結(jié)果不同
G.程序無法執(zhí)行

解析:
本題是一個自動拆裝箱的考題(自動拆裝箱JDK需在1.5上)
1佑力、基本型和基本型封裝型進行“==”運算符的比較式散,基本型封裝型將會自動拆箱變?yōu)榛拘秃笤龠M行比較,因此Integer(0)會自動拆箱為int類型再進行比較打颤,顯然返回true暴拄;
2、兩個Integer類型進行“==”比較编饺,如果其值在-128至127乖篷,那么返回true,否則返回false, 這跟Integer.valueOf()的緩沖對象有關(guān)反肋,這里不進行贅述那伐。
3、兩個基本型的封裝型進行equals()比較石蔗,首先equals()會比較類型罕邀,如果類型相同,則繼續(xù)比較值养距,如果值也相同诉探,返回true
4、基本型封裝類型調(diào)用equals(),但是參數(shù)是基本類型棍厌,這時候肾胯,先會進行自動裝箱竖席,基本型轉(zhuǎn)換為其封裝類型,再進行3中的比較敬肚。

  • Given the following code:

public class Test {
private static int j = 0;

private static Boolean methodB(int k) {
    j += k;
    return true;
}

public static void methodA(int i) {
    boolean b;
    b = i < 10 | methodB(4);
    b = i < 10 || methodB(8);

}

public static void main(String args[]) {
    methodA(0);
    System.out.println(j);
}

}

What is the result?(B)
A.The program prints”0”
B.The program prints”4”
C.The program prints”8”
D.The program prints”12”
E.The code does not complete.

  • 觀察下面的代碼

class A {}
class B extends A {}
class C extends A {}
class D extends B {}
Which four statements are true ?(A C D G)

A.The type List<A>is assignable to List.
B.The type List<B>is assignable to List<A>.
C.The type List<Object>is assignable to List<?>.
D.The type List<D>is assignable to List<?extends B>.
E.The type List<?extends A>is assignable to List<A>.
F.The type List<Object>is assignable to any List reference.
G.The type List<?extends B>is assignable to List<?extends A>.

解析:

  1. 只看尖括號里邊的1霞觥!明確點和范圍兩個概念
  2. 如果尖括號里的是一個類艳馒,那么尖括號里的就是一個點憎亚,比如List<A>,List<B>,List<Object>
  3. 如果尖括號里面帶有問號,那么代表一個范圍弄慰,<? extends A> 代表小于等于A的范圍第美,<? super A>代表大于等于A的范圍,<?>代表全部范圍
  4. 尖括號里的所有點之間互相賦值都是錯陆爽,除非是倆相同的點
  5. 尖括號小范圍賦值給大范圍什往,對,大范圍賦值給小范圍慌闭,錯别威。如果某點包含在某個范圍里,那么可以賦值贡必,否則兔港,不能賦值
  6. List<?>和List 是相等的,都代表最大范圍

7.補充:List既是點也是范圍仔拟,當表示范圍時衫樊,表示最大范圍

public static void main(String[] args) {
List<A> a;
List list;
list = a; //A對,因為List就是List<?>利花,代表最大的范圍科侈,A只是其中的一個點,肯定被包含在內(nèi)
List<B> b;
a = b; //B錯炒事,點之間不能相互賦值
List<?> qm;
List<Object> o;
qm = o; //C對臀栈,List<?>代表最大的范圍,List<Object>只是一個點挠乳,肯定被包含在內(nèi)
List<D> d;
List<? extends B> downB;
downB = d; //D對权薯,List<? extends B>代表小于等于B的范圍,List<D>是一個點睡扬,在其中
List<?extends A> downA;
a = downA; //E錯盟蚣,范圍不能賦值給點
a = o; //F錯,List<Object>只是一個點
downA = downB; //G對卖怜,小于等于A的范圍包含小于等于B的范圍屎开,因為B本來就比A小,B時A的子類嘛
}

  • if(x=y)會報錯的

解析:
C語言中
當if語句中的條件為賦值語句時马靠,實際上是將賦值后的結(jié)果與0進行比較
if(1) 由于1>0 所以認為是true
java語言中奄抽,雖然也用了左值蔼两,但是不再與0比較,而是直接將0放入if()中
但是int類型逞度,不能轉(zhuǎn)換為boolean额划,所以會報錯

  • ava中關(guān)于繼承的描述正確的是(ACD)

A.一個子類只能繼承一個父類
B.子類可以繼承父類的構(gòu)造方法
C.繼承具有傳遞性
D.父類一般具有通用性,子類更具體

解析:
在java中档泽,子類構(gòu)造器會默認調(diào)用super()(無論構(gòu)造器中是否寫有super()),用于初始化父類成員锁孟,同時當父類中存在有參構(gòu)造器時,必須提供無參構(gòu)造器茁瘦,子類構(gòu)造器中并不會自動繼承有參構(gòu)造器,仍然默認調(diào)用super()储笑,使用無參構(gòu)造器甜熔。因此,一個類想要被繼承必須提供無參構(gòu)造器突倍。
PS:方法沒有繼承一說腔稀,只有重載和重寫

  • 下面哪些賦值語句是正確的(ABD)

A.long test=012
B.float f=-412
C.int other =(int)true
D.double d=0x12345678
E.byte b=128

解析:
A和B中l(wèi)ong和float,正常定義需要加l和f羽历,但是long和float屬于基本類型焊虏,會進行轉(zhuǎn)化,所以不會報出異常秕磷。AB正確
boolean類型不能和任何類型進行轉(zhuǎn)換诵闭,會報出類型異常錯誤。所以C錯澎嚣。
D選項可以這樣定義疏尿,D正確。
E選項中易桃,byte的取值范圍是-128—127褥琐。報出異常: cannot convert from int to byte.所以E選項錯誤。
A:012默認是int類型晤郑,賦給long類型沒錯敌呈。 正確
B:-412默認也是int類型,賦給float沒錯造寝。 正確
C:很明顯布爾類型不能強轉(zhuǎn)成其他數(shù)值類型磕洪。 錯誤
D:0x12345678默認應(yīng)該是int類型,賦給double沒錯匹舞。 正確
E:128 > 127默認是int類型褐鸥,byte默認范圍是(-128 ~ 127)。錯誤

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赐稽,一起剝皮案震驚了整個濱河市叫榕,隨后出現(xiàn)的幾起案子浑侥,更是在濱河造成了極大的恐慌,老刑警劉巖晰绎,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寓落,死亡現(xiàn)場離奇詭異,居然都是意外死亡荞下,警方通過查閱死者的電腦和手機伶选,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尖昏,“玉大人仰税,你說我怎么就攤上這事〕樗撸” “怎么了陨簇?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迹淌。 經(jīng)常有香客問我河绽,道長,這世上最難降的妖魔是什么唉窃? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任耙饰,我火速辦了婚禮,結(jié)果婚禮上纹份,老公的妹妹穿的比我還像新娘苟跪。我一直安慰自己,他們只是感情好矮嫉,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布削咆。 她就那樣靜靜地躺著,像睡著了一般蠢笋。 火紅的嫁衣襯著肌膚如雪拨齐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天昨寞,我揣著相機與錄音瞻惋,去河邊找鬼。 笑死援岩,一個胖子當著我的面吹牛歼狼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播享怀,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼羽峰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梅屉,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤值纱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坯汤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虐唠,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年惰聂,在試婚紗的時候發(fā)現(xiàn)自己被綠了疆偿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡搓幌,死狀恐怖杆故,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溉愁,我是刑警寧澤反番,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站叉钥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏篙贸。R本人自食惡果不足惜投队,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爵川。 院中可真熱鬧敷鸦,春花似錦、人聲如沸寝贡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圃泡。三九已至碟案,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颇蜡,已是汗流浹背价说。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留风秤,地道東北人鳖目。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像缤弦,于是被迫代替她去往敵國和親领迈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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