当前位置:网站首页 > Java基础 > 正文

java语言基础题库



史上最全Java面试题合集400道(面试20k+程序员必备)

1. final关键字的作用?

被final修饰的类不可以被继承,被final修饰的方法不可以被重写,被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.被final修饰的方法,JVM会尝试将其内联,以提高运行效率,被final修饰的常量,在编译阶段会存入常量池中.

2. java语言基础题库 abstract class 和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一一个变量, 其类型是-一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final 成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。

3. Java 集合类: list、 set、queue、 map、stack 的特点与用法?

Map

Map是键值对,键Key是唯一不能重复的, -一个键对应一一个值, 值可以重复。

TreeMap可以保证顺序,HashMap不保证顺序,即为无序的,Map 中可以将Key和Value单

独抽取出来,其中KeySet()方法可以将所有的keys抽取成- -个 Set,而Values() 方法可以

将map中所有的values抽取成一个集合。

Set

不包含重复元素的集合,set 中最多包含一个null元素,只能用Iterator实现单项遍历,

Set中没有同步方法。

List

有序的可重复集合,可以在任意位置增加删除元素,用Iterator实现单向遍历,也可用

ListIterator实现双向遍历。

Queue

Queue遵从先进先出原则,使用时尽量避免add()和remove()方法,而是使用offer ()来添加

元素,使用poll()来移除元素,它的优点是可以通过返回值来判断是否成功,LinkedList

实现了Queue接口,Queue 通常不允许插入null元素。

Stack

Stack遵从后进先出原则,Stack 继承自Vector,它通过五个操作对类Vector进行扩展,允许将向量视为堆栈,它提供了通常的push和pop操作,以及取堆栈顶点的peek()方法、

测试堆栈是否为空的empty方法等。

用法

如果涉及堆栈,队列等操作,建议使用List。

对于快速插入和删除元素的,建议使用LinkedList.

如果需要快速随机访问元素的,建议使用ArrayList.

4.说出ArrayList, Vector, LinkedList 的存储性能和特性?

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便

增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内

存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized 方法(线程安全), .

通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要

进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。.

5.内存泄漏和内存溢出?

内存泄漏(memoryleak),是指应用程序在申请内存后,无法释放已经申请的内存空间,一

次内存泄漏危害可以忽略,但如果任其发展最终会导致内存溢出Coutofmemory) 。如读取

文件后流要进行及时的关闭以及对数据库连接的释放。

内存溢出(outofmemory)是指应用程序在申请内存时,没有足够的内存空间供其使用。如我

们在项目中对于大批量数据的导入,采用分批量提交的方式。

6.反射中,Class. forName ()和ClassLoader. loadClass ()的区别?

lass.forName(lassName)方法,

内.部实际调用的方法是

Class.forName(className,true,lassloader);

第2个boolean参数表示类是否需要初始化,Class.forNamel(lassName)默认 是需要初始化,

一旦初始化,就会触发目标对象的static 块代码执行,static 参数也也会被再次初始

化,CassaderladlasslassName) 方法,内部实际调用的方法是

Classloader.loadClass(className,false);第2个boolean 参数,表示目标对象是否进行链接,

如果需要获取到这个【Java面试知识点整理】文档的话,评论文章+私信资料即可。


  • 上一篇: java的基础语法
  • 下一篇: java链表基础
  • 版权声明


    相关文章:

  • java的基础语法2025-04-17 22:58:04
  • java基础公众号2025-04-17 22:58:04
  • Java程序设计基础与实践2025-04-17 22:58:04
  • java数组基础试题2025-04-17 22:58:04
  • java基础怎么入门2025-04-17 22:58:04
  • java链表基础2025-04-17 22:58:04
  • 蚌埠java基础培训2025-04-17 22:58:04
  • java基础补课2025-04-17 22:58:04
  • 基础贴吧java代码2025-04-17 22:58:04
  • java基础贯穿项目2025-04-17 22:58:04