這套題目是傳智播客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.輸出11次100
B.輸出10次100,然後拋出運行期異常
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
21. 下列關於類的繼承的描述,正確的有( BD )
A. 一個類可以同時繼承多個父類//java不支持多繼承
B. 一個類可以具有多個子類//一個類可以被多個類繼承
C. 子類會自動擁有父類所有的方法//構造方法就不能被繼承
D. 一個類繼承另一個類需要使用extends關鍵字//必須的
22.下列選項中關於java中this關鍵字的說法錯誤的有( 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.下列關於ArrayList、Vector和LinkedList集合的說法正確是有( 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.下列哪些方法是ArrayList和LinkedList集合中都定義的( 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()
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()靜態方法