栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础面试高频问题总结(持续更新)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础面试高频问题总结(持续更新)

前言

话不多说,直接总结,乐于分享,懂得都懂!

问题列表

1、String、StringBuilder、StringBuffer 的区别?

从运行速度考虑:StringBuilder > StringBuffer > String

解析:String是字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后对象是不可变的,但后两者的对象是变量,是可变的。另外,Java中对String对象进行的操作,实际上是一个不断创建新对象和回收旧对象的一个过程,因此执行效率慢。而StringBuilder和StringBuffer对象是变量,对变量进行操作实际上就是对该对象进行更改,而不进行创建和回收的操作,所以效率比String快。

从线程安全考虑:StringBuilder是线程不安全的,StringBuffer是线程安全的,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的。


2、== 和 equals 的区别是什么?

== 比较的值是否相等,如果作用于基本数据类型的变量,则直接比较存储的值是否相等,如果作用于引用数据类型的变量,则比较的是所指向的对象的地址。

对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象。如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。


3、int和Integer有什么区别?

Integer是int的包装类,int则是java的一种基本数据类型;Integer变量必须实例化后才能使用,而int变量不需要;Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值;Integer的默认值是null,int的默认值是0。


4、Java 中的final关键字有哪些用法?

修饰类:表示该类不能被继承;
修饰方法:表示方法不能被重写;
修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。


5、final、finally、finalize的区别?

final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract是反义词。将变量声明为final,可以保证它们在使用中不被改变,被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。被声明为final的方法也同样只能使用,不能在子类中被重写。

finally:通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。

finalize:Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。


6、创建线程有哪几种方式?

继承Thread类创建线程类;
通过Runnable接口创建线程类;
通过Callable和Future创建线程。


7、线程和进程的区别?

简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。


8、为什么重写equals()就要重写hashCode()?

如果两个对象相等,则hashCode一定也相等;如果两个对象的hashCode相等,则两个对象不一定相等。

hashCode实现:通过获取到的哈希码来确定该对象在哈希表中的索引位置(tip:HashMap中使用hash作为indexFor的输入),哈希码也称散列码,实际上就是返回一个int整数;

equals实现:如果对象重写了equals()方法,重写的比较逻辑一般是比较两个对象的内容是否相等;如果没有重写,那就是比较两个对象的地址是否相同,等价于“==”;

当我们不在HashSet, HashTable, HashMap等等这些本质是散列表的数据结构中用到这个类,此时,equals() 用来比较该类的两个对象是否相等,而hashCode() 则根本没有任何作用,所以,不用理会hashCode()。


9、Error和Exception有什么区别?

Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。


10、运行时异常与受检异常有何异同?

Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。


11、列出一些你常见的运行时异常?

ArithmeticException(算术异常)
ClassCastException (类转换异常)
IllegalArgumentException (非法参数异常)
IndexOutOfBoundsException (下标越界异常)
NullPointerException (空指针异常)
SecurityException (安全异常)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号