Java筆試題摘錄-基礎中的基礎

1.存在使i + 1 < i的數嗎()
答案:存在
解析:如果i爲int型,那麼當i爲int能表示的最大整數時,i+1就溢出變成負數了,此時不就<i了嗎。
2.存在使i > j || i <= j不成立的數嗎()
答案:存在
解析:比如Double.NaN或Float.NaN
3.下面哪個流類屬於面向字符的輸入流( )
A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader
答案:D

解析:Java的IO操作中有面向字節(Byte)和麪向字符(Character)兩種方式。
以InputStream(輸入)/OutputStream(輸出)爲後綴的是字節流; 以Reader(輸入)/Writer(輸出)爲後綴的是字符流。
4. ArrayList list = new ArrayList(20);中的list擴充幾次()
5.下面程序的運行結果是什麼()
class HelloA { public HelloA() {
        System.out.println("HelloA");
    }

    { System.out.println("I'm A class"); } static { System.out.println("static A"); }


public class HelloB extends HelloA {
    public HelloB() {
        System.out.println("HelloB");
    }

    { System.out.println("I'm B class"); } 
    static { System.out.println("static B"); }
    public static void main(String[] args) { new HelloB(); 
   }

}
答案:
static A
static B
I'm A class
HelloA
I'm B class
HelloB
6.下面代碼的運行結果爲:()
import java.io.*; 
import java.util.*; 
public class foo{ 
    public static void main (String[] args){

        String s;

        System.out.println("s=" + s);

    }

}
答案:由於String s沒有初始化,代碼不能編譯通過;Java中所有定義的基本類型或對象都必須初始化才能輸出值。

7.選項中哪一行代碼可以替換題目中//add code here而不產生編譯錯誤?()
Apublic abstract void method(int a);

B constInt = constInt + 5;

C public int method();

D public abstract void anotherMethod() {}

答案:A

解析:考察抽象類的使用。
8. 閱讀Shape和Circle兩個類的定義。在序列化一個Circle的對象circle到文件時,下面哪個字段會被保存到文件中? ( )
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Shape 

    public String name;

}
public class Circle extends Shape implements Serializable{ 
    
private float radius; 

transient int color; 
public static String type = "Circle";

public static void main(String[] args) {
     //1.try-with-resource創建文件流
     try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:/eclipse/workspace/work/circle.txt"))){
         
         Circle circle = new Circle();
        //2.將對象序列化到文件
         oos.writeObject(circle);
         
     } catch (Exception e) {
         e.printStackTrace();
     }
    
 }
}

A name

B radius

C color

D type

答案:B
解析 1.父類無序列化,2.transient 3.static (反序列化時可以看到這個值,不過值爲類的靜態值而不是反序列化值)

9.輸出內容
public class Dervied extends Base { 
        private String name = "dervied"; 
    public Dervied() {
              tellName();
              printName();
    } 
    public void tellName() {
        System.out.println("Dervied tell name: " + name);
    }
    public void printName() {
        System.out.println("Dervied print name: " + name);
    }
    public static void main(String[] args){ new Dervied();    
    }
}
class Base { 
    private String name = "base"; 
    public Base() {
        tellName();
        printName();
    } public void tellName() {
        System.out.println("Base tell name: " + name);
    } public void printName() {
        System.out.println("Base print name: " + name);
    }
}
答案:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
10.以下程序的執行結果是什麼
class Base{

    void test() {

      System.out.println(“Base.test()”);

    }

  }

  public class Child extends Base {

    void test() {

      System.out.println(“Child.test()”);

    }

    public static void main(String[] a) {

      Child anObj = new Child();

      Base baseObj = (Base)anObj;

      baseObj.test();

    }

  }

A Child.test() Base.test()

B Base.test() Child.test()

C Base.test()

D Child.test()

解答:D

測試代碼相當於:Base baseObj = new Child();父類的引用指向子類的實例,子類又重寫了父類的test方法,因此調用子類的test方法。
11.以下程序的執行結果是什麼
class Base{

    static void test() {

      System.out.println(“Base.test()”);

    }

  }

  public class Child extends Base {

    void test() {

      System.out.println(“Child.test()”);

      Base.test(); //Call the parent method

    }

    static public void main(String[] a) {

      new Child().test();

    }

  }

A Child.test() Base.test()

B Child.test() Child.test()

C 編譯報錯. 

D 運行報錯. 

解答:C

靜態方法不能在子類中被重寫

12.以下程序的執行結果是什麼;’ ?’ 是空格的意思.
public class Base{

