javaSE基礎測試題

這套題目是傳智播客javaEE入學測試題,我是在自己學完javaSE之後做的套題,感覺這套題考察的內容很基礎,很適合自學javaSE的自測。全套試題有50個選擇題,單選和多選都有,每道題2分,80分合格,快來看看你能考多少分吧!


1. JAVA中,下列哪些說法是正確的( AC )  

A.java源文件的擴展名爲.java    //正確

B.寫好的java源程序可以直接運行  //源程序需要先編譯才能運行

C.編寫的源程序必須先編譯後才能運行  //正確

D.程序員可以讀懂擴展名爲.class的文件  //class文件爲字節碼文件,看不懂


2.下列標識符哪個是合法的( BD )

A.class

B.$abc

C.1234

D._name

變量名必須是一個以字母開頭的由字母和數字構成的序列。需要注意的是,與大多數程序設計語言相比,java中的字母和數字的範圍要大。字母包括‘A’~‘Z’、‘a’~'z'、‘_’、‘$’或在其他某種語言中代表字母的任何Unicode字符。


3.下面哪些賦值語句是正確的?(ABD)

A. long test = 012; //正確

B. float f = -412; //正確

C. int other = (int) true;//布爾型不能強轉成整型

D. double d = 0x12345678;//正確,在double的範圍內

E. byte b = 128;   //錯誤,-128~127


4.Java中,下列語句不能通過編譯的有( BD)

A. String s= “join”+ 3; //正確,整型可以通過這種方式轉換成字符串類型

B. int a= “join”+3;//錯誤,字符串類型不能這樣轉換成整型

C. int a= ‘a’+5;//正確,字符型可以轉換成整型

D. float f=5+5.5;//錯誤,5.5的默認類型爲double類型,轉換成float類型需要進行強轉


5.a = 3,則表達式(--a )< < a的結果爲( B )

A. 16

B. 8

C. 24

D. 12

這個題目主要考察的是運算符的優先級和對爲運算符的運用。具體的運算過程如下:

先計算小括號裏面的--a,變成了2<<2,即將0010向左移動2位,變成了1000,即等於8


6.下列代碼運行的結果是(  C ) 

public static void main(String[] args) {

int x = 4;

int y = 5;

if(x++>4 & ++y>5) {

x++;

}

System.out.println("x=" + x + ",y=" + y);

}

A. x=4,y=5

B. x=4,y=6

C. x=5,y=6

D. x=6,y=6

此題主要考察的自增運算符的運用。x++,即先用x的值之後再將x+1,++x即先將x+1,然後再進行運算。

這個題目還有一點,就是&運算符,&與&&都是位運算符,但兩者之間又有區別,讀者可以自己去思考一下這個問題


7.嘗試運行下面的代碼會發生什麼?( B )  

public class Test {

public static void main(String[] args) {

boolean m = true;

if (m = false) {

System.out.println("true");

} else {

System.out.println("false");

}

}

}

A.輸出字符串”true”

B.輸出字符串”false”

C.編譯時錯誤

D.運行時錯誤

此題主要問題在if(m = false),很多人可能選C,覺得 “=” 是賦值符,如果將“=”改成“==”這個題目就選B 了,不然編譯不能通過。其實我們忽略了m本身聲明時就說boolean型,所以這裏可以用“=”對m進行賦值。


8.編譯並運行以下代碼將發生什麼? ( E ) 

public static void main(String args[]){

char digit = 'a';

for (int i = 0; i < 10; i++){

switch (digit)

{

case 'x' :

{

int j = 0;

System.out.println(j);

}

default :

{

int j = 100;

System.out.println(j);

}

}

}

int i = j;

System.out.println(i);

}

A.輸出11100

B.輸出10100,然後拋出運行期異常

C.編譯錯誤,因爲變量i不能在main()方法中被聲明2

D.編譯錯誤,因爲變量j不能在main()方法中被聲明2

E.以上都不對

此題是編譯無法通過,因爲變量j在main()中沒有聲明,而switch裏面的j只能在各自的case裏面有效


9. class Demo   

{

public static int fun(int c)

{

return c+=2;

}

public static void main(String[] args)

{

int temp = fun(2);

System.out.println(temp);

}

}

