牛客網第十天
1.以下對繼承的描述錯誤的是()
A.Java中的繼承允許一個子類繼承多個父類
B.父類更具有通用性,子類更具體
C.Java中的繼承存在著傳遞性
D.當例項化子類時會遞迴呼叫父類中的構造方法
正確答案: A 你的答案: D (錯誤)
解析:
Java只能繼承一個父類,但可以實現多個介面。
2.編譯Java Application 源程式檔案將產生相應的位元組碼檔案,這些位元組碼檔案的副檔名為( )
A.java
B.class
C.html
D.exe
正確答案: B 你的答案: B (正確)
解析:Java源程式的字尾名為“.java”
經過編譯之後生成的位元組碼檔案字尾名為“.class”
3. 有以下程式片段,下列哪個選項不能插入到行 1 。( )。
1.
2.public class A{
3.//do sth
4. }
A.public class MainClass{ }
B.package mine;
C.class ANotherClass{ }
D.import java.util.*;
正確答案: A 你的答案: C (錯誤)
解析:Java一個源程式只能有一個public類存在,且類名與檔名相同。Java程式是從main方法開始執行的,public為類載入器提供入口,然後找到public類中的main方法開始執行。如果存在多個public類,程式將不知道該從哪裡執行。
注意,內部類可以是public的,因為內部類是作為外部類的成員存在的。
4.判斷對錯。在java的多型呼叫中,new的是哪一個類就是呼叫的哪個類的方法。
A.對
B.錯
正確答案: B 你的答案: A (錯誤)
解析: java多型有兩種情況:過載和覆寫
在覆寫中,運用的是動態單分配,是根據new的型別確定物件,從而確定呼叫的方法;
在過載中,運用的是靜態多分派,即根據靜態型別確定物件,因此不是根據new的型別確定呼叫的方法
舉個簡單的例子,子類繼承父類,但是沒有實現其中的方法,當進行向上轉型賦值時,呼叫的方法就只是父類的
5. 以下程式碼結果是什麼?
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”。
正確答案: C 你的答案: B (錯誤)
解析:
引用a指向物件A
引用b指向物件B
引用x指向物件A
引用y指向物件B
在operate方法中,引用x指向的物件A被連線了B,物件A也就被改變為AB
然後又把引用y指向了x所指向的物件地址,也就是此時引用a,x,y指向同一個物件AB
而引用b沒有發生任何變化,依舊指向物件B。
6. 抽象類方法的訪問許可權預設都是public。( )
A.正確
B.錯誤
正確答案: B 你的答案: B (正確)
解析:
關於抽象類
JDK 1.8以前,抽象類的方法預設訪問許可權為protected
JDK 1.8時,抽象類的方法預設訪問許可權變為default
關於介面
JDK 1.8以前,介面中的方法必須是public的
JDK 1.8時,介面中的方法可以是public的,也可以是default的
JDK 1.9時,介面中的方法可以是private的
7. 關於訪問許可權說法正確 的是 ? ( )
A.外部類前面可以修飾public,protected和private
B.成員內部類前面可以修飾public,protected和private
C.區域性內部類前面可以修飾public,protected和private
D.以上說法都不正確
正確答案: B 你的答案: D (錯誤)
解析: 1.類指外部類,最大的類,修飾符有public(表示該類在專案所有類中可以被匯入),default(該類只能在同一個package中使用),abstract,final
2.內部類指位於類內部但不包括位於塊、構造器、方法內,且有名稱的類,修飾符有public,private,protected訪問控制符,也可以用static,final關鍵字修飾,public和private比較簡單,一個表示所有可以被所有類訪問,一個表示只能被自身訪問,protected修飾的成員類可以被同一個包中的類和子類訪問。而default修飾的成員類只能被同一個包中的類訪問。
3.區域性內部類指位於塊、構造器、方法內的有名稱類,最多隻能有final修飾
8. 已知如下的命令執行 java MyTest a b c 請問哪個語句是正確的? ( )
A.args[0] = “MyTest a b c”
B.args[0] = “MyTest”
C.args[0] = “a”
D.args[1]= “b”
解析:對於java命令,類名後面跟著的就是main函式的引數,多個引數則用空格隔開。 main方法的形參是一個string陣列所以對於java mytest a b c傳入的引數算是一個string陣列。 即args[0]=a args[1]=b args[2]=c
9.以下可以正確獲取結果集的有
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();
正確答案: A D 你的答案: B C (錯誤)
解析:完美的避開了正確答案 ,難受啊飛。preparedStatement和statement的區別與聯絡:在JDBC應用中,如果你已經是稍有水平開發者,你就應該始終以PreparedStatement代替Statement.也就是說,在任何時候都不要使用Statement。 PreparedStatement 介面繼承 Statement , PreparedStatement 例項包含已編譯的 SQL 語句, 所以其執行速度要快於 Statement 物件。 Statement為一條Sql語句生成執行計劃, 如果要執行兩條sql語句
select colume from table where colume=1;select colume from table where colume=2; 會生成兩個執行計劃 一千個查詢就生成一千個執行計劃! PreparedStatement用於使用繫結變數重用執行計劃 select colume from table where colume=:x; 通過set不同資料只需要生成一次執行計劃,可以重用
建立Statement是不傳參的,PreparedStatement是需要傳入sql語句
10.final、finally和finalize的區別中,下述說法正確的有?
A.final用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
B.finally是異常處理語句結構的一部分,表示總是執行。
C.finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源的回收,例如關閉檔案等。
D.引用變數被final修飾之後,不能再指向其他物件,它指向的物件的內容也是不可變的。
解析:
一.final
如果一個類被宣告為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被宣告為 abstract的,又被宣告為final的。將變數或方法宣告為final,可以保證它們在使用中不被改變。被宣告為final的變數必須在new一個物件時初始化(即只能在宣告變數或構造器或程式碼塊內初始化),而在以後的引用中只能讀取,不可修改。被宣告為final的方法也同樣只能使用,不能覆蓋(重寫)。
二.finally
在異常處理時提供 finally 塊來執行任何清除操作。如果丟擲一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。
三.finalize
方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個物件沒有被引用時對這個物件呼叫的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除物件之前對這個物件呼叫的。注意:finalize不一定被jvm呼叫,只有當垃圾回收器要清除垃圾時才被呼叫。
A,D考的一個知識點,final修飾變數,變數的引用(也就是指向的地址)不可變,但是引用的內容可以變(地址中的內容可變)。
B,finally表示總是執行。但是其實finally也有不執行的時候,但是這個題不要扣字眼。
- 在try中呼叫System.exit(0),強制退出了程式,finally塊不執行。
- 在進入try塊前,出現了異常,finally塊不執行。
C,finalize方法,這個選項錯就錯在,這個方法一個物件只能執行一次,只能在第一次進入被回收的佇列,而且物件所屬於的類重寫了finalize方法才會被執行。第二次進入回收佇列的時候,不會再執行其finalize方法,而是直接被二次標記,