1. 程式人生 > >刷題之牛客網

刷題之牛客網

1.在異常處理中,如釋放資源,關閉資料庫、關閉檔案應由(C )語句來完成。

try子句

catch子句

finally子句

throw子句

try:可能發生異常的語句

catch:捕獲,並處理異常(printStackTrace()用來跟蹤異常事件發生時執行堆疊的內容)

throw:方法內部拋異常

throws:宣告方法異常

finaly:程式碼中無論是否有異常都會執行,清除資源

 

2.下面有關final, finally, finalize的區別描述錯誤的是(B)

如果一個類被宣告為final,意味著它不能再派生出新的子類,不能作為父類被繼承
如果一個方法被宣告為final,可以被覆蓋
finally在異常處理時提供 finally 塊來執行任何清除操作。

Java使用 finalize() 方法在垃圾收集器象從記憶體中清除出去之前做必要的清理工作

final:final關鍵字可用於修飾類、變數和方法。final修飾的類不能被繼承,final修飾的方法不能被重寫,final修飾的變數不可被修改,一旦獲得初始值,該變數就不能被重新賦

finally:異常處理時提供 finally 塊來執行任何清除操作。如果丟擲一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。一般異常處理塊需要。

finalize:Java 技術允許使用 finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個物件沒有被引用時對這個物件呼叫的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除物件之前對這個物件呼叫的。 

Java中所有類都從Object類中繼承finalize()方法。

當垃圾回收器(garbage colector)決定回收某物件時,就會執行該物件的finalize()方法。

3.如果int x=20, y=5,則語句System.out.println(x+y +""+(x+y)+y);  的輸出結果是(25255)

1)不論有什麼運算,小括號的優先順序都是最高的,先計算小括號中的運算,得到x+y +""+25+y 2)任何字元與字串相加都是字串,但是是有順序的,字串前面的按原來的格式相加,字串後面的都按字串相加,得到25+“”+25+5 3)上面的結果按字串相加得到25255   4.
Integer i =  42 ; Long l = 42l; Double d =  42.0 ;
下面為true的是(G)
(i == l)
(i == d)
(l == d)
i.equals(d)
d.equals(l)
i.equals(l)
l.equals(42L)
解答:包裝類的“==”運算在不遇到算術運算的情況下不會自動拆箱,包裝類的equals()方法不處理資料轉型

ABC3 個選項很明顯,不同型別引用的 == 比較,會出現編譯錯誤,不能比較。

DEF 呼叫 equals 方法,因為此方法先是比較型別,而 i , d , l 是不同的型別,所以返回假。

選項 G ,會自動裝箱,將 42L 裝箱成 Long 型別,所以呼叫 equals 方法時,型別相同,且值也相同,因此返回真。

1、基本型和基本型封裝型進行“==”運算子的比較,基本型封裝型將會自動拆箱變為基本型後再進行比較,因此Integer(0)會自動拆箱為int型別再進行比較,顯然返回true;

         int a = 220;

         Integer b = 220;

        System.out.println(a==b);//true
2、兩個Integer型別進行“==”比較, 如果其值在-128至127  ,那麼返回true,否則返回false, 這跟Integer.valueOf()的緩衝物件有關,這裡不進行贅述。

        Integer c=3;         Integer h=3;         Integer e=321;         Integer f=321;         System.out.println(c==h);//true         System.out.println(e==f);//false

3、兩個基本型的封裝型進行equals()比較,首先equals()會比較型別,如果型別相同,則繼續比較值,如果值也相同,返回true。

        Integer a=1;         Integer b=2;         Integer c=3;         System.out.println(c.equals(a+b));//true

4、基本型封裝型別呼叫equals(),但是引數是基本型別,這時候,先會進行自動裝箱,基本型轉換為其封裝型別,再進行3中的比較。  

        int i=1;         int j = 2;         Integer c=3;         System.out.println(c.equals(i+j));//true   5.Consider the following code:

String s=null;

Which code fragments cause an object of type NullPointerException to be thrown(AC)

if((s!=null)&(s.length()>0))
if((s!=null)&&(s.length()>0))
if((s==null)|(s.length()==0))
if((s==null)||(s.length()==0))
s為null,因此只要呼叫了s.length()都會丟擲空指標異常。因此這個題目就是考察if語句的後半部分會不會執行。
A,單個與操作的符號& 用在整數上是按位與,用在布林型變數上跟&&功能類似,但是區別是無論前面是否為真,後面必定執行,因此丟擲異常
B,與操作,前半部分判斷為假,後面不再執行
C,這裡跟 & 和&& 的區別類似,後面必定執行,因此丟擲異常
D,或語句,前面為真,整個結果必定為真,後面不執行   方法的重寫(override)兩同兩小一大原則: 方法名相同,引數型別相同 子類返回型別小於等於父類方法返回型別, 子類丟擲異常小於等於父類方法丟擲異常, 子類訪問許可權大於等於父類方法訪問許可權。 在 main() 方法中給出的整型陣列,如果將其寫到一個檔案中,需要(建立資料位元組輸出流)。 輸入是讀取檔案,輸出是寫入檔案(這兩個我總會混淆!) Java中的io都是以程式(記憶體)為參照物的,寫入檔案相比程式是向外寫,程式是主動方,即從程式向檔案輸出,且傳輸字元陣列,故選擇建立資料位元組輸出流。   application物件是共享的,多個使用者共享一個,以此實現資料共享和通訊 JSP內建物件和屬性列舉如下: 1.request物件
     客戶端的請求資訊被封裝在request物件中,通過它才能瞭解到客戶的需求,然後做出響應。它是HttpServletRequest類的例項。
