您的位置 首页 java

Java基础笔试练习(十九)

Java基础笔试练习(十九)

1.this代表了()的对象引用,super表示的是当前对象的()对象?

A.当前类 当前类

B.当前类的父类 当前类

C.当前类 当前类的父类

D.以上都不正确

答案:

C

解析:

this代表当前对象,也就是当前类的对象的引用

super代表其父类对象

2.假设一个 list初始化为{2,9,5,4,8,1}。 在第一次冒泡排序后,list变成了()?

A.2, 9, 5, 4, 8, 1

B.2, 9, 5, 4, 1, 8

C.2, 5, 9, 4, 8, 1

D.2, 5, 4, 8, 1, 9

答案:

D

解析:

3.Java的Daemon线程,setDaemon( )设置必须要?

A.在start之前

B.在start之后

C.前后都可以

答案:

A

解析:

setDaemon()方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。

4. 下面关于 构造方法 的说法不正确的是 ()

A.构造方法也属于类的方法,可以创建对象的时候给成员变量赋值

B.构造方法不可以 重载

C.构造方法没有返回值

D.构造方法一定要和类名相同

答案:

B

解析:

1.构造方法也是类的方法,可以在创建对象时为成员变量赋值

2.构造方法可以进行重载,但是参数列表必须不相同,不以返回值和访问级别进行区分

3.构造方法没有返回值

4.构造方法一定要与定义为public的类同名

综上所述,B不正确

5.下面论述正确的是()?

A.如果两个对象的 hashcode 相同,那么它们作为同一个HashMap的key时,必然返回同样的值

B.如果a,b的hashcode相同,那么a.equals(b)必须返回true

C.对于一个类,其所有对象的hashcode必须不同

D.如果a.equals(b)返回true,那么a,b两个对象的hashcode必须相同

答案:

D

解析:

hashcode和equals的约定关系如下:

1、如果两个对象相等,那么他们一定有相同的哈希值(hash code)。

2、如果两个对象的哈希值相等,那么这两个对象有可能相等也有可能不相等。(需要再通过equals来判断)

6.如果int x=20, y=5,则语句System.out.println(x+y +””+(x+y)+y); 的输出结果是()

A.2530

B.55

C.2052055

D.25255

答案:

D

解析:

1)不论有什么运算,小括号的优先级都是最高的,先计算小括号中的运算,得到x+y +””+25+y

2)任何字符与 字符串 相加都是字符串,但是是有顺序的,字符串前面的按原来的格式相加,字符串后面的都按字符串相加,得到25+“”+25+5

3)上面的结果按字符串相加得到25255

7. 下列方法定义中 , 正确 的是 ()

A.int x( ){ char ch=’a’; return (int)ch; }

B.void x( ){ …return true; }

C.int x( ){ …return true; }

D.int x( int a, b){ return a+b; }

答案:

A

解析:

A.Java中涉及到byte、short和char类型都可以强制转化为int,符合返回类型 A正确

B.方法中定义为void 应该没有返回值,但返回值为boolean类型 B错

C. 方法中类型为int,应该返回int类型值,但是 返回值为boolean类型 C错

D.方法应该定义为int(int a,int b),所以D错

8.设一组权值集合W={2,3,4,5,6},则由该权值集合构造的哈夫曼树中带权路径长度之和为()。

A.20

B.30

C.40

D.45

答案:

D

解析:

答案

9.枚举(enum)属于原始数据类型(primitive type)。

A.正确

B.错误

答案:

B

解析:

枚举类是一种特殊对的类,既然是类。那他就不是原始数据类型了

10.在Java中,以下关于 方法重载 和方法重写描述正确的是?

A.方法重载和方法的重写实现的功能相同

B.方法重载出现在父子关系中,方法重写是在同一类中

C.方法重载的返回值类型必须一致,参数项必须不同

D.方法重写的返回值类型必须相同或相容。

答案:

D

解析:

重载(overload):只要方法名 一致 ,其他(参数列表、返回值)怎么折腾随便。

重写(overriding):只有实现的功能代码 不一致 ,其他的(函数名、参数列表、返回值类型)必须都一致。

11.以下哪个区域不属于新生代?

A.eden区

B.from区

C.元数据区

D.to区

答案:

C

解析:

eden : from : to =8:1:1,用于新生代垃圾回收。 元数据区是用来替换永久代的,大概那个意思。 引入元数据区的意义: JDK8引入了一个新的native的内存区块,Metaspace(也就是题主所说的“元数据”区域)。也就是说,之后你在调优或者调查JVM问题的时候就不用和PermGen区域打交道了,也不会有java. lang .OutOfMemoryError: PermGen 这种内存不足的问题来骚扰你。

12.下列哪一种叙述是正确的()

A. abstract 修饰符可修饰字段、方法和类

B.抽象方法的body部分必须用一对大括号{ }包住

C.声明抽象方法,大括号可有可无

D.声明抽象方法不可写出大括号

答案:

D

解析:

