单选题
1以下两个类存在继承关系,选项中说法正确的是?( )
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
private void eat(){
System.out.println(name+"在吃饭");
}
}
public class Student extends Person {
public Student(String name, int age) {
super(name, age);
}
public void eat(){
System.out.println("学生在吃饭");
}
public void eat2(){
System.out.println("学生在吃饭");
}
}
A、 Student类中的eat()方法是对父类方法的重写。
B、 Student类中的eat2()方法是对父类方法的重写。
C、 Student类中的构造方法是对父类方法的重写。
D、 Student类中没有任何方法是对父类方法的重写。
正确答案:D
父类方法是私有的,子类不能重写,方法重写的前提是继承,父类中的eat()方法被private所修饰,那么就不会被子类继承,也就不存在方法的重写。而构造方法也不会被子类继承,也就不存在方法的重写。
2 继承是Java面向对象三大特征之一,提高了代码的重用性.下列选项中不包含继承关系的是?()
A、 class Son extends Father{}
B、 class Son implements Inter1{}
C、 interface Inter1 extends Inter2{}
D、 class Son extends Father implements Inter2{}
正确答案:B
继承关系是用extends关键字
3根据以下代码使用多态创建对象,并且调用子类特有方法,下列选项中正确的是?()
class Fu{
public void fun1(){
System.out.println("我是fu类fun1方法");
}
}
class Zi extends Fu{
public void fun2(){
System.out.println("我是zi的fun1方法");
}
}
class Son extends Fu{
public void fun2(){
System.out.println("我是son的fun1方法");
}
}
A:
Fu fu = new Zi();
fu.fun2();
B:
Fu fu = new Son();
Zi zi = (Zi)fu;
zi.fun2();
C:
Fu fu = new Son();
Son son = (Son)fu;
son.fun2();
D:
Fu fu = new Fu();
Son son = (Son)fu;
son.fun2();
正确答案:C
首先多态格式为:父类 对象名 = new 子类();所以D选项明显错误,其次多态的特点不能使用子类特有的方法,如果想要使用必须向下转型,所以A选项错误,而且向下转型必须是一个还原操作才可以,而B选项不是还原操作,所以正确答案C
4关于接口和抽象类的区别,说法正确的是()
A、 抽象类和接口中只能定义静态变量
B、 抽象类和接口中都只能定义抽象方法
C、 抽象类具备构造方法,接口中没有构造方法
D、 抽象类和接口两者都是,只允许单继承
正确答案:C
接口和抽象类的区别:
抽象类:
- 抽象类中可以定义抽象方法外也可以定义构造器,可以包含静态方法静态变量,以及普通方法普通变量,总之就只是失去创建对象的能力,除此之外,普通类有的,抽象类都具备;
- 一个类只能继承一个抽象类;
- 有抽象方法的类必须声明为抽象类,而抽象类未必要有抽象方法;
- 抽象类中抽象方法的访问类型可以是public、protected和default。
接口:
- JDK7之前,接口中的只能定义常量和抽象方法。
- JDK8之后,接口中可以有默认方法,静态方法,JDK9又新增私有方法等非抽象方法。
- 接口中不能定义构造方法。
- 一个类可以实现多个接口。
- 抽象方法默认都是 public abstract 修饰的,可以省略不写。
常量默认都是 public static final修饰的,可以都省略不写也可任意省略哪个。相同点:
- 都不能被实例化。
- 一个类如果继承了某个抽象类或者实现了某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍需要被声明为抽象类。
作用区别:
1.抽象类可以被子类继承,而且只能单继承。
2.接口可以被子类实现,而且支持多实现;接口也可以被其他接口继承,而且是多继承。
5以下关于抽象类和接口的说法错误的是( )
A、 在抽象类中可以没有抽象方法
B、 实现抽象类和接口的类必须实现其中的所有抽象方法,除非它也是抽象类
C、 接口中定义的变量默认都是public static final,且必须为其赋值,而且不能改变值
D、 接口中的方法都必须加上public关键字
正确答案:D
6将下面代码用lambda表达式替换正确的是( )[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WslTwgUt-1668077687655)(Java基础测试/a0bcac19468049058cb62f89f85cab48.png)]
A、 new Thread(() -> System.out.println("Hello World!"));
B、 new Thread(() -> "Hello World!");
C、 new Thread( -> "Hello World!");
D、 new Thread( -> System.out.println("Hello World!"))
正确答案:A
7观察下列代码,求最终结果:( )
Stream<String> original = Stream.of("Hello.java", "java编程思想.pdf", "IOS开发快速入门.pdf", "stream.java","小葵花宝典.txt","如何学好java.txt");
Stream<String> result = original.filter(s -> s.contains("java")).skip(1);
System.out.println(result.count());
A、 3
B、 4
C、 2
D、 1
正确答案:A
8观察下列代码,输出的结果是? ()
HashMap<String, Integer> map = new HashMap<>();
map.put("张三", 18);
map.put("李四", 20);
map.put("张三", 20);
System.out.println(map.get("张三"));
A、 张三:18
B、 20
C、 18
D、 张三:20 李四:20
正确答案:B
9请问 set 集合中最终有几个元素 ()
有一个学生类:
class Student{
int age;
public Student() {
}
public Student(int age) {
this.age= age;
}
}
public class Demo03 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add(new Student(18));
set.add(new Student(18));
set.add(new Student(20));
System.out.println(set.size());
}
}
A、 1
B、 2
C、 3
D、 0
正确答案:C
10下列关于Map集合的说法正确的是
A、 Map集合的value不能重复
B、 Map集合的key和value能存放基本数据类型的数据也能存放引用数据类型的数据
C、 Map集合的key和value只能是引用数据类型
D、 Map集合的key存放的数据是可以重复的
正确答案:C
11下列遍历Map集合的方式正确的是
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("张无忌","赵敏");
hashMap.put("杨过","小龙女");
hashMap.put("郭靖","黄蓉");
hashMap.put("令狐冲","任盈盈");
A、 for (int i = 0; i < hashMap.size(); i++) {
String s = hashMap.get(i);
System.out.println(s);
}
B、 for (String s:hashMap){
String s1 = hashMap.get(s);
System.out.println(s1);
}
C、 Set<String> keySet = hashMap.keySet();
for (String key : keySet) {
String value = hashMap.get(key);
System.out.println(key+"="+value);
}
D、 Set<Entry<String, String>> set = hashMap.entrySet();
for (Entry<String, String> stringEntry : set) {
String key = stringEntry.getKey();
String value = stringEntry.getValue();
System.out.println(key+"="+value);
}
正确答案:C
12观察以下代码,选择正确的一项( )
public class Person {
private int number;
private String name;
//省略get,set方法,空参满参以及重写toString方法
}
public static void main(String[] args) {
HashMap<Person, String> map = new HashMap<Person, String>();
//存Person对象的集合
ArrayList<Person> list = new ArrayList<>();
list.add(new Person(1,"tom"));
list.add(new Person(2,"jack"));
list.add(new Person(1,"tom"));
//存抽奖码的集合
ArrayList<String> haoma= new ArrayList<>();
String[] numbers = {"0", "1", "2", "3", "4", "5"};
//将指定的元素添加到指定的集合
Collections.addAll(haoma,numbers);
//Person对象及其抽取到的抽奖码存入到map集合
Random r = new Random();
for (int i = 0; i <list.size() ; i++) {
map.put( list.get(i), haoma.get(r.nextInt(haoma.size())));
}
}
A、 map集合可以直接使用for循环遍历。
B、 map集合可以成功存入3个person对象及其对应的抽奖码。
C、 list集合中存入的Person对象,实际只有两个。
D、 随机获取抽奖码,正确的代码应该是: r.nextInt(haoma.size()-1)。
正确答案:B
13下列选项中关于try…catch关键字异常处理的格式错误的是( )
A:
try {
} catch(Exception e) {
}
B:
try {
} catch(Exception e) {
} finally {
}
C:
try {
} finally {
}
D:
catch(Exception e) {
} finally {
}
正确答案:D
14下面代码中,输出格式要求为"2020-05-20",哪个选项是正确的()
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//此处代码应填写
______________
Date date = new Date();
String s = sdf.format(date);
System.out.println(s);
}
}
A、 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-mm");
B、 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-DD");
C、 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
D、 SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
正确答案:C
15已知代码如下:
String[] arr = {"张三","李四","王五","张三丰"};
Stream<String> s1 = _______①__________;
Stream<String> s2 = s1.filter(__________②______________);
List<String> list = s2.collect(________③__________);
System.out.println(list);
在横线处补全代码,使list集合中剩下张三和张三丰( )
A、 ①arr.stream()
②s -> s.startsWith("张")
③Collectors.toList()
B、 ①Stream.of(arr)
②s -> s.startsWith("张")
③Collectors.toList()
C、 ①arr.stream()
②String::startsWith
③Collectors.toList()
D、 ①arr.stream()
②String::startsWith
③Collector.toList()
正确答案:B
数组获取流只能用Stream.of(arr)方法.
过滤姓张的Lambda表达式s -> s.startsWith(“张”)不能用String::startsWith替换
collect方法接收的参数是Collector类型。 但是生成List的Collector要用工具类的Collectors.toList()方法来生成。
16给定java代码如下,编译运行结果是
class Person {
public static String company;
public String name;
public int age;
}
public class Demo {
public static void main(String[] args) {
Person.company="黑马";
Person p=new Person();
p.name="小明";
p.age=20;
p.company="传智";
Person p1=new Person();
p1.name="小亮";
p1.age=23;
p1.company="程序员";
System.out.println(p.name+","+p.age+","+p.company);
System.out.println(p1.name+","+p1.age+","+p1.company);
}
}
A、 小明,20,传智
小亮,23,程序员
B、 小明,20,程序员
小亮,23,程序员
C、 小明,20,黑马
小亮,23,黑马
D、 编译出错
正确答案:B
17关于抽象方法说法正确的是
A、 可以有方法体
B、 可以出现在非抽象类中
C、 使用abstract修饰的,没有方法体的方法
D、 抽象类中的方法都是抽象方法
正确答案:C
18ArrayList集合底层的数据结构
A、 数组
B、 链表
C、 队列
D、 栈
正确答案:A
19关于泛型说法错误的是
A、 泛型通配符使用?表示。
B、 泛型只能是引用数据类型。
C、 <? extends Car> ?表示匹配Car或者Car的子类。
D、 <? super Car> ?表示匹配Car或者Car的子类。
正确答案:D
20关于Object类中的equals方法,说法正确的是
A、 equals方法的作用是返回对象的地址值。
B、 equals方法,默认是比较两个对象的属性值是否一样。
C、 String类重写了Object的equals方法,比较两个字符串的内容是否相同。
D、 子类一定要重写equals方法 。
正确答案:C
21以下代码,语法不会报错的是
A、 int a = 10;
String s = a;
B、 Boolean b = "true";
C、 Integer a = null;
D、 int a = null;
正确答案:C
22下面哪个集合存储和取出是无序的
A、 ArrayList
B、 List
C、 HashMap
D、 LinkedList
正确答案:C
23以下代码片段执行后,控制台的输出结果为
public static void main(String[] args){
Map<Integer, String> map = new HashMap<>();
map.put(1,"Android");
map.put(2,"PHP");
map.put(3,"Python");
map.put(1,"Java");
map.remove(2);
System.out.println(map.get(1));
System.out.println(map.get(2));
System.out.println(map.get(3));
}
A、 Android
null
Python
B、 Java
Python
C、Android
Python
D、 Java
null
Python
正确答案:D
24观察下列代码,输出的结果是
HashMap<String, Integer> map = new HashMap<>();
map.put("老王", 18);
map.put("小张", 20);
map.put("老王", 20);
System.out.println(map.get("老王"));
A、 老王:18
B、 20
C、 18
D、 老王:20 小张:20
正确答案:B
25下列创建集合的方式不正确的是
A、 ArrayList list = new ArrayList()
B、 ArrayList<int> list = new ArrayList<int>()
C、 ArrayList<String> list = new ArrayList<>()
D、 Map<String, Integer> map = new HashMap<String, Integer>()
正确答案:B
26下列关于Map集合的说法不正确的是
A、 Map集合没有索引
B、 Map集合的value可以重复
C、 Map集合的key和value只能是引用数据类型
D、 Map集合的key和value能存放基本数据类型的数据也能存放引用数据类型的数据
正确答案:D
27Map集合的put方法添加key和value,如果键不存在是
A、 删除
B、 获取
C、 修改
D、 添加
正确答案:D
28以下程序运行之后,集合中剩下的元素是
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.remove(0);
list.remove(1);
}
A、 王五 赵六
B、 李四 王五
C、 李四 赵六
D、 张三 李四
正确答案:C
29运行以下程序,遍历集合的效果是
TreeSet<Integer> tree = new TreeSet<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
tree.add(22);
tree.add(11);
tree.add(11);
tree.add(44);
tree.add(33);
A、 22 11 44 33
B、 11 22 33 44
C、 44 33 22 11
D、 22 11 11 44 33
正确答案:C
多选题
30下列对于多态的描述哪些是正确的()
A、 想要实现多态,必须要有类的继承或者接口实现的前提
B、 实现多态没有方法的重写多态没有意义
C、 实现多态,需要父类引用指向子类对象
D、 多态的前提下,不能直接访问子类特有方法
正确答案:A,B,C,D
31将下面代码用lambda表达式替换正确的是()。
List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
System.out.println("\n第一种遍历方式:增强for循环遍历 List 集合");
for (String item : items) {
System.out.println(item);
}
A、 items.forEach(System.out::println);
B、 items.forEach(item->{System.out.println(item);});
C、 items.forEach(item->System.out.println(item));
D、 items.forEach(System.out—>println);
正确答案:ABC
32以下代码遍历Map集合,能够打印各元素的键和值的是()
A:
Set<Integer> keys = map.keySet();
for (int i = keys.size() - 1; i >= 0; i--) {
System.out.println(keys.get(i));
}
B:
Set<Integer> keys = map.keySet();
for (Integer key : keys) {
System.out.println(key);
}
C:
Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
for (Map.Entry<Integer, String> entry : entrySet) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
D:
Set<Integer> keys = map.keySet();
for (Integer key : keys) {
System.out.println(key + " : " + map.get(key));
}
正确答案:CD
33以下选项中能实现 list 集合按照元素从小到大排序的是()
List<Integer> list = new ArrayList<>();
list.add(15);
list.add(10);
list.add(12);
A:
Collections.sort(list);
Collections.reverse(list);
B:
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
C:
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
D:
Collections.sort(list);
正确答案:CD
34下列选项中关于Java中super关键字的说法正确的是
A、 super关键字是在子类对象内部指代其父类空间的引用
B、 super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
C、 子类可以通过super关键字调用父类的方法。
D、 子类可以通过super关键字调用父类的属性。
正确答案:ACD
35下列定义泛型的格式,正确的是
A、 泛型类:public class Person<T>{}
B、 泛型接口:public interface MyList<E>{}
C、 泛型方法:public <T> void method(T t){}
D、 泛型方法:public void method(<T> t){}
正确答案:ABC
36关于可变参数的说法正确的是
A、 方法中的可变参数可以有多个。
B、 方法中的可变参数必须在参数列表的最后。
C、 可变参数的底层是数组。
D、 如果方法参数是可变参数,调用方法时可以不传入参数,或者传入多个参数。
正确答案:BCD
37关于Collection的说法正确的是
A、 Collection是一个类。
B、 Collection是一个接口。
C、 Collection包含List和Set两种集合。
D、 Collection代表单列集合。
正确答案:BCD
38下列选项描述Map集合特点正确的是
A、 Map集合中的key不能重复
B、 Map集合中的value不能重复
C、 Map集合有索引
D、 Map集合无索引
正确答案:AD
39下列选项描述Set集合特点正确的是
A、 A.Set集合不能存储重复元素
B、 Set集合是有索引
C、 Set集合是无索引
D、 HashSet集合存储自定义类型,想要不重复,需要在自定义类中重写hashCode和equals方法
正确答案:A,C,D
40下列选项中能够将Date类型转换为String类型格式正确的是
A、 1.Date date = new Date();
2.SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
3.String str = sdf.parse(date);
4.System.out.println(str);
B、 1.Date date = new Date();
2.SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
3.String str = sdf.format(date);
4.System.out.println(str);
C、 1.SimpleDateFormat sdf = new SimpleDateFormat();
2.String str = sdf.format(new Date());
3.System.out.println(str);
D、 2.SimpleDateFormat sdf = new SimpleDateFormat();
3.String str = sdf.format(date);
4.System.out.println(str);
正确答案:BC
1.String转换成Date类型
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
String strDate= “2019-09-19”;
Date date = sdf.parse(strDate);2.Date转换成String型
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = new Date();
String time = sdf.format(date);
41代码如下:
1.public interface ISinger {
2. public abstract void sing();
3.}
4.public abstract class Person {
5. public abstract void eat();
6.}
7.public class Student extends Person implements ISinger {
8. public void eat() {
9. System.out.println("吃学生餐");
10. }
11. public void sing() {
12. System.out.println("歌唱祖国...");
13. }
14.}
A、 1.Student st = new Student();
2.Person s = (ISinger)st;
B、 1.Person p = new Student();
C、 1.ISinger s = new Student();
D、 1.Student st = new Student();
2.ISinger singer = (ISinger)st;
正确答案:BCD
42已知方法的定义如下,调用正确的是public static void sum(int … a){}
A、 sum()
B、 sum(11)
C、 sum(11, 22)
D、 sum(3.14, 11, 22)
正确答案:A,B,C
43下面关于Java中异常处理说法正确的是
A、 try后通常应有catch,用来处理try中的异常
B、 catch后必须有finally
C、 释放资源的代码应放在finally中
D、 处理异常的代码应放在catch中
正确答案:A,C,D
sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = new Date();
String time = sdf.format(date);
41代码如下:
1.public interface ISinger {
2. public abstract void sing();
3.}
4.public abstract class Person {
5. public abstract void eat();
6.}
7.public class Student extends Person implements ISinger {
8. public void eat() {
9. System.out.println("吃学生餐");
10. }
11. public void sing() {
12. System.out.println("歌唱祖国...");
13. }
14.}
A、 1.Student st = new Student();
2.Person s = (ISinger)st;
B、 1.Person p = new Student();
C、 1.ISinger s = new Student();
D、 1.Student st = new Student();
2.ISinger singer = (ISinger)st;
正确答案:BCD
42已知方法的定义如下,调用正确的是public static void sum(int … a){}
A、 sum()
B、 sum(11)
C、 sum(11, 22)
D、 sum(3.14, 11, 22)
正确答案:A,B,C
43下面关于Java中异常处理说法正确的是
A、 try后通常应有catch,用来处理try中的异常
B、 catch后必须有finally
C、 释放资源的代码应放在finally中
D、 处理异常的代码应放在catch中
正确答案:A,C,D