打印結果是(B)

A. 2

B. 4

C. 6

D. 8

此題考查的java的參數傳遞,值傳遞。


10.下面哪些函數是public void aMethod(){...}的重載函數?( BD ) 

A. void aMethod( ){...}

B. public int aMethod(int a, float b){...}

C. public void aMethod (){...}

D. public float aMethod (int m){…}

函數重載的條件:

1.函數名必須相同

2.函數的參數列表不同(這個不同主要體現在參數的個數,類型,順序,至少滿足一個)

與函數的訪問權限,返回類型無關


11.java中,關於數組描述正確的是( BD ) 

A.數組中的索引下標從1開始//從0開始

B.存儲在數組當中的數據都屬於同一數據類型//正確

C.通過數組名.length()能獲得數組的長度//錯誤,length是數組的屬性,是String的方法

D.數組的最大索引下標是數組的長度減1//正確


12.下面程序的輸出結果是什麼(D ) 

int[] arr = new int[10];

System.out.println(arr[0]);

A.編譯不通過

B.運行時出錯

C.輸出null

D.輸出0

數組通過new關鍵字開闢內存空間後沒有賦初值,會自動被賦成0.


13.下面哪個語句正確地聲明一個整型的二維數組( CD ) 

A. int a[][] = new int[][];

B. int b[10][10] = new int[][];

C. int c[][] = new int[10][10];

D. int []d[] = new int[10][10];

這三中聲明方式都是正確的:

int d[][] = new int[10][10];

int []d[] = new int[10][10];

int [][]d = new int[10][10];


14.以下代碼輸出是( D ) 

class Demo {

public static void main(String[] args) {

int i = 0;

int sum = 0;

while (i <= 10) {//10以內

i++;

if (i % 2 != 0)//偶數

continue;

sum += i;//求和

}

System.out.println(sum);

}

}

A. 55

B. 45

C. 35

D. 30

此題主要是讀懂題目的目的。計算10以內的偶數的和。


15. 和下面代碼能完成相同的選項是( B ) 

class Demo {

public static void main(String[] args) {

int i = 1;

int sum = 0;

while (i <= 100) {//100以內

if (i % 2 == 0) {//偶數

sum = sum + i;//求和

}

i++;

}

System.out.println(sum);

}

}

A. for (int x =1; x<=100;x++){ sum=sum+x;}//求1到100的和

B. for (int x =0; x<=100;x+=2){ sum=sum+x;}//求1到100之間偶數的和

C. for (int x =1; x<=100;x+=2){ sum=sum+x;}//求1到100之間奇數的和

D.上述全對


16.下列有關類、對象和實例的敘述,正確的是哪一項?( D ) 

A.類就是對象,對象就是類,實例是對象的另一個名稱,三者沒有差別

B.對象是類的抽象,類是對象的具體化,實例是對象的另一個名稱

C.類是對象的抽象,對象是類的具體化,實例是類的另一個名稱

D.類是對象的抽象,對象是類的具體化,實例是對象的另一個名稱//正確


17.下面關於java中包的說法正確的是(ACD ) 

A.java中可以使用import語句導入包

B.java中可以使用package語句導入包

C.位於同一個包中的類,不需要導包就可以直接訪問

D.不同的包中可以出現類名相同的類

沒什麼可講的吧這題


18.下列有關抽象類的敘述正確的是哪項? (C) 

A.抽象類中一定含有抽象方法//不一定,普通類也可以使用abstract變成抽象類

B.抽象類既能被實例化也能被繼承//抽象類不能實例化,可以被繼承

C.抽象類的聲明必須包含abstract關鍵字//正確

D.抽象類中不能有構造方法//抽象類可以有構造方法,接口不能有構造方法


19. 下列有關接口的敘述錯誤的是哪項?( D ) 

A.接口中只能包含抽象方法和常量

B.一個類可以實現多個接口

C.類實現接口時必須實現其中的方法

D.接口不能被繼承//接口能被繼承,也能被實現


20.運行以下代碼片段,輸出結果是?( D ) 

class X {

Y b = new Y();

X() {

System.out.print("X");

}

}

class Y {

Y() {

System.out.print("Y");

}

}

