-
在基本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
解析:
-
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)粟誓,但是只有一個線程在運行奏寨。
共同點 :
- 他們都是在多線程的環(huán)境下,都可以在程序的調(diào)用處阻塞指定的毫秒數(shù)鹰服,并返回病瞳。
- 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)
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)限表
-
下面程序的輸出結(jié)果是塘淑?(D)
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霞觥!明確點和范圍兩個概念
- 如果尖括號里的是一個類艳馒,那么尖括號里的就是一個點憎亚,比如List<A>,List<B>,List<Object>
- 如果尖括號里面帶有問號,那么代表一個范圍弄慰,<? extends A> 代表小于等于A的范圍第美,<? super A>代表大于等于A的范圍,<?>代表全部范圍
- 尖括號里的所有點之間互相賦值都是錯陆爽,除非是倆相同的點
- 尖括號小范圍賦值給大范圍什往,對,大范圍賦值給小范圍慌闭,錯别威。如果某點包含在某個范圍里,那么可以賦值贡必,否則兔港,不能賦值
- 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)。錯誤