Java高频面试题(二)

本文详细探讨了Java编程中的一些关键概念和面试常见问题,包括HashMap的数据结构、Java编译过程、JVM内存管理、构造方法的使用、面向对象的特性、反射机制的功能、Histroy对象的属性、容器的特性和内存管理策略等。通过对这些问题的解答,帮助读者深入理解Java语言的原理和实践。
摘要由CSDN通过智能技术生成

1. HashMap的数据结构是怎样的?

A.数组
B.链表
C.数组+链表
D.二叉树

答案:
C

解析:

JDK8以后,HashMap的数据结构是数组+链表+红黑树

2. 在 JAVA 编程中,Java 编译器会将 Java 程序转换为( )?

A.字节码
B.可执行代码
C.机器代码
D.以上都不对

答案:  
A

解析:

  • 编译器将Java源代码编译成字节码class文件

  • 类加载到JVM里面后,执行引擎把字节码转为可执行代码

  • 执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行。

3.下面有关JVM内存,说法错误的是?

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

答案:
C

解析:
运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器

  • 虚拟机栈区:也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。

  • 堆区:JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。
    -方法区:所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。

  • 程序计数器:线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。

  1. JAVA中,下列语句哪一个正确()

A.class中的constructor不可省略
B.constructor必须与class同名,但方法不能与class同名
C.constructor在一个对象被new时执行
D.一个class只能定义一个constructor

答案:
C

解析:
A 省略构造函数,编译器会自动生成。
D 构造函数可以重载
B 方法是可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。

5.在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()

A.this.A(x)
B.this(x)
C.super(x)
D.A(x)

答案:
B

解析:
this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);
super是调用父类的方法;
A(a)这种形式是在new一个类时使用。

6.下列选项中属于面向对象程序设计语言特征的是()

A.继承性
B.多态性
C.相似性
D.封装性

答案:
A B D

解析:<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值