    private void test() {

      String aStr = “?One?”;

      String bStr = aStr;

      aStr.toUpperCase();

      aStr.trim();

      System.out.println(“[" + aStr + "," + bStr + "]“);

    }

    static public void main(String[] a) {

      new Base().test();

    }

  }

A [ONE,?One?]

B [?One?,One]

C [ONE,One]

D [ONE,ONE]

E [?One?,?One?]

解答:E

13.下面關於變量及其範圍的陳述哪些是不正確的( )
A.實例變量是類的成員變量

B.實例變量用關鍵字static聲明

C.在方法中定義的局部變量在該方法被執行時創建

D.局部變量在使用前必須被初始化

解答:BC

由static修飾的變量稱爲類變量或是靜態變量;方法加載的時候創建局部變量
14.編譯運行以下程序後,關於輸出結果的說明正確的是
public class Conditional{

    public static void main(String args[ ]){

    int x=4;

    System.out.println(“value is “+ ((x>4) ? 99.9 :9));

    }

  }

A、 輸出結果爲:value is 99.99

B、 輸出結果爲:value is 9

C、 輸出結果爲:value is 9.0

D、 編譯錯誤

解答:C

三目運算符中:第二個表達式和第三個表達式中如果都爲基本數據類型,整個表達式的運算結果由容量高的決定。99.9是double類型 而9是int類型,double容量高。
15.關於以下程序代碼的說明正確的是( ):
class HasStatic{

     private static int x=100;

     public static void main(String args[ ]){

       HasStatic hs1=new HasStatic( );

       hs1.x++;

       HasStatic hs2=new HasStatic( );

       hs2.x++;

       hs1=new HasStatic( );

       hs1.x++;

       HasStatic.x - -;

       System.out.println(“x=”+x);

     }

  }

A、5行不能通過編譯,因爲引用了私有靜態變量

B、10行不能通過編譯,因爲x是私有靜態變量

C、程序通過編譯,輸出結果爲:x=101

D、程序通過編譯,輸出結果爲:x=102

E、程序通過編譯,輸出結果爲:x=103

解答:D

靜態變量是所有對象所共享的,所以上述代碼中的幾個對象操作是同一靜態變量x, 靜態變量可以通過類名調用。

16.下列哪種說法是正確的()

A.實例方法可直接調用超類的實例方法

B.實例方法可直接調用超類的類方法

C.實例方法可直接調用其他類的實例方法

D.實例方法可直接調用本類的類方法

解答:D

A. 實例方法不可直接調用超類的私有實例方法

B. 實例方法不可直接調用超類的私有的類方法

C.要看訪問權限

17.下面代碼的執行結果是?
import java.util.*;

  public class ShortSet{

    public static void main(String args[]){

      Set<Short> s=new HashSet<Short>();

      for(Short i=0;i<100;i++){

        s.add(i);

        s.remove(i-1);

      }

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

    }

  }

A.1

B.100

C.Throws Exception

D.None of the Above

解答:B

i是Short類型, i-1是int類型,其包裝類爲Integer,所以s.remove(i-1)不能移除Set集合中Short類型對象;只有將(i-1)強轉爲Short類型的時候,才能移除Set集合中的對象

18.以下關於面向對象概念的描述中,不正確的一項是()
A.在現實生活中,對象是指客觀世界的實體

B.程序中的對象就是現實生活中的對象

C.在程序中,對象是通過一種抽象數據類型來描述的,這種抽象數據類型稱爲類(class)

D.在程序中,對象是一組變量和相關方法的集合

解答:B

面向過程強調的是每一個功能的具體實現步驟,面向對象強調的是對象調用功能

19.插入排序算法,將元素插入一個有序隊列:第一步取數,第二步插入

  public static void injectionSort(int[] number) {

  // 第一個元素作爲一部分,對後面的部分進行循環

  for (int j = 1; j < number.length; j++) {

    int tmp = number[ j ];

    int i = j – 1;

    while (tmp < number[ i ]) {

      number[i + 1] = number[ i ];

      i - -;

      if (i == -1)

        break;

    }

    number[i + 1] = tmp;

  }

  }
20.冒泡排序,元素上浮:第一步循環次數,第二步元素上浮
//N個數字冒泡排序,總共要進行N-1趟比較,每趟的排序次數爲(N-i)次比較
    public static void bubbleSort(int[] arr){
        //一定要記住判斷邊界條件,很多人不注意這些細節,面試官看到你的代碼的時候都懶得往下看,你的代碼哪個項目敢往裏面加?
        if(arr==null||arr.length<2){
            return;
        }
        //需要進行arr.length趟比較

        for(int i = 0 ;i<arr.length-1;i++){
            //第i趟比較
            for(int j = 0 ;j<arr.length-i-1;j++){
                //開始進行比較,如果arr[j]比arr[j+1]的值大,那就交換位置
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }

        }
//        System.out.println("最終得出的數組爲:");
//        for (int k =0 ; k < arr.length;k++){
//            System.out.print(arr[k]+" ");
//        }
    }
