JavaSE高频面试题及参考答案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

JavaSE高频面试题及参考答案

一、基础概念

JDK、JRE、JVM三者的区别是什么?

简单说就是“包含关系”:JDK包含JRE,JRE包含JVM。

JDK(JavaDevelopmentKit)是开发工具包,带编译器(javac)、调试工具等,开发者写代码必须装;

JRE(JavaRuntimeEnvironment)是运行环境,带核心类库(如java.lang)和JVM,用户跑Java程序只需要装JRE;

JVM(JavaVirtualMachine)是虚拟机,负责把字节码翻译成机器码,跨平台的核心就是它,但JVM不能单独运行,得依赖JRE的类库支持。

Java为什么能跨平台?“一次编译,到处运行”的原理是什么?

关键在“中间字节码”和“JVM”。

我们写的.java文件会被javac编译成.class字节码文件(这一步是“一次编译”),而不同操作系统(Windows、Linux)会装对应的JVM,JVM会把相同的字节码翻译成当前系统能识别的机器码(这一步是“到处运行”)。

注意:不是JVM跨平台,是不同系统有不同的JVM实现,字节码才是跨平台的核心。

==和equals()的区别?

先看数据类型:

基本类型(int、char等):==比的是值,equals()不能用(因为基本类型不是对象,没有这个方法);

引用类型(如String、自定义类):==比的是内存地址(是不是同一个对象),equals()默认和==一样(因为Object类里的equals()就是用==实现的),但很多类会重写equals(),比如String重写后比的是字符串内容。

举个例子:Stringa=abc;Stringb=newString(abc);这里a==b是false(地址不同),a.equals(b)是true(内容相同)。

二、面向对象(OOP)

Java面向对象的三大特性?各自的作用是什么?

封装、继承、多态。

封装:把属性和方法藏在类里,对外只暴露必要的接口(比如用private修饰属性,提供get/set方法),好处是保护数据安全,减少耦合;

继承:子类继承父类(用extends),能复用父类的代码,还能重写父类方法扩展功能,注意Java只能单继承,但可以多实现接口;

多态:同一个行为(方法)在不同对象上有不同表现,比如父类引用指向子类对象(Animaldog=newDog();),调用方法时会执行子类的实现。多态的前提是:继承、重写、父类引用指向子类对象。

重载(Overload)和重写(Override)的区别?

核心看“是否在同一个类”和“方法签名”:

维度

重载(Overload)

重写(Override)

所在类

同一个类

父类和子类

方法签名

方法名相同,参数列表不同(个数/类型/顺序)

方法名、参数列表、返回值完全相同

返回值

可以不同

必须相同(或子类类型,即协变返回)

权限修饰符

无限制

子类权限不能比父类小(比如父类是public,子类不能是private)

例子

add(inta)和add(inta,intb)

父类Animaleat()和子类Dogeat()

抽象类(abstractclass)和接口(interface)的区别?

实际开发中用的时候要注意场景:

抽象类:可以有抽象方法(无实现)和普通方法(有实现),可以有成员变量(可赋值),只能单继承,关键字是abstract;

接口:JDK1.8后可以有默认方法(default修饰,有实现)和静态方法,成员变量默认是publicstaticfinal(必须赋值),可以多实现,关键字是interface;

用抽象类体现“is-a”关系(比如DogisaAnimal),用接口体现“has-a”能力(比如DoghasaRunable能力)。

三、集合框架

ArrayList和LinkedList的区别?实际开发中怎么选?

底层结构决定了它们的性能差异:

ArrayList:底层是动态数组,查改快(通过索引直接定位,O(1)),增删慢(尤其是中间位置,需要移动元素,O(n));

LinkedList:底层是双向链表,增删快(只需要改前后节点的指针,O(1)),查改慢(需要从头/尾遍历,O(n));

选法:查改多、增删少(比如做列表展示)用ArrayList;增删多、查改少(比如做队列、栈)用LinkedList。

注意:两者都不是线程安全的,多线程下可以用CopyOnWrite

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档