1. 程式人生 > >javase階段考試三(集合、內部類)測試題及答案

javase階段考試三(集合、內部類)測試題及答案

一、 簡答題(每題5分,共計30分)

1. 請寫出匿名內部類的語法格式以及作用。

父類型別/介面型別 引用名 = new 父類型別/介面型別(){

進行方法的重寫;

};

用於隱含實現一個介面或實現一個類,該類沒有類名。

2. 簡述常用的8種包裝類以及對應的基本資料型別。

java.lang.Integer類       - int型別的包裝類。

java.lang.Double類       - double型別的包裝類。

java.lang.Float類         - float型別的包裝類

java.lang.Byte類         - byte型別的包裝類。

java.lang.Short類        

- short型別的包裝類。

java.lang.Long類         - long型別的包裝類。

java.lang.Boolean類      - boolean型別的包裝類。

java.lang.Charater類      - char型別的包裝類。簡述””null之間的區別。

3. 簡述String類、StringBuilder類以及StringBuffer類之間的主要區別。

String類用於描述字串字面值,是個常量不可改變。

StringBuilder類描述可變字元序列,屬於非執行緒安全的類,執行效率高。

StringBuffer類描述可變字元序列,屬於執行緒安全的類,執行效率低。

4. 請寫出String類中常用的方法名和功能(至少寫出5個)。

char charAt(int index) - 主要用於返回指定下標對應的字元,下標從0開始。

int length() - 主要用於返回字串的長度。

String toUpperCase() - 將所有的字元轉換為大寫。

String toLowerCase() - 將所有的字元轉換為小寫。

static String valueOf(int i ) - 主要用於將引數轉換為字串並返回。

String trim() - 返回字串副本,忽略前面和後面的空白。

5. 簡述List介面的特性和主要實現類的底層實現。

   java.util.List介面是

Collection介面的子介面,該介面的元素有放入次序,允許重複。

   該介面的主要實現類有:ArrayList類、LinkedList類、Stack類、Vector(筆試)

   其中ArrayList類的底層是採用動態陣列實現的,增刪元素不方便,訪問元素方便。

   其中LinkedList類的底層是採用連結串列實現的,增刪元素方便,訪問元素不方便。

   其中Stack()的底層是採用動態陣列實現的,該類是一種具有後進先出特性的資料結構,簡稱為LIFO(last in first out)

   其中Vector類的底層是採用動態陣列實現的,與ArrayList類相比,是屬於執行緒安全的類,因此效率比較低,推薦使用ArrayList類。

6. 寫出常見的5種異常型別,要求寫出英文名稱以及漢語解釋。

    ArithmeticException- 算數異常。

    ArrayIndexOutOfBoundsException - 陣列下標越界異常(間接子類)

    NullPointerException - 空指標異常。

    ClassCastException - 型別轉換異常。

    NumberFormatException - 數字格式異常(間接子類)

二、畫圖題(每圖5分,共10分)

1. 畫出框架類相關的兩張圖。

2. 畫出一棵二叉樹並標出根節點、枝節點、葉子節點,以及高度和大小。

三、程式設計題(每題12分,共60分)

1. 統計字串[email protected]#$%^”中大寫字母、小寫字母、數字字元以及其它字元個數並列印。

public class TestCount {

public static void main(String[] args) {

String str = "[email protected]#$%^";

int[] count = new int[4];

for (int i = 0; i < str.length(); i++) {

if('a' <= str.charAt(i) && str.charAt(i) <= 'z'){

count[0]++;

}else if('A' <= str.charAt(i) && str.charAt(i) <= 'Z'){

count[1]++;

}else if('0' <= str.charAt(i) && str.charAt(i) <= '9'){

count[2]++;

}else{

count[3]++;

}

}

System.out.println("小寫字母有" + count[0] + "個");

System.out.println("大寫字母有" + count[1] + "個");

System.out.println("數字字元有" + count[2] + "個");

System.out.println("其他字元有" + count[3] + "個");

}

}

2. 程式設計實現Student類的封裝並重寫equals()、hashCode()以及toString()方法,屬性有:學號和姓名。

public class Student {

private int id;

private String name;

public Student() {

super();

}

public Student(int id, String name) {

super();

setId(id);

setName(name);

}

public int getId() {

return id;

}

public void setId(int id) {

if(id > 0){

this.id = id;

}else{

System.out.println("學號不合理!!!");

}

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + id;

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Student other = (Student) obj;

if (id != other.id)

return false;

return true;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + "]";

}

}

3. 根據上述Student類向List集合中放入3個學生資訊,然後使用4種方式進行列印。

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

public class TestListPrint {

public static void main(String[] args) {

//1.準備一個List集合

List<Student> lt1 = new LinkedList<Student>();

//2.放入元素

lt1.add(new Student(1001,"王二"));

lt1.add(new Student(1002,"張三"));

lt1.add(new Student(1003,"李四"));

//3.使用toString()方法列印所有元素

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

System.out.println("-----------------------------");

//4.使用迭代器方式列印所有元素

Iterator<Student> it = lt1.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

System.out.println("------------------------------");

//5.使用for each列印所有元素

for(Studentig : lt1){

System.out.println(ig);

}

System.out.println("-----------------------------");

//6.使用get()方法列印所有元素

for(int i = 0; i < lt1.size(); i++){

System.out.println(lt1.get(i));

}

}

}

4. 定義一個樂器(Instrument)介面,其中有抽象方法void  play();InstrumentTest類中,定義方法void playInstrument(Instrument ins);要求在該類的main方法中呼叫上述方法,採用兩種方式實現。

public interface Instrument {

public abstract void play();

}

public class InstrumentTest implements Instrument{

@Override

public void play() {

System.out.println("使用多型");

}

private static void playInstrument(Instrument  ins) {

ins.play();

}

public static void main(String[] args) {

// 第一種

Instrument ins1 = new InstrumentTest();

playInstrument(ins1);

//第二種

Instrument ins2 = new Instrument() {

@Override

public void play() {

System.out.println("使用匿名內部類");

}

};

playInstrument(ins2);

}

}

5. 使用Map集合統計字串中“123, 456, 789, 123, 456”中每個整數出現的次數並打印出來。

import java.util.HashMap;

import java.util.Map;

public class TestMap {

public static void main(String[] args) {

String str = "123,456,789,123,456";

String[] s = str.split(",");

Map<String,Integer> m = new HashMap<String,Integer>();

for (int i = 0; i < s.length; i++) {

if(m.containsKey(s[i])){

m.put(s[i], m.get(s[i])+1);

}else{

m.put(s[i], 1);

}

}

System.out.println(m);

}

}