abstract修饰符可修饰字段、方法和类. × abstract只能用来修饰类、方法,不修饰字段(属性)。

抽象方法的body部分必须用一对大括号{ }包住. × 抽象方法用“;”结束。

声明抽象方法,大括号可有可无. × 抽象方法没有方法体,也不用大括号。

13.off-heap是指那种内存()

A.JVM GC能管理的内存

B.JVM进程管理的内存

C.在JVM老年代内存区

D.在JVM新生代内存

答案:

B

解析:

off-heap叫做堆外内存,将你的对象从堆中脱离出来 序列化 ,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化,也不受垃圾收集。序列化和反序列化将会影响部分性能(所以可以考虑使用FST-serialization)使用堆外内存能够降低GC导致的暂停。堆外内存不受垃圾收集器管理,也不属于老年代,新生代。

14.非 抽象类 实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.

A.正确

B.错误

答案:

B

解析:

15.如下代码,执行test()函数后,屏幕打印结果为()

public class Test2
{
 public void add(Byte b)
 {
 b = b++;
 }
 public void test()
 {
 Byte a = 127;
 Byte b = 127;
 add(++a);
 System.out.print(a + " ");
 add(b);
 System.out.print(b + "");
 }
}
 

A.127 127

B.128 127

C.129 128

D.以上都不对

答案:

D

解析:

add()方法里面的修改值并不会起作用,而add(++a)会使a数值越界成-128,所以输出为-128 127

16.若串S=′software′,其子串的数目是()

A.8

B.37

C.36

D.9

答案:

B

解析:

字串: n(n+1)/2 + 1

非空子串:n(n+1)/2

非空真子串:n(n+1)/2 – 1

17.

以下关于final关键字说法错误的是()

A.final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性

B.final修饰的类肯定不能被继承

C.final修饰的方法不能被重载

D.final修饰的变量不允许被再次赋值

答案:

AC

解析:

1.final修饰变量,则等同于常量

2.final修饰方法中的参数,称为最终参数。

3.final修饰类,则类不能被继承

4.final修饰方法,则方法不能被重写。

5.final 不能修饰抽象类

6.final修饰的方法可以被重载 但不能被重写

18.下面代码在main()方法中第八行后可以正常使用的是( )

public class Test
{
 private int a=10;
 int b=20;
 static int c=1;
 public static void main(String arg[])
 {
 Test t = new Test();
 }
 }
 

A.t.a

B.this.c

C.Test.b

D.Test.c

答案:

AD

解析:

A : 在private 修饰不能在外部类中调用,main 方法属于Test类的方法, 所以 对象 t 可以在他自己的类方法中调用它的private

B : static 方法中没有this 这么一说

C: b不是static变量

D: 合理

19.执行如下程序代码

char chr = 127;

int sum = 200;

chr += 1;

sum += chr;

后,sum的值是 ; ( )

备注:同时考虑c/c++和Java的情况的话

A.72

B.99

C.328

D.327

答案:

AC

解析:

因为char类型的数据范围为0到127,127+1超过了这个范围,而127的二进制为01111111,加1后按照有符号输出就为-128,所以200-128=72

20.

Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )

A.Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下

B.通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法

C.通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员

D.Java 反射机制 提供了字节码修改的技术,可以动态的修剪一个类

E.Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多

F.Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率

答案:

A D F

解析:

反射指的是在运行时能够分析类的能力的程序。

反射机制可以用来:

1.在运行时分析类的能力–检查类的结构–所用到的就是java.lang.reflect包中的Field、Method、Constructor,分别用于描述类的与、方法和 构造器 。A中的Class类在java.lang中。

2.在运行时查看对象。

3.实现通用的数组操作代码。

反射机制的功能:

在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

反射机制常见作用:

动态加载类、动态获取类的信息(属性、方法、构造器);动态构造对象;动态调用类和对象的任意方法、构造器;动态调用和处理属性;获取泛型信息(新增类型:ParameterizedType,GenericArrayType等);处理注解(反射API:getAnnotationsdeng等)。

反射机制性能问题:

反射会降低效率。

void setAccessible(boolean flag):是否启用访问安全检查的开关,true屏蔽Java语言的访问检查,使得对象的私有属性也可以被查询和设置。禁止安全检查,可以提高反射的运行速度。

可以考虑使用:cglib/javaassist操作。

推荐

大厂笔试内容集合(内有详细解析) 持续更新中….

ProcessOn是一个在线作图工具的聚合平台~

文末

欢迎关注 Coder编程 公众号,主要分享数据结构与算法、Java相关知识体系、框架知识及原理、Spring全家桶、微服务项目实战、DevOps实践之路、每日一篇互联网大厂面试或笔试题以及PMP项目管理知识等。更多精彩内容正在路上~

微信公众号

文章来源:智云一二三科技

文章标题:Java基础笔试练习(十九)

文章地址:https://www.zhihuclub.com/175692.shtml

关于作者: 智云科技

热门文章

网站地图