一、 简答题(每题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
//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
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
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);
}
}