2.response物件
     response物件包含了響應客戶請求的有關資訊,但在JSP中很少直接用到它。它是HttpServletResponse類的例項。
3.session物件
     session物件指的是客戶端與伺服器的一次會話,從客戶連到伺服器的一個WebApplication開始,直到客戶端與伺服器斷開連線為止。它是HttpSession類的例項.
4.out物件
     out物件是JspWriter類的例項,是向客戶端輸出內容常用的物件
5.page物件
     page物件就是指向當前JSP頁面本身,有點象類中的this指標,它是java.lang.Object類的例項
6.application物件
     application物件實現了使用者間資料的共享,可存放全域性變數。它開始於伺服器的啟動,直到伺服器的關閉,在此期間,此物件將一直存在;這樣在使用者的前後連線或不同使用者之間的連線中,可以對此物件的同一屬性進行操作;在任何地方對此物件屬性的操作,都將影響到其他使用者對此的訪問。伺服器的啟動和關閉決定了application物件的生命。它是ServletContext類的例項。
7.exception物件
   exception物件是一個例外物件,當一個頁面在執行過程中發生了例外,就產生這個物件。如果一個JSP頁面要應用此物件,就必須把isErrorPage設為true,否則無法編譯。他實際上是java.lang.Throwable的物件
8.pageContext物件
pageContext物件提供了對JSP頁面內所有的物件及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當於頁面中所有功能的集大成者,它的本 類名也叫pageContext。
9.config物件
config物件是在一個Servlet初始化時,JSP引擎向它傳遞資訊用的,此資訊包括Servlet初始化時所要用到的引數(通過屬性名和屬性值構成)以及伺服器的有關資訊(通過傳遞一個ServletContext物件)  

以下描述錯誤的一項是( C)

程式計數器是一個比較小的記憶體區域,用於指示當前執行緒所執行的位元組碼執行  到了第幾行,是執行緒隔離的
原則上講,所有的物件都是在堆區上分配記憶體,是執行緒之間共享的
方法區用於儲存JVM載入的類資訊、常量、靜態變數,即使編譯器編譯後的程式碼等資料,是執行緒隔離的
Java方法執行記憶體模型,用於儲存區域性變數,運算元棧,動態連結,方法出口等資訊,是執行緒隔離的

  • 棧區:
  1. 每個執行緒包含一個棧區,棧中只儲存方法中(不包括物件的成員變數)的基礎資料型別和自定義物件的引用(不是物件),物件都存放在堆區中
  2. 每個棧中的資料(原始型別和物件引用)都是私有的,其他棧不能訪問。
  3. 棧分為3個部分:基本型別變數區、執行環境上下文、操作指令區(存放操作指令)。
  • 堆區:
  1. 儲存的全部是物件例項,每個物件都包含一個與之對應的class的資訊(class資訊存放在方法區)。
  2. jvm只有一個堆區(heap)被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身,幾乎所有的物件例項和陣列都在堆中分配。
  • 方法區:
  1. 又叫靜態區,跟堆一樣,被所有的執行緒共享。它用於儲存已經被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯後的程式碼等資料

 選項中哪一行程式碼可以新增 到題目中而不產生編譯錯誤?(A)

public  abstract  class  MyClass {       public  int  constInt = 5;       //add code here       public  void  method() {       } }
public abstract void method(int a);
constInt = constInt + 5;
public int method();
public abstract void anotherMethod() {}
A是抽象方法,抽象類可以包含抽象方法,也可以不包含,雖然A 方法名是method,與題目中的方法同名,但是引數不同,是過載方法 B 在類中不能constInt = constInt + 5;  方法中可以,類中不能進行運算,只能定義方法和變數, C 的方法名與題目中的方法名相同,返回值不能作為過載的依據 D 抽象方法沒有方法體
  執行時異常: 都是RuntimeException類及其子類異常,如NullPointerException(空指標異常)、IndexOutOfBoundsException(下標越界異常)等,這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理。這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這類異常的發生。

       執行時異常的特點是Java編譯器不會檢查它,也就是說,當程式中可能出現這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句宣告丟擲它,也會編譯通過。 
非執行時異常 (編譯異常): 是RuntimeException以外的異常,型別上都屬於Exception類及其子類。從程式語法角度講是必須進行處理的異常,如果不處理,程式就不能編譯通過。如IOException、SQLException等以及使用者自定義的Exception異常,一般情況下不自定義檢查異常。