Java选择题日常记录——Day1—Day15

Day 1

Q1

下列表述错误的是?()

  • int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
  • 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
  • 封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
  • final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性。

题解

final不能修饰接口


Q2

下面这三条语句输出结果:

System.out.println("is"+ (100 + 5));
System.out.println(100 + 5 + "is");
System.out.println("is"+ (100 + 5));
  • is 1005, 1005 is, is 105

题解

在java中,“+” 和 “+=” 是经过重载的运算符,而java不允许程序员进行运算符的重载。

如果 “+” 之前是String,那么此时,“+” 的作用就是连接两个字符串;若此时 “+” 后面是基本数据类型的话,可以直接进行连接,若是引用数据类型的话,则会调用该对象的toString()方法。


Q3

要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )

  • 让该类不使用任何关键字
  • 使用private关键字
  • 使用protected关键字
  • 使用void关键字

题解

default和protected的区别是:前者只要是外部包,就不允许访问;后者只要是子类就允许访问,即使子类位于外部包。
总结:default拒绝一切包外访问;protected接受包外的子类访问

在这里插入图片描述


Q4

以下描述错误的一项是( )?

  • 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
  • 原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
  • 方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
  • Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

题解

方法区和堆内存是线程共享的;程序计数器、虚拟机栈是线程隔离的
在这里插入图片描述


Q5

假设如下代码中,若t1线程在t2线程启动之前已经完成启动。代码的输出是()
在这里插入图片描述

  • Thread 2 sent notify. Thread 1 wake up

题解

执行obj.wait();时已释放了锁,所以t2可以再次获得锁,然后发消息通知t1执行,但这时t2还没有释放锁,所以肯定是执行t2,然后释放锁,之后t1才有机会执行。



Day 2

Q1

下面关于垃圾收集的描述哪个是错误的?

  • 使用垃圾收集的程序不需要明确释放对象
  • 现代垃圾收集能够处理循环引用问题
  • 垃圾收集能提高程序员效率
  • 使用垃圾收集的语言没有内在泄漏问题

题解

java的垃圾收集机制主要针对新生代和老年代的内存进行回收,不同的垃圾收集算法针对不同的区域;也会有内存泄露问题,例如访问资源文件,流不关闭,访问数据库等连接不关闭。


Q2

下面有关Java的说法正确的是( )

  • 一个类可以实现多个接口
  • 抽象类必须有抽象方法
  • protected成员在子类可见性可以修改
  • 通过super可以调用父类构造函数
  • final的成员方法实现中只能读取类的成员变量
  • String是不可修改的,且java运行环境中对string对象有一个对象池保存

题解

在这里插入图片描述


Q3

有关静态初始化块说法正确的是?

  • 无法直接调用静态初始化块
  • 在创建第一个实例前或引用任何静态成员之前,将自动调用静态初始化块来初始化
  • 静态初始化块既没有访问修饰符,也没有参数
  • 在程序中,用户可以控制何时执行静态初始化块

题解

在这里插入图片描述


Q4

下面哪些描述是正确的:( )
在这里插入图片描述

  • b = null执行后b可以被垃圾回收
  • a = null执行后b可以被垃圾回收
  • a = null执行后a可以被垃圾回收
  • a,b必须在整个程序结束后才能被垃圾回收
  • 类A和类B在设计上有循环引用,会导致内存泄露
  • a, b 必须在start方法执行完毕才能被垃圾回收

题解


Q5

在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好。()

  • False

题解

使用泛型的好处:类型安全、消除强制类型转换、潜在的性能收益,所以泛型只是提高了数据传输安全性,并没有改变程序运行的性能;

泛型仅仅是java的语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的


Day 3

Q1

映射 (Map) 的key和value都不可重复。( )

  • False

题解

Map接口有两个经典的子类分别是 Hashtable 和 Hashmap。
Hashtable 线程安全,不支持key和value为空,key不能重复,但value可以重复,不支持key和value为null;
Hashmap 非线程安全,支持key和value为空,key不能重复,但value可以重复,支持key和value为null。


Q2

以下是java concurrent包下的4个类,选出差别最大的一个

  • Semaphore
  • ReentrantLock
  • Future
  • CountDownLatch

题解

Semaphore:类,控制某个资源可被同时访问的个数;
ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类;
Future:接口,表示异步计算的结果。


Q3

在11行添加什么能创建内部类的实例?
在这里插入图片描述

  • InsideOne ei=eo.new InsideOne();
  • eo.InsideOne ei=eo.new InsideOne();
  • InsideOne ei=EnclosingOne.new InsideOne();
  • EnclosingOne.InsideOne ei=eo.new InsideOne();

题解


Q4

对 Map 的用法,正确的有:

  • new java.util.Map().put(“key” , “value”) ;
  • new java.util.SortedMap().put(“key” , “value”) ;
  • new java.util.HashMap().put( null , null ) ;
  • new java.util.TreeMap().put( 0 , null ) ;

题解

在这里插入图片描述



Day 4

Q1

JVM内存不包含如下哪个部分( )

  • Stacks
  • PC寄存器
  • Heap
  • Heap Frame

题解


Q2

如下代码的输出是

eE

题解

由于arr[0] =0,所以在进入 test()方法里面会在第一个if 上抛出一个 NullPointerException,
接着会执行 finally 的语句, (finally语句先于 return 和 throw语句执行),输出一个’e,
然后回到 main方法中,由于捕捉到异常,所以进入到catch语句中,然后打印一个’E’,
所以最终结果为"eE"


Q3

java8中,下面哪个类用到了解决哈希冲突的开放定址法

  • LinkedHashSet
  • HashMap
  • ThreadLocal
  • TreeMap

题解

threadlocalmap使用开放定址法解决haah冲突,hashmap使用链地址法解决hash冲突


Q4

下面关于Spring的说法中错误的是()

  • Spring是一系列轻量级Java EE框架的集合
  • Spring中包含一个“依赖注入”模式的实现
  • 使用Spring可以实现声明式事务
  • Spring提供了AOP方式的日志系统

题解

Spring并没有为我们提供日志系统,我们需要使用AOP(面向方面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统


Q5

以下哪个没有实现java.util.Map接口

  • Hashtable
  • HashMap
  • Vector
  • IdentityHashMap

题解

A,B,D都实现了Map接口,其中A与B的区别是一个是线程安全的,一个是线程不安全的;C中Vector是实现了List接口,是一个线程安全的List



Day 5

Q1

在第16行插入哪段代码可以获得一个Point对象的坐标?( )

  • Point p = Line.getPoint();
  • Line.Point p = Line.getPoint();
  • Point p = (new Line()).getPoint();
  • Line.Point p = (new Line()).getPoint();

题解

类Point定义在类Line中,类Line中有类Point的方法getPoint(),外部类Triangle要实现获取类Line中的内部类,需要:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();

  • (
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值