public class Z extends X {

Y y = new Y();

Z() {

System.out.print("Z");

}

public static void main(String[] args) {

new Z();

}

}

A. Z

B. YZ

C. XYZ

D. YXYZ


main函數中,new Z(),訪問類 Z,由於 Z 繼承了 X,又轉向去訪問類X,類X裏面又創建了類Y的對象,又轉向了Y,所以第一步是打印Y ,再回到類X中構造函數,打印X,再返回到類Z中,由於類Z中也有類Y 的對象,又要返回類Y調用一次類Y 的構造函數,打印Y,最後回到類Z中,打印Z。

21. 下列關於類的繼承的描述,正確的有( BD )

A. 一個類可以同時繼承多個父類//java不支持多繼承

B. 一個類可以具有多個子類//一個類可以被多個類繼承

C. 子類會自動擁有父類所有的方法//構造方法就不能被繼承

D. 一個類繼承另一個類需要使用extends關鍵字//必須的


22.下列選項中關於javathis關鍵字的說法錯誤的有( ABD ) 

A. this關鍵字是一個對象的引用//錯誤,應該是本類對象對自身的引用

B. this關鍵字可以用於引用當前類以外其他類型的對象//錯誤,應該是本類

C. this可用於構造函數中,調用類本身重載的構造函數,但是必須寫在首行//正確

D. this可用於靜態方法中//錯誤。靜態方法與對象無關,this與對象有關


23.下列關於構造函數的說法正確的是( ABD )

A.方法名必須與類名相同

B.使用new關鍵字創建對象時,java虛擬機會自動調用構造函數

C.我們在定義一個類時,必須要聲明至少一個構造函數 //當沒有聲明構造函數是,會有一個默認的無參構造函數

D.構造函數中不能使用return語句


24.編譯並運行以下代碼將發生什麼?( D ) 

class MyClass {

int x;

MyClass(int i) {

x = i;

}

public static void main(String args[]) {

MyClass m1 = new MyClass(100);

MyClass m2 = new MyClass(100);

if (m1.equals(m2)) {

System.out.println("Both are equal");

} else {

System.out.println("Both are not equal");

}

}

}

A.代碼編譯時報出錯誤提示信息“equals()方法未定義

B.編譯通過,拋出運行期異常.

C.輸出Both are equal.

D.輸出Both are not equal


本題考察了equals方法。MyClass類沒有複寫Object類中的equals方法,即此equals方法是比較兩個對象的值是否相等。由於m1和m2是兩個對象,對應的值則是他們的內存地址,所以equals方法返回false。


25.運行以下的main()方法,結果是?( AC ) 

1 public static void main(String[] args)

2 {

3 String myString;

4 int x = 100;

5

6 if (x < 100) myString = "x is less than 100";

7 if (x > 100) myString = "x is greater than 100";

8 System.out.println(myString.length());

9 }

A.編譯時報出錯誤提示信息變量myString沒有被初始化

B.編譯通過

C.編譯未能通過。但如果變量myString在第8行前的代碼中被初始化,代碼可以編譯通過,運行時可以輸出字符串myString的長度

D.以上都不對

局部變量沒有被初始化,編譯不能通過;初始化後能正常執行。


26.有如下代碼,請問哪些是正確的?( ACD )

class ClassA{}

class ClassB extends ClassA{}

class ClassC extends ClassA{}

以及

ClassA p0 = new ClassA();

ClassB p1 = new ClassB();

ClassC p2 = new ClassC();

ClassA p3 = new ClassB();

ClassA p4 = new ClassC();

A.p0 = p1;//正確,類型自動向上提升

B.p1 = p2;//錯誤,類型轉換異常

C.p1 = (ClassB)p3;//正確,類型強制向下轉型

D.p2 = (ClassC)p4;//正確,類型強制向下轉型


27.關於繼承,以下說法正確的是: ( AD )

A.Java中只支持單繼承,一個類只能繼承一個類,但是可以有多個子類

B.一個類如果沒有自己寫無參構造方法,那麼子類將無法繼承//錯誤,如果自己沒有寫構造方法,會有默認的隱式的無參構造方法

C.子類可以當父類用,父類不可以當子類用//父類強轉之後也可當之類使用

