JAVA第三阶段考试试卷
第三次测验 | java |
一.概念题
1.Set里存放的对象是(有/无)序,不能(重复/不重复)的。
2.List里存放的对象是(有/无)序的,同时也是可以(重复/不重复)的。
3.Map集合中存储的是()对,键不能(重复/不重复),值可以(重复/不重复)。
4.TreeSet类提供()排序和()排序功能。
二.简答题
1.有哪些遍历Set集合的方式?(最少三种,写出代码)
2.比较ArrayList和LinkedList的异同点?
.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构
.对于数据的随机访问,ArrayList效率优于LinkedList,因为LinkedList要移动指针
.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
3.集合中使用泛型的好处有哪些?
4.comparator和comparable的使用方式和区别是什么?
comparator用于比较器排序,comparable用于自然排序
5.列出5个final修饰的核心类?
6.列出5个jdk中接口?
8.列出3个字符串类?列出它们的异同点?
当需要改变字符串的值时,可以使用StringBuffer类
String用于创建字符串对象,并且创建的字符串(对象)不能被改变。
相同:StingBuilder用法与StringBuffer类相同,可以多次修改,不产生新的对象
不同: 1.StringBuilder的方法不是线程安全。
2.StringBuilder方法执行效率高
9.列出3个Map接口的实现类。说明这些类在添加对象时,key和value是否可以为null?
HashMap类和Hashtable类
.HashMap是线程不安全的,Hashtable是线程安全的
.HashMap允许key值或者value值为null,但是Hashtable中的key值或者value值都不允许为null,否则报错.
10.==和equals的区别?
这俩个都是对俩个变量做比较的。
1)基本类型变量的比较
基本类型变量指向的不是对象,不能调用方法,所以只能使用==进行比较,并且比较的是基本类型变量的简单数值是否相等。
2)引用类型变量的比较
引用类型变量指向的是对象,所以既可以使用==进行比较,也可以使用equals进行比较
区别在于:
equals是Object中的方法,每个对象都可以调用和其他对象比较是否相等,默认比较的是俩个引用所指向的对象内存地址值(和==号的作用一样),但是也可以在类中对equals方法进行重写,按照自己的逻辑来比较俩个对象。
==是java中的基本的操作符,是不能重写的,俩个引用使用==进行比较,那么比较的是引用所指向的内存地址值是否相同。
11.接口和抽象类的区别?
抽象类也是类,除了可以写抽象方法以及不能直接new对象之外,其他的和普通类没有什么不一样的。
接口已经另一种类型了,和类是有本质的区别的,所以不能用类的标准去衡量接口。
声明类的关键字是class,声明接口的关键字是interface。
抽象类是用来被继承的,java中的类是单继承。
类A继承了抽象类B,那么类A的对象就属于B类型了,可以使用多态
一个父类的引用,可以指向这个父类的任意子类对象
注:继承的关键字是extends
接口是用来被类实现的,java中的接口可以被多实现。
类A实现接口B、C、D、E..,那么类A的对象就属于B、C、D、E等类型了,可以使用多态
一个接口的引用,可以指向这个接口的任意实现类对象
注:实现的关键字是implements
12.已知com.briup.test包下有Student类和Teacher类。使用2种方式创建Student对象。(写出代码)
13.列举可以修饰类的访问控制修饰符,并说明它们的访问范围。
类中 同包类中 子类中 不同包类中
public Y Y Y Y
protected Y Y Y N
default Y Y N N
private Y N N N
注:这里的子类中默认指的是不同包下面的子类
三.编程题:
1.以下提供了Student类:
class Student{
private int id;
private String name;
...
}
(1)通过修改代码使Student对象保存到hashSet集合中时,不保存学号相同的学生对象。
(2)通过修改代码使Student对象保存到TreeSet集合中时,不保存学号相同的学生对象。
2.补全代码getTotalPerson:
class School{
private ____ students;
private ____ teachers;
//getTotalPerson: 返回学校老师和学生总人数:
}
class Student{}
class Teacher{}
提示: School类表示学校类,学校类中的属性students表示学生的集合,teachers表示老师的集合。
补全getTotalPerson方法,返回学校的全部老师和学生人数。
3.已知接口A代码如下:
interface A<T>{
T say();
}
要求使用匿名内部类对象实现say()方法
四.程序分析题(判断代码 编译报错 运行报错 正常运行 并说明报错原因或输出结果)
1.
public class Test {
public static void main(String[] args) {
final List list = new ArrayList();
list.add(1);
System.out.println(list);
}
}
2.
public class Test {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add(new StringBuffer("a"));
for (String str : list) {
System.out.println(str);
}
}
}
3.
public class Test {
public static void main(String[] args) {
A<? super Object> a = new A<String>();
a = new A<Integer>();
System.out.println(a.id);
}
}
class A<T>{
public T id;
}
4.
public class Test {
public static void main(String[] args) {
Action.a = 2;
System.out.println(Action.a);
}
}
interface Action{
int a = 1;
}
5.
public class Test {
public static void main(String[] args) {
A a = new A(2);
System.out.println(a.ID);
}
}
class A{
public final int ID;
{
ID = 1;
}
public A(int id){
this.ID = id;
}
}
6.
public class Test {
public static void main(String[] args) {
A a = new A(129);
A b = new A(129);
Long num = a.id;
Long num2 = b.id;
System.out.println(num.equals(num2));
}
}
class A{
public Long id;
public A(Long id) {
this.id = id;
}
}
7.
public class Test {
public static void main(String[] args) {
System.out.println(Gender.FEMALE);
System.out.println(Gender.MALE.getName());
}
}
enum Gender{
MALE("男"),FEMALE("女");
private String name;
public Gender(){
}
public Gender(String name){
this.name= name;
}
public String getName() {
return name;
}
}