一、 Java Application 中的主類需包含main方法,以下哪項(xiàng)是main方法的正確形參臀蛛?( )
A.String args
B.String[] args
C.Char arg
D.StringBuffer[] args
答案:B
解析:
- main函數(shù)的形式為 public static void main(String[] args)
- String[] args 還有一種等價(jià)的寫法: String... args
1.前者為數(shù)組形式, 后者為可變參數(shù)形式刊殉。
2.前者用得較多, 但是看到后者也應(yīng)認(rèn)識(shí)。
二炮车、 java socket如何獲取本地ip地址舵变?
A.getInetAddress()
B.getLocalAddress()
C.getReuseAddress()
D.getLocalPort()
答案:B
解析:
三、下面代碼運(yùn)行結(jié)果是()
public class Test{
public int add(int a,int b){
try {
return a+b;
}
catch (Exception e) {
System.out.println("catch語(yǔ)句塊");
}
finally{
System.out.println("finally語(yǔ)句塊");
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println("和是:"+test.add(9, 34));
}
}
A.catch語(yǔ)句塊;和是:43
B.編譯異常
C.finally語(yǔ)句塊;和是:43
D.和是:43;finally語(yǔ)句塊
答案:C
解析:
先來看一段代碼:
public abstract class Test {
public static void main(String[] args) {
System.out.println(beforeFinally());
}
public static int beforeFinally(){
int a = 0;
try{
a = 1;
return a;
}finally{
a = 2;
}
}
}
- 從結(jié)果上看瘦穆,貌似
finally
里的語(yǔ)句是在return
之后執(zhí)行的纪隙,其實(shí)不然,實(shí)際上finally
里的語(yǔ)句是在在return
之前執(zhí)行的扛或。那么問題來了瘫拣,既然是在之前執(zhí)行,那為什么a
的值沒有被覆蓋了告喊? - 實(shí)際過程是這樣的:當(dāng)程序執(zhí)行到try{}語(yǔ)句中的return方法時(shí)麸拄,它會(huì)干這么一件事,將要返回的結(jié)果存儲(chǔ)到一個(gè)臨時(shí)棧中黔姜,然后程序不會(huì)立即返回拢切,而是去執(zhí)行finally{}中的程序, 在執(zhí)行
a = 2
時(shí)秆吵,程序僅僅是覆蓋了a的值淮椰,但不會(huì)去更新臨時(shí)棧中的那個(gè)要返回的值 。執(zhí)行完之后,就會(huì)通知主程序“finally的程序執(zhí)行完畢主穗,可以請(qǐng)求返回了”泻拦,這時(shí),就會(huì)將臨時(shí)棧中的值取出來返回忽媒。這下應(yīng)該清楚了争拐,要返回的值是保存至臨時(shí)棧中的。
再來看一個(gè)例子,稍微改下上面的程序:
public abstract class Test {
public static void main(String[] args) {
System.out.println(beforeFinally());
}
public static int beforeFinally(){
int a = 0;
try{
a = 1;
return a;
}finally{
a = 2;
return a;
}
}
}
- 在這里晦雨,finally{}里也有一個(gè)return架曹,那么在執(zhí)行這個(gè)return時(shí),就會(huì)更新臨時(shí)棧中的值闹瞧。同樣绑雄,在執(zhí)行完finally之后,就會(huì)通知主程序請(qǐng)求返回了奥邮,即將臨時(shí)棧中的值取出來返回万牺。故返回值是2.
結(jié)論:
finally{}代碼塊比return先執(zhí)行。
多個(gè)return是按順序執(zhí)行的的洽腺,多個(gè)return執(zhí)行了一個(gè)后脚粟,后面的return就不會(huì)執(zhí)行了。
記住一點(diǎn)已脓,不管有不有異常拋出珊楼,finally都會(huì)在return返回前執(zhí)行。
四度液、在基本JAVA類型中厕宗,如果不明確指定,整數(shù)型的默認(rèn)是什么類型堕担?帶小數(shù)的默認(rèn)是什么類型已慢?
int double
解析:
-
整數(shù)類型 默認(rèn)為 int
帶小數(shù)的默認(rèn)為double - 如果要指定長(zhǎng)整型加L;如果要指定為單精度加F
五霹购、關(guān)于PreparedStatement與Statement描述錯(cuò)誤的是()
A.一般而言佑惠,PreparedStatement比Statement執(zhí)行效率更高
B.PreparedStatement會(huì)預(yù)編譯SQL語(yǔ)句
C.Statement每次都會(huì)解析/編譯SQL,確立并優(yōu)化數(shù)據(jù)獲取路徑
D.Statement執(zhí)行掃描的結(jié)果集比PreparedStatement大
答案:D
解析(一):
創(chuàng)建時(shí)的區(qū)別:
Statement statement = conn.createStatement();
PreparedStatement preStatement = conn.prepareStatement(sql);
執(zhí)行的時(shí)候:
ResultSet rSet = statement.executeQuery(sql);
ResultSet pSet = preStatement.executeQuery();
由上可以看出齐疙,PreparedStatement有預(yù)編譯的過程膜楷,已經(jīng)綁定sql,之后無(wú)論執(zhí)行多少遍贞奋,都不會(huì)再去進(jìn)行編譯赌厅,
而 statement 不同,如果執(zhí)行多遍轿塔,則相應(yīng)的就要編譯多少遍sql特愿,所以從這點(diǎn)看仲墨,PreparedStatement 的效率會(huì)比 Statement要高一些
解析(二):
Statement 和 PreparedStatement 有什么區(qū)別?哪個(gè)性能更好揍障?
與 Statement 相比目养,
①PreparedStatement 接口代表預(yù)編譯的語(yǔ)句,它主要的優(yōu)勢(shì)在于可
以減少 SQL 的編譯錯(cuò)誤并增加 SQL 的安全性(減少 SQL 注射攻擊的可能性)毒嫡;
②PreparedStatement 中的 SQL 語(yǔ)句是可以帶參數(shù)的癌蚁,避免了用字符串連接拼接 SQL 語(yǔ)句的麻煩和不安全;
③當(dāng)批量處理 SQL 或頻繁執(zhí)行相同的查詢時(shí)审胚,PreparedStatement 有明顯的性能上的優(yōu)勢(shì)匈勋,由于數(shù)據(jù)庫(kù)可以將編譯優(yōu)化后的 SQL 語(yǔ)句緩存起來礼旅,下次執(zhí)行相同結(jié)構(gòu)的語(yǔ)句時(shí)就會(huì)很快(不用再次編譯和生成執(zhí)行計(jì)劃)膳叨。
補(bǔ)充:
①為了提供對(duì)存儲(chǔ)過程的調(diào)用,JDBC API 中還提供了 CallableStatement 接口痘系。
②存儲(chǔ)過程(Stored Procedure)是數(shù)據(jù)庫(kù)中一組為了完成特定功能的 SQL 語(yǔ)句的集合菲嘴,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來執(zhí)行它汰翠。
③雖然調(diào)用存儲(chǔ)過程會(huì)在網(wǎng)絡(luò)開銷龄坪、安全性、性能上獲得很多好處复唤,但是存在如果底層數(shù)據(jù)庫(kù)發(fā)生遷移時(shí)就會(huì)有很多麻煩健田,因?yàn)槊糠N數(shù)據(jù)庫(kù)的存儲(chǔ)過程在書寫上存在不少的差別
六、 Java 多線程有幾種實(shí)現(xiàn)方法佛纫?( )
繼承Thread類妓局; 實(shí)現(xiàn)Runnable接口; 實(shí)現(xiàn)Callable接口
七呈宇、int好爬,String,*point甥啄,union哪些不是 Java 的數(shù)據(jù)類型存炮?(不定項(xiàng))
A.int
B.String
C.*point
D.union
答案:C D
解析:
- 題目是說數(shù)據(jù)類型,并沒有說基本數(shù)據(jù)類型蜈漓,所有包括了引用數(shù)據(jù)類型穆桂,String為字符串類,屬于引用數(shù)據(jù)類型
八融虽、java中關(guān)于繼承的描述正確的是()享完?(不定項(xiàng))
A.一個(gè)子類只能繼承一個(gè)父類
B.子類可以繼承父類的構(gòu)造方法
C.繼承具有傳遞性
D.父類一般具有通用性,子類更具體
答案: A C D
解析:
在java中衣形,子類構(gòu)造器會(huì)默認(rèn)調(diào)用super()(無(wú)論構(gòu)造器中是否寫有super()),用于初始化父類成員驼侠,同時(shí)當(dāng)父類中存在有參構(gòu)造器時(shí)姿鸿,必須提供無(wú)參構(gòu)造器,子類構(gòu)造器中并不會(huì)自動(dòng)繼承有參構(gòu)造器倒源,仍然默認(rèn)調(diào)用super()苛预,使用無(wú)參構(gòu)造器。因此笋熬,一個(gè)類想要被繼承必須提供無(wú)參構(gòu)造器热某。
PS:方法沒有繼承一說,只有重載和重寫
九胳螟、下面哪些寫法能在 java8 中編譯執(zhí)行()(不定項(xiàng))
A.
dir.listFiles((File f)->f.getName().endsWith(“.Java”));
B.dir.listFiles((File f)=>f.getName().endsWith(“.Java”));
C.dir.listFiles((_.getName().endsWith(“.Java”)));
D.dir.listFiles( f->f.getName().endsWith(“.Java”));
答案:A D
解析:
Lanbda表達(dá)式的主要作用就是代替匿名內(nèi)部類的繁瑣語(yǔ)法昔馋, 它由三部分組成:
- 形參列表。
- 箭頭(→)糖耸。必須通過英文中畫線和大于符號(hào)組成秘遏。
- 代碼塊。
Lanbda表達(dá)式簡(jiǎn)單實(shí)例:
十嘉竟、下面哪些類可以被繼承邦危? Java.lang.Thread、java.lang.Number舍扰、java.lang.Double倦蚪、java.lang.Math、 java.lang.ClassLoader(不定項(xiàng))
A.
Thread
B.Number
C.Double
D.Math
E.ClassLoader
答案: A B E
解析:
- A.Thread可以被繼承边苹,用于創(chuàng)建新的線程
- B.Number類可以被繼承陵且,Integer,F(xiàn)loat个束,Double等都繼承自Number類
-
C.Double類的聲明為 Double類
-
D.Math類的聲明為Math類
final聲明的類不能被繼承
- E.ClassLoader可以被繼承慕购,用戶可以自定義類加載器