D.子類重寫父類方法時訪問權限不能更低


28.編譯並運行以下代碼的輸出結果是?( A )

String s1 = new String("amit");

System.out.println(s1.replace('m','r'));//輸出arit

System.out.println(s1);//輸出amit

String s3 = "arit";//s3和s4都指向字符串常量池裏面的同一個"arit"

String s4 = "arit";

String s2 = s1.replace('m','r');//s2指向堆內存中的"arit"

System.out.println(s2 == s3);//輸出false

System.out.println(s3 == s4);//輸出true

A. arit

amit

false

true

B. arit

arit

false

true

C. amit

amit

false

true

D. arit

amit

true

true


29.下列哪些代碼可以順利通過編譯和運行? ( ABD )

A.Integer i = new Integer('A');//可以

B.Integer i = new Integer("7");//可以

C.Character c = new Character("A");//編譯不通過,沒有這個類型的構造器

D.Boolean b = new Boolean(null);//可以

E.Integer i = new Integer("0x10");//編譯能通過,運行時報java.lang.NumberFormatException異常


30.Java中,如果要在字符串類型對象s="java"中,得到字符'v'出現的位置,可使用下面的那個方法?( C )

A. s.matches('v');// 告知此字符串是否匹配給定的正則表達式。

B. s.charAt('v');//返回指定索引處的char 值。

C. s.indexOf('v');// 返回指定字符在此字符串中第一次出現處的索引。

D. s.substring('v');// 返回一個新的字符串,它是此字符串的一個子字符串。


31.下列關於ArrayListVectorLinkedList集合的說法正確是有( ACD )

A. ArrayList集合底層是數組實現,該集合線程不安全

B. Vector集合元素的存放是無序的

C. LinkedList集合底層是鏈表結構,適合做元素的增刪操作

D.這三個集合都是List接口的實現類

ArrayList、Vector、LinkedList三個集合都是List接口的實現類,都是可變長度的集合,元素有序。其中ArrayList和Vector底層數據結構爲數組,適合做查詢查找;LinkedList底層數據結構爲雙向鏈表,適合做元素的增刪。ArrayList線程不安全,Vector線程安全。


32.下面程序的輸出結果是什麼( D )

Set set= new HashSet();

set.add("aaa");

set.add("bbb");

set.add("aaa");

System.out.println(set.size());

A.編譯不通過

B.運行時出錯

C.輸出3

D.輸出2

Set集合時無序不重複的集合。


33.下列哪些方法是ArrayListLinkedList集合中都定義的( ACD )

A. add(Object o)

B. removeFirst()

C. remove(Object o)

D. add(int index,Object o)

此題可以自己查JDK API。LinkedList可以利用removeFirst、removeLast等方法實現隊列、棧等數據結構。


34.下列哪些集合屬於Collection體系的子類( BD )

A. TreeMap

B. ArrayList

C. Hashtable

D. HashSet

Collection下面有List 和Set,List主要又包括ArrayList、LinkedList、Vector等;Set主要包括HashSet、TreeSet等;Hashtable和Map是一個體系。Hashtable的父類是Dictionary,更老;TreeMap的父類是Map。


35.下面有關Java異常處理的說法錯誤的是( A ) 

A.一個try塊只能有一條catch語句//可以有多條Catch語句

B.一個try塊中可以不使用catch語句

C. catch塊不能單獨使用,必須始終與try塊在一起

D. finally塊不能單獨使用,必須始終與try塊在一起


36.下列關鍵字能和try語句一起使用的是( CD )

A. final

B. finalize

C. finally

D. catch

final,關鍵字,被修飾成員變量不可變;finalize,垃圾收集器執行時會調用被回收對象的finalize方法;finally,異常處理部分必須被執行的部分;catch,異常處理時必須和try一起使用。


37.下面程序的運行結果是( D )

FileOutputStream fos = new FileOutputStream(“c:\\demo.txt”);

fos.write(“abc”);

fos.close();

A.C盤創建文件demo.txt,但文件是空的

B.C盤創建文件demo.txt,並寫入數據abc

C.C盤已有的文件demo.txt中追加寫入abc

D.編譯失敗