21.選擇排序:挑選元素放到指定位置。第一步,選擇位置;第二步,選擇元素
public static void selectSort(int [] arr,int n){
        for (int i = 0; i < n - 1; i++) {
            int index = i;
            int j;
            // 找出最小值得元素下標
            for (j = i + 1; j < n; j++) {
                if (arr[j] < arr[index]) {
                    index = j;
                }
            }
            int tmp = arr[index];
            arr[index] = arr[i];
            arr[i] = tmp;
            System.out.println(Arrays.toString(arr));
        }
 
    }
22.下列程序的運行結果是什麼?
public class Test {

    public static void main(String[] args) {

      String str = NULL;

      System.out.println(str);

    }

  }

A. NULL

B. 編譯時報錯

C. ""

D.運行時報錯
23、下列程序執行結果是什麼?
public class Text{

    public static void main(String[] args){

      int a=10,b=4,c=20,d=6;

      System.out.println(a++*b+c*--d);

    }

  }

A、144

B、164

C、140

D、160

解答:C

在java中執行加減乘除基本運算時,已就遵循先乘除後加減的原則,而++a與a++的區別在於,++a是先自增後在參與運算,a++是先參與運算之後在自增,所以最終答案是10*4+20*5=140
24、下列哪兩個選項不能直接導致線程停止?

A. 跳出同步代碼塊

B. 調用wait方法

 C. 調用notify方法

 D. 調用讀取流的方法

 E. 設置線程的優先權

25.下列程序的運行結果是什麼:
public class TestInner {
    class Foo {

           public int i = 3;

        }
    public static void main (String args[]) {

    

    Object o = (Object) new TestInner().new Foo();

    Foo foo = (Foo)o;

    System.out.println(foo.i);

    }

}

26.public class Text{

    public static void main(String[] args){
      int i=12;

      System.out.println(i+=i-=i*=i);

    }

  }

A、程序無法編譯

B、100

C、0

D、-120

解答:D
本題我們先將i+=i-+i*=i編號 => i1+=i2-=i3*=i4;在計算之前先明白i1=i2=i3=i4=i=12;先計算i3=i*i=144,;再計算i1+=i2即爲i1=i1+i2=24,此時i1=i2=24;最後計算i2-=i3即爲i2=i2-i3=-120;

總結出下來就是,對於同一個變量,左邊變量變化對右邊
變量產生影響,而右邊變量的變化對左邊變量不產生影響。

27、 下列選項中,哪些選項與第2行相等:
1.   public interface Foo{

2.     int k = 4;

3.   }

A. final int k = 4;

B. Public int k = 4;

C. static int k = 4;

D. Private int k = 4;

E. Abstract int k = 4;

F. Volatile int k = 4;

G. Transient int k = 4;

H. protected int k = 4;
ABC
解析:Interface 變量等同於 public static final int k = 4;
28、 下列代碼的執行結果是什麼:

  public class foo {

    static String s;

    public static void main (String[]args) {

    System.out.println (“s=” + s);

    }

  }

A. 代碼編譯成功並輸出“s=”

B. 代碼編譯成功並輸出“s=null”

C. 因爲變量s沒有初始化,所以代碼編譯失敗

D. 代碼編譯成功,但在調用toString的時候拋出NullPointerException異常

解答:B

String爲引用數據類型,引用類型數據成員的默認值爲null
29.從下面代碼中選擇出錯誤的代碼段()

public class Something {

    void doSomething () {

      private String s ="";

      int l = s.length();

    }

    }
30.請看如下代碼

  class Person {

    private int a;

    public int change(int m){

      return m;

    }

  }

  public class Teacher extends Person{

    public int b;

    public static void main(String arg[]){

      Person p = new Person();

      Teacher t = new Teacher();

      int i;

       // point x

    }

  }

下面哪些放在// point x?行是正確的?

A, i = m;

B, i = b;

C, i = p.a;

D, i = p.change(3);

E, i = t.b;

解答:DE

A.不同的作用域

B.靜態方法中不能直接使用非靜態成員變量

C.類外不能訪問其它類私有的成員

D,E.在類方法中可以通過實例化對象調用類中的實例成員。

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