Java基础面试题及答案.docx

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

Java基础面试题及答案

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

答:简单说就是包含关系。JVM是Java虚拟机,负责执行字节码;JRE是Java运行环境,除了JVM,还包含运行Java程序必需的类库(比如rt.jar);JDK是Java开发工具包,里面不仅有JRE,还多了编译器(javac)、调试工具(jdb)这些开发用的工具。开发时必须装JDK,而只运行Java程序的话,装JRE就够了。

问:面向对象的三大特征是什么?分别怎么理解?

答:封装、继承、多态。

封装就是把数据和操作数据的方法封装在类里,比如一个User类,把name、age设为private,通过getter/setter访问,这样能保护数据不被随意修改;

继承是子类继承父类的属性和方法,比如Student类继承Person类,就不用再写Person里的name、eat()方法了,还能扩展自己的study()方法,减少重复代码;

多态是同一个行为在不同对象上有不同表现,比如父类Animal有个shout()方法,子类Cat重写为“喵喵叫”,Dog重写为“汪汪叫”,用Animala=newCat()这样的父类引用调用shout(),就能表现出不同效果。

问:String、StringBuffer、StringBuilder有什么区别?

答:主要看可变性和线程安全。

String是不可变的,每次拼接字符串(比如a+b)都会新生成一个String对象,频繁拼接会浪费内存;

StringBuffer是可变的,而且线程安全(方法加了synchronized),但效率低一点,适合多线程环境;

StringBuilder也是可变的,但线程不安全,效率比StringBuffer高,单线程下拼接字符串优先用它,比如循环里拼字符串,用StringBuilder比String快很多。

问:int和Integer有什么区别?自动装箱拆箱是怎么回事?

答:int是基本数据类型,直接存数值,默认值0;Integer是int的包装类,是对象,默认值null,还能调用方法(比如parseInt())。

自动装箱就是把int自动转成Integer,比如Integeri=10;底层其实是Integer.valueOf(10);

自动拆箱是把Integer自动转成int,比如intj=i;底层是i.intValue()。

注意个小坑:Integer有缓存池,默认缓存-128到127之间的数值,所以Integera=127;Integerb=127;a==b会是true,但如果是128,a==b就是false,因为超过缓存范围会new新对象,而==比较的是对象地址。

问:try、catch、finally执行顺序是怎样的?finally一定会执行吗?

答:正常情况是先执行try里的代码,如果没异常,执行完try就走finally;如果有异常,异常处之后的try代码不执行,跳去对应的catch处理,处理完catch再走finally。

finally不是绝对会执行,比如try里直接调用System.exit(0)终止虚拟机,或者电脑突然断电,这种极端情况finally才不执行。另外要注意:如果try或catch里有return,finally会在return之前执行,而且如果finally里也有return,会覆盖try/catch里的返回值。

问:ArrayList和LinkedList的区别是什么?怎么选?

答:底层结构不一样。ArrayList是基于动态数组实现的,查询快(通过索引直接找,时间复杂度O(1)),但增删慢(比如在中间删元素,后面的元素要移位);

LinkedList是基于双向链表实现的,增删快(只需要改前后节点的指针,O(1)),但查询慢(要从头或尾遍历,O(n))。

选的话看场景:如果是查多改少(比如频繁get(i)),用ArrayList;如果是改多查少(比如频繁add(0)、remove(0)),用LinkedList。另外ArrayList初始化时可以指定容量,避免频繁扩容浪费内存。

问:静态变量(static)和实例变量有什么区别?

答:首先是所属不同,静态变量属于类,整个类只有一份,存在方法区;实例变量属于对象,每个对象都有一份,存在堆内存。

调用方式也不一样,静态变量可以用“类名。变量名”或“对象。

文档评论(0)

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

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

1亿VIP精品文档

相关文档