Java刷题笔记8

T1 父类子类的调用

假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}

public void methodTwo()
{
System.out.print("B");
}
}

public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}

public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}

答案: ABDC

只要是被子类重写的方法,不被super调用都是调用子类方法

img

T2 Hashtable 和 HashMap 的区别

image-20231014101636256

HashTable和HashMap的区别(7点):

1.继承的父类不同:HashTable继承Dictory类,HashMap继承AbstractMap.但都实现了Map接口;

2.线程安全性不同:HashTable是线程安全的,适用于多线程;HashMap是非线程安全,更适合于单线程;

3.是否提供contains方法:HashTable中保留了contains方法,与constainsValue功能相同;HashMap中去掉了contains方法;

4.key和value是否可为null值:HashTable的key、value都不允许null值;HashMap,null可以作为key;

5.遍历方式的内部实现不同:HashTable、HashMap都使用了Iterator,HashTable还使用过Enumeration方式;

6.hash值不同:HashTable直接使用对象的hashCode,而HashMap重新计算hash值。

7.内部使用的数组初始化和扩容方式不同:Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂;Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。

作者:98年饭崽
链接:https://www.nowcoder.com/exam/test/74968216/submission?pid=53634742&testCallback=undefined
来源:牛客网

T3 静态方法

阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()

1
2
3
4
5
6
7
8
9
10
11
12
13
package NowCoder;
class Test {
public static void hello() {
System.out.println("hello");
}
}
public class MyApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=null;
test.hello();
}
}

A 能编译通过,并正确运行

B因为使用了未初始化的变量,所以不能编译通过

C 以错误的方式访问了静态方法

D 能编译通过,但因变量为null,不能正常运行

答案: A

静态方法的使用不依靠对象,只看类型,在编译时就确定了

 

T4 构造方法的调用时机

image-20231014110410450

readObject方法只是从文件中还原对象,clone只是一种复制拷贝对象。

构造函数的作用是完成对象的初始化。当程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化。而选项B、D中,对象的初始化并不是通过构造函数完成的,而是读取别的内存区域中的对象的各个域来完成。

作者:joso
链接:https://www.nowcoder.com/exam/test/74971287/submission?pid=53636911&testCallback=undefined
来源:牛客网