編譯失敗。FileOutputStream爲字節輸出流,它的write方法不能直接傳入字符串,應該利用getBytes()方法把字符串轉換成字節數組。


38.下列關於Java中文件輸入輸出的說法正確的是( AC )

A.Java中,文件的輸入輸出功能是通過流來實現的

B.如果要把數據寫入到一個文件中,需要創建一個輸入流對象  //輸出流對象

C.字符流在某些方面比如漢字的處理,比字節流更方便

D.可以通過Reader r = new Reader("c:\\pet.txt")創建一個輸入流對象//FileReader r =new FileReader("c:\\pet.txt");


39.請看如下代碼:

BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));

BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\b.txt"));

String line = null;

while ((line = br.readLine()) != null) {//讀取a.txt文件的內容

bw.write(line);//將讀取到的內容寫入到b.txt

bw.newLine();

bw.flush();

}

bw.close();

br.close();

它表達的意思是?( A )

A.c盤目錄下的a.txt文件內容複製到d盤目錄下的b.txt

B.d盤目錄下的b.txt文件內容複製到c盤目錄下的a.txt

C.讀取c盤目錄下a.txt文件,輸出在控制檯

D.把控制檯的內容寫入到d盤目錄下的b.txt文件中


40.關於泛型的說法正確的是( ABC )

A.泛型是JDK1.5出現的新特性

B.泛型是一種安全機制

C.使用泛型避免了強制類型轉換

D.使用泛型必須進行強制類型轉換

泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定爲一個參數。引入泛型的好處是安全簡單。在Java SE 1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現參數的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉換,而這種轉換是要求開發者對實際參數類型可以預知的情況下進行的。對於強制類型轉換錯誤的情況,編譯器可能不提示錯誤,在運行的時候纔出現異常,這是一個安全隱患。


41.關於方法的遞歸算法,說法正確的是( AB ) 

A.遞歸就是方法自己調用自己

B.遞歸的次數不能過大,否則會導致棧內存溢出

C.使用遞歸算法,方法必須有返回值

D.構造方法不可以使用遞歸算法

遞歸,就是在運行的過程中調用自己。一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。遞歸次數過多容易造成棧溢出。


42.下列哪個關鍵字可以用於實現同步?( C )

A. native//本地方法

B. static//靜態

C. synchronized//同步

D. abstract//抽象


43.下列哪些方法可以讓線程中斷? ( AD ) 

A. sleep

B. start

C. notify

D. wait

sleep爲Thread類的靜態方法,它的作用是使當前的線程出入睡眠狀態,交出CPU的執行權,不釋放同步鎖。當睡眠時間完成,又重新獲取CPU的執行權。wait爲Object類的方法,對象調用此方法會導致本線程放棄對象鎖,進入等待此對象的等待鎖池,只有針對此對象發出notify方法後本線程才能進入對象鎖池準備獲取對象鎖進入運行狀態。


44.啓動線程調用哪個方法? ( B )

A. run()

B. start()

C. play()

D. go()

直接調用run()方法不能開啓線程,僅僅是主線程調用了run()方法,還是單線程。


45.awt 中,下列哪個組件可以實現帶標題的窗口( C )

A. Menu

B. Button

C. Frame

D. TextField


46.編寫Button組件的事件處理類時,需要實現哪個接口? ( B )

A. ItemListener

B. ActionListener

C. ButtonListener

D. WindowListener


47.下面哪項不是TCP的特點? ( BD)

A.面向連接

B.數據不可靠

C.傳輸速度慢

D.對數據大小無限制

TCP是面向連接的可靠傳輸,由於需要校驗數據,速度要比UDP慢,數據傳輸有MTU(最大傳輸單位)


48. TCP協議的服務器的Socket對象是下面哪一個類? ( C ) 

A. Socket

B.InputStream

C.ServerSocket

D.OutputStream


49.正則表達式中可以表示所有的單詞字符信息的是下面哪個規則:( C )

A. \W

B. \w

C. [a-zA-Z]

D.[a-zA-Z_0-9]


50. 獲取Class類型的對象的三種方式是( ABD )

A. Object類的getClass()

B. class靜態屬性

C.自己創建Class對象

D. Class類的forName()靜態方法





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章