牛客網錯題本(一)

ASCII碼值–執行語句“int a= ’ 2 ’ ”後,a的值是( )

50。常見字符的ASCII碼值如下:空格的ASCII碼值爲32;數字0到9的ASCII碼值分別爲48到57;大寫字母“A”到“Z”的ASCII碼值分別爲65到90;小寫字母“a”到“z”的ASCII碼值分別爲97到到122。

多線程–執行以下程序,最終輸出可能是(*代表空格):在這裏插入圖片描述

0012314*01223344**。每個線程輸出0,1,2,3,4,’空格, 輸出空格前必有線程輸出了0-4。

形式參數–下列語句正確的是:

  • 形式參數可被字段修飾符修飾
  • 形式參數不可以是對象
  • 形式參數爲方法被調用時真正被傳遞的參數
  • 形式參數可被視爲local variable

正確答案: D。
A:形式參數只能被final修飾
B:形式參數可以是對象
C:形式參數被調用時被傳遞的是實際參數的拷貝
D:local variable:局部變量

類裝載器–關於Java中的ClassLoader下面的哪些描述是錯誤的:( )

  • 默認情況下,Java應用啓動過程涉及三個ClassLoader: Boostrap, Extension, System
  • 一般的情況不同ClassLoader裝載的類是不相同的,但接口類例外,對於同一接口所有類裝載器裝載所獲得的類是相同的
  • 類裝載器需要保證類裝載過程的線程安全
  • ClassLoader的loadClass在裝載一個類時,如果該類不存在它將返回null
  • ClassLoader的父子結構中,默認裝載採用了父優先
  • 所有ClassLoader裝載的類都來自CLASSPATH環境指定的路徑

正確答案: B D F。
A.Java系統提供3種類加載器:啓動類加載器(Bootstrap ClassLoader) 擴展類加載器(Extension ClassLoader) 應用程序類加載器(Application ClassLoader). A正確
B.《深入理解Java虛擬機》P228:對於任意一個類,都需要由加載它的類加載器和這個類本身一同確立其在Java虛擬機中的唯一性,每一個類加載器,都擁有一個獨立的類名稱空間。這句話可以表達得更通俗一些:比較兩個類是否“相等”,只有在這兩個類是由同一個類加載器加載的前提下才有意義,否則,即使這兩個類來源於同一個Class文件,被同一個虛擬機加載,只要加載它們的類加載器不同,那麼這兩個類必定不相等。接口類是一種特殊類,因此對於同一接口不同的類裝載器裝載所獲得的類是不相同的。B錯誤
C.類只需加載一次就行,因此要保證類加載過程線程安全,防止類加載多次。C正確
D. Java程序的類加載器採用雙親委派模型,實現雙親委派的代碼集中在java.lang.ClassLoader的loadClass()方法中,此方法實現的大致邏輯是:先檢查是否已經被加載,若沒有加載則調用父類加載器的loadClass()方法,若父類加載器爲空則默認使用啓動類加載器作爲父類加載器。如果父類加載失敗,拋出ClassNotFoundException異常。D錯誤
E.雙親委派模型的工作過程:如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每一個層次的類加載器都是如此,因此所有的加載請求最終都應該傳送到頂層的啓動類加載器中,只有當父加載器反饋自己無法完成這個加載請求時,子加載器纔會嘗試自己去加載。E正確
F.應用程序類加載器(Application ClassLoader)負責加載用戶類路徑(ClassPath)上所指定的類庫,不是所有的ClassLoader都加載此路徑。F錯誤

符號運算

public class Test{
static{
   int x=5;
}
static int x,y;
public static void main(String args[]){
   x--;
   myMethod( );
   System.out.println(x+y+ ++x);
}
public static void myMethod( ){
  y=x++ + ++x;    //注意這個運算  ++x 已經是x++ 的下一個指令了,因此,x 已經+1
 }
}
  • compiletime error
  • prints:1
  • prints:2
  • prints:3
  • prints:7
  • prints:8

正確答案: D。
1.靜態語句塊中x爲局部變量,不影響靜態變量x的值
2.x和y爲靜態變量,默認初始值爲0,屬於當前類,其值得改變會影響整個類運行。
3.java中自增操作非原子性的
main方法中:
執行x–後 x=-1
調用myMethod方法,x執行x++結果爲-1(後++),但x=0,++x結果1,x=1 ,則y=0
x+y+ ++x,先執行x+y,結果爲1,執行++x結果爲2,得到最終結果爲3

