1.在try的括號(hào)里面有return一個(gè)值电爹,那在哪里執(zhí)行finally里的代碼?
正確答案: B 你的答案: A (錯(cuò)誤)
不執(zhí)行finally代碼
return前執(zhí)行
return后執(zhí)行
每一本Java書(shū)都有講過(guò)哀卫【薹唬“假設(shè)利用 return 語(yǔ)句從 try 語(yǔ)句塊中退出。在方法返回前此改,finally子句的內(nèi)容將被執(zhí)行趾撵。如果 finally 子句中也有一個(gè) return 語(yǔ)句,這個(gè)返回值將會(huì)覆蓋原始的返回值共啃≌嫉鳎”
finally 語(yǔ)句塊是在 try 或者 catch 中的 return 語(yǔ)句之前執(zhí)行的。更加一般的說(shuō)法是移剪,finally 語(yǔ)句塊應(yīng)該是在控制轉(zhuǎn)移語(yǔ)句之前執(zhí)行究珊,控制轉(zhuǎn)移語(yǔ)句除了 return 外,還有 break 和 continue挂滓。另外苦银,throw 語(yǔ)句也屬于控制轉(zhuǎn)移語(yǔ)句。雖然 return赶站、throw、break 和 continue 都是控制轉(zhuǎn)移語(yǔ)句纺念,但是它們之間是有區(qū)別的贝椿。其中 return 和 throw 把程序控制權(quán)轉(zhuǎn)交給它們的調(diào)用者(invoker),而 break 和 continue 的控制權(quán)是在當(dāng)前方法內(nèi)轉(zhuǎn)移
https://www.ibm.com/developerworks/cn/java/j-lo-finally/
是關(guān)于 try return finally 的詳細(xì)解釋文檔,很有說(shuō)服力陷谱。
錯(cuò)題
清單 6.
public class Test {
public static void main(String[] args) {
System.out.println("return value of getValue(): " + getValue());
}
public static int getValue() {
int i = 1;
try {
return i;
} finally {
i++;
}
}
}
清單 6 的執(zhí)行結(jié)果:
1
return value of getValue(): 1
在 finally 語(yǔ)句塊(iinc 0, 1)執(zhí)行之前烙博,getValue()方法保存了其返回值(1)到本地表量表中 1 的位置,完成這個(gè)任務(wù)的指令是 istore_1烟逊;然后執(zhí)行 finally 語(yǔ)句塊(iinc 0, 1)渣窜,finally 語(yǔ)句塊把位于 0 這個(gè)位置的本地變量表中的值加 1,變成 2宪躯;待 finally 語(yǔ)句塊執(zhí)行完畢之后乔宿,把本地表量表中 1 的位置上值恢復(fù)到操作數(shù)棧(iload_1),最后執(zhí)行 ireturn 指令把當(dāng)前操作數(shù)棧中的值(1)返回給其調(diào)用者(main)访雪。這就是為什么清單 6 的執(zhí)行結(jié)果是 1详瑞,而不是 2 的原因。
清單 9.
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
public static String test() {
try {
System.out.println("try block");
return test1();
} finally {
System.out.println("finally block");
}
}
public static String test1() {
System.out.println("return statement");
return "after return";
}
}
清單 9 的結(jié)果:
try block
return statement
finally block
after return
因?yàn)閞eturn test1();這條語(yǔ)句等同于 :
String tmp = test1();
return tmp;
2.復(fù)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)和socket通信
Java Socket編程----通信是這樣煉成的
3.以下關(guān)于final關(guān)鍵字說(shuō)法錯(cuò)誤的是(A,C)(兩項(xiàng))
A) final是java中的修飾符臣缀,可以修飾類(lèi)坝橡、接口、抽象類(lèi)精置、方法和屬性
B) final修飾的類(lèi)肯定不能被繼承
C) final修飾的方法不能被重載
D) final修飾的變量不允許被再次賦值
final修飾的方法可以被重載 但不能被重寫(xiě)
java中使用final關(guān)鍵字修飾一個(gè)變量時(shí)计寇,是引用不能變,還是引用的對(duì)象不能變?
是引用對(duì)象的地址值不能變番宁,引用變量所指向的對(duì)象的內(nèi)容是可以改變元莫。
final變量永遠(yuǎn)指向這個(gè)對(duì)象,是一個(gè)常量指針贝淤,而不是指向常量的指針柒竞。
4.說(shuō)明輸出結(jié)果。
package test;
import java.util.Date;
public class SuperTest extends Date{
private static final long serialVersionUID = 1L;
private void test(){
System.out.println(super.getClass().getName());
}
public static void main(String[]args){
new SuperTest().test();
}
}
正確答案: C 你的答案: B (錯(cuò)誤)
A.SuperTest
B.SuperTest.class
C.test.SuperTest
D.test.SuperTest.class
①.首先 super.getClass() 是父類(lèi)的getClass()方法播聪,其父類(lèi)是Date朽基,它的getClass()方法是繼承自O(shè)bject類(lèi)而且沒(méi)有重寫(xiě),
所以就是調(diào)用object的getClass()方法离陶。而看一下getclass的方法解釋如下圖
所以可以知道是返回當(dāng)前運(yùn)行時(shí)的類(lèi)稼虎。
②.在調(diào)用getName()方法而getName()是:包名+類(lèi)名**
5.變量不能被defalut修飾
6.以下可以正確獲取結(jié)果集的有
正確答案: A D 你的答案: A (錯(cuò)誤)
A.Statement sta=con.createStatement();
ResultSet rst=sta.executeQuery(“select * from book”);
B.Statement sta=con.createStatement(“select * from book”); ResultSet rst=sta.executeQuery();
C.PreparedStatement pst=con.prepareStatement();
ResultSet rst=pst.executeQuery(“select * from book”);
D.PreparedStatement pst=con.prepareStatement(“select * from book”);
ResultSet rst=pst.executeQuery();
1、 PreparedStatement繼承 Statement招刨, PreparedStatement 實(shí)例包含已編譯的 SQL 語(yǔ)句霎俩, 所以其執(zhí)行速度要快于 Statement 對(duì)象。
2沉眶、作為 Statement 的子類(lèi)打却,PreparedStatement 繼承了 Statement 的所有功能。三種方法
execute谎倔、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數(shù)
- PreparedStatement盡最大可能提高性能. 最重要的一點(diǎn)是極大地提高了安全性.
7.Java中以static關(guān)鍵字修飾的方法稱為類(lèi)方法柳击,實(shí)例化一個(gè)類(lèi),引用的普通方法稱為實(shí)例方法片习。
8.System是java.lang中的類(lèi)捌肴,out為System中的一個(gè)靜態(tài)成員,out是java.io.PrintStream類(lèi)的對(duì)象藕咏,而println()是java.io.PrintStream類(lèi)的方法状知,所有可以調(diào)用類(lèi).靜態(tài)方法.println()方法。
9.public interface IService {String NAME="default";}
默認(rèn)類(lèi)型等價(jià)表示是哪一項(xiàng):
public static final String NAME="default";
接口中的變量默認(rèn)是public static final 的孽查,方法默認(rèn)是public abstract 的
所以你可以這樣寫(xiě):
public static final int i=10;或則int i=10饥悴;(可以省略掉一部分)
注意在聲明的時(shí)候要給變量賦予初值
10.What is displayed when the following is executed;
double d1=-0.5;
System.out.println("Ceil d1="+Math.ceil(d1));
System.out.println("floor d1="+Math.floor(d1));
正確答案: A 你的答案: B (錯(cuò)誤)
Ceil d1=-0.0
floor d1=-1.0
Ceil d1=0.0
floor d1=-1.0
ceil 和 floor 方法 上都有一句話:If the argument is NaN or an infinity or positive zero or negative zero, then the result is the same as the argument,意思為:如果參數(shù)是 NaN卦碾、無(wú)窮铺坞、正 0、負(fù) 0洲胖,那么結(jié)果與參數(shù)相同济榨,
如果是 -0.0,那么其結(jié)果是 -0.0
11.以下代碼的輸出結(jié)果是绿映?
public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("構(gòu)造塊");
}
static
{
System.out.println("靜態(tài)塊");
}
public static void main(String[] args)
{
B t = new B();
}
}
正確答案: C 你的答案: A (錯(cuò)誤)
靜態(tài)塊 構(gòu)造塊 構(gòu)造塊 構(gòu)造塊
構(gòu)造塊 靜態(tài)塊 構(gòu)造塊 構(gòu)造塊
構(gòu)造塊 構(gòu)造塊 靜態(tài)塊 構(gòu)造塊
構(gòu)造塊 構(gòu)造塊 構(gòu)造塊 靜態(tài)塊
并不是靜態(tài)塊最先初始化,而是靜態(tài)域.
而靜態(tài)域中包含靜態(tài)變量擒滑、靜態(tài)塊和靜態(tài)方法,其中需要初始化的是靜態(tài)變量和靜態(tài)塊.而他們兩個(gè)的初始化順序是靠他們倆的位置決定的!
So腐晾!初始化順序是 t1 t2 靜態(tài)塊
12.JSP對(duì)象 怎樣獲得
out->response.getWriter
request ->Service方法中的req參數(shù)
response ->Service方法中的resp參數(shù)
session ->request.getSession
application ->getServletContext
exception ->Throwable
page ->this
pageContext ->PageContext
Config ->getServletConfig
13.Collection和Collections
java.util.Collection 是一個(gè)集合接口。
它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法丐一。Collection接口在Java 類(lèi)庫(kù)中有很多具體的實(shí)現(xiàn)藻糖。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。
以下接口實(shí)現(xiàn)了Collection接口:
map库车,set巨柒,list,vector
java.util.Collections 是一個(gè)包裝類(lèi)柠衍。
它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法洋满。此類(lèi)不能實(shí)例化,就像一個(gè)工具類(lèi)珍坊,服務(wù)于Java的Collection框架牺勾。
14.什么時(shí)候是編譯時(shí)出錯(cuò),什么時(shí)候運(yùn)行時(shí)出錯(cuò)
編譯時(shí)
編譯時(shí)顧名思義就是正在編譯的時(shí)候.那啥叫編譯呢?就是編譯器幫你把源代碼翻譯成機(jī)器能識(shí)別的代碼.(當(dāng)然只是一般意義上這么說(shuō),實(shí)際上可能只是翻譯成某個(gè)中間狀態(tài)的語(yǔ)言.比如Java只有JVM識(shí)別的字節(jié)碼,C#中只有CLR能識(shí)別的MSIL.另外還有啥鏈接器.匯編器.為了了便于理解我們可以統(tǒng)稱為編譯器)
那編譯時(shí)就是簡(jiǎn)單的作一些翻譯工作,比如檢查老兄你有沒(méi)有粗心寫(xiě)錯(cuò)啥關(guān)鍵字了啊.有啥詞法分析,語(yǔ)法分析之類(lèi)的過(guò)程.就像個(gè)老師檢查學(xué)生的作文中有沒(méi)有錯(cuò)別字和病句一樣.如果發(fā)現(xiàn)啥錯(cuò)誤編譯器就告訴你.如果你用微軟的VS的話,點(diǎn)下build.那就開(kāi)始編譯,如果下面有errors或者warning信息,那都是編譯器檢查出來(lái)的.所謂這時(shí)的錯(cuò)誤就叫編譯時(shí)錯(cuò)誤,這個(gè)過(guò)程中做的啥類(lèi)型檢查也就叫編譯時(shí)類(lèi)型檢查,或靜態(tài)類(lèi)型檢查(所謂靜態(tài)嘛就是沒(méi)把真把代碼放內(nèi)存中運(yùn)行起來(lái),而只是把代碼當(dāng)作文本來(lái)掃描下).所以有時(shí)一些人說(shuō)編譯時(shí)還分配內(nèi)存啥的肯定是錯(cuò)誤的說(shuō)法.
15.異常(編譯時(shí)異常和運(yùn)行時(shí)異常)
https://blog.csdn.net/youngstar70/article/details/62227032
16.重載的概念是:
方法名稱相同阵漏,參數(shù)個(gè)數(shù)驻民、次序、類(lèi)型不同
因此重載對(duì)返回值沒(méi)有要求履怯,可以相同回还,也可以不同
但是如果參數(shù)的個(gè)數(shù)、類(lèi)型叹洲、次序都相同懦趋,方法名也相同,僅返回值不同疹味,則無(wú)法構(gòu)成重載
17.聲明為static和transient類(lèi)型的成員數(shù)據(jù)不能被串行化。因?yàn)閟tatic代表類(lèi)的狀態(tài)帜篇, transient代表對(duì)象的臨時(shí)數(shù)據(jù)糙捺。
18.類(lèi)變量在不設(shè)置初始值時(shí),會(huì)進(jìn)行默認(rèn)值賦值笙隙,而局部方法中聲明的變量則必須進(jìn)行初始化洪灯,他不會(huì)進(jìn)行默認(rèn)值賦值。
19.靜態(tài)變量只能在類(lèi)主體中定義竟痰,不能在方法中定義
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);
}
}
即編譯失敗
https://www.cnblogs.com/dianqijiaodengdai/p/6144698.html
20.靜態(tài)方法中new內(nèi)部類(lèi)的實(shí)例對(duì)象
https://www.cnblogs.com/printN/p/6249177.html