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. 统计字符串abcd123AB@#$%^”中大写字母、小写字母、数字字符以及其它字符个数并打印。

public class TestCount {

 

public static void main(String[] args) {

 

String str = "abcd123AB@#$%^";

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 lt1 = new LinkedList();

//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 it = lt1.iterator();

while(it.hasNext()){

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

}

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

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

for(Student ig : 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 m = new HashMap();

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);

}

}

 

你可能感兴趣的:(javase)