switch語句

void main(void) {
    char *s = "1314520";
    int v1 = 0, v2 = 0, v3 = 0, v4 =0;
    for (int i = 0; s[i]; i++) {
        switch(s[i]) {
            default: v4++;
            case '1': v1++;
            case '2': v2++;
            cas3 '3': v3++;
        }
    }
    printf("%d, %d, %d, %d", v4,v1,v2,v3)
}
  • 3,5,6,7
  • 7,7,7,7
  • 7,2,1,1
  • 0,2,1,1

正確答案: A。
default顧名思義是缺省情況,只有任何條件都不匹配的情況下才會執行,故會匹配到s[i]爲‘4’,‘5’,‘0’ 的情況。於是v4++三次,v4=3.並且這個default後沒有使用break語句,於是case‘1’、‘2’、‘3’都會執行三次。注意到所以語句都沒有加break,則語句執行過之後會繼續下面的case語句,另外由於s[i]中有兩個1,故v1,v2,v3此時爲5.另外有一個2,v2,v3++後爲6,還有一個case3 於是v3++.最終v3爲7.

正則表達式

以下代碼將打印出

 public static void main (String[] args) { 
    String classFile = "com.jd.". replaceAll(".", "/") + "MyClass.class";
    System.out.println(classFile);
}
  • com. jd
  • com/jd/MyClass.class
  • ///////MyClass.class
  • com.jd.MyClass

正確答案: C。
由於replaceAll方法的第一個參數是一個正則表達式,而".“在正則表達式中表示任何字符,所以會把前面字符串的所有字符都替換成”/"。如果想替換的只是".",那麼久要寫成"\.".

下面有關 JAVA 異常類的描述,說法正確的有()

  • 異常的繼承結構:基類爲 Throwable,Error 和 Exception 實現 Throwable,RuntimeException
    和 IOException 等繼承 Exception
  • 非 RuntimeException 一般是外部錯誤(不考慮Error的情況下),其必須在當前類被 try{}catch 語句塊所捕獲
  • Error 類體系描述了 Java 運行系統中的內部錯誤以及資源耗盡的情形,Error 不需要捕捉
  • RuntimeException 體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等,必須 被 try{}catch 語句塊所捕獲

正確答案: A B C。
在這裏插入圖片描述
都是Throwable的子類:
1.Exception(異常) :是程序本身可以處理的異常。
2.Error(錯誤): 是程序無法處理的錯誤。這些錯誤表示故障發生於虛擬機自身、或者發生在虛擬機試圖執行應用時,一般不需要程序處理。
3.檢查異常(編譯器要求必須處置的異常) : 除了Error,RuntimeException及其子類以外,其他的Exception類及其子類都屬於可查異常。這種異常的特點是Java編譯器會檢查它,也就是說,當程序中可能出現這類異常,要麼用try-catch語句捕獲它,要麼用throws子句聲明拋出它,否則編譯不會通過。
4.非檢查異常(編譯器不要求處置的異常): 包括運行時異常(RuntimeException與其子類)和錯誤(Error)。

從以下哪一個選項中可以獲得Servlet的初始化參數?

  • Servlet
  • ServletContext
  • ServletConfig
  • GenericServlet

正確答案: C 。
ServletContext對象:servlet容器在啓動時會加載web應用,併爲每個web應用創建唯一的servlet context對象,可以把ServletContext看成是一個Web應用的服務器端組件的共享內存,在ServletContext中可以存放共享數據。ServletContext對象是真正的一個全局對象,凡是web容器中的Servlet都可以訪問。
整個web應用只有唯一的一個ServletContext對象
servletConfig對象:用於封裝servlet的配置信息。從一個servlet被實例化後,對任何客戶端在任何時候訪問有效,但僅對servlet自身有效,一個servlet的ServletConfig對象不能被另一個servlet訪問。

判斷一塊內存空間是否符合垃圾收集器收集的標準有哪些?

  • 給對象賦予了空值null,以下再沒有調用過
  • 對象重新分配了內存空間
  • 給對象賦予了空值null
  • 給對象賦予了新值

正確答案: A B D。
在java語言中,判斷一塊內存空間是否符合垃圾收集器收集標準的標準只有兩個:
1.給對象賦值爲null,以下沒有調用過。
2.給對象賦了新的值,重新分配了內存空間。

發佈了18 篇原創文章 · 獲贊 4 · 訪問量 7406
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章