2024最新最全Java基础高频面试题汇总(1W字详细解析),java面试项目中你遇到的难题

// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,

// 这里的软引用指的是指向new String(“str”)的引用,也就是SoftReference类中T

SoftReference wrf = new SoftReference(new String(“str”));复制代码

可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。

弱引用

弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:

WeakReference wrf = new WeakReference(str);复制代码

可用场景: Java源码中的 java.util.WeakHashMap中的 key就是使用弱引用,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

虚引用

虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue中。注意哦,其它引用是被JVM回收后才被传入 ReferenceQueue中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue,使用

例子:

PhantomReference prf = new PhantomReference(new

String(“str”), new ReferenceQueue<>());复制代码

可用场景: 对象销毁前的一些操作,比如说资源释放等。** Object.finalize()虽然也可以做这类动作,但是这个方式即不安全又低效

15、 泛型常用特点 (待补充)


泛型是Java SE 1.5之后的特性, 《Java 核心技术》中对泛型的定义是:

“泛型” 意味着编写的代码可以被不同类型的对象所重用。

“泛型”,顾名思义,“泛指的类型”。我们提供了泛指的概念,但具体执行的时候却可以有具体的规则来约束,比如我们用的非常多的ArrayList就是个泛型类,ArrayList作为集合可以存放各种元素,如Integer, String,自定义的各种类型等,但在我们使用的时候通过具体的规则来约束,如我们可以约束集合中只存放Integer类型的元素,如

List iniData = new ArrayList<>()复制代码

使用泛型的好处?

以集合来举例,使用泛型的好处是我们不必因为添加元素类型的不同而定义不同类型的集合,如整型集合类,浮点型集合类,字符串集合类,我们可以定义一个集合来存放整型、浮点型,字符串型数据,而这并不是最重要的,因为我们只要把底层存储设置了Object即可,添加的数据全部都可向上转型为Object。 更重要的是我们可以通过规则按照自己的想法控制存储的数据类型。

16、Java创建对象有几种方式?


java中提供了以下四种创建对象的方式:

(1)new创建新对象

(2)通过反射机制

(3)采用clone机制

(4)通过序列化机制

17、有没有可能两个不相等的对象有相同的hashcode


有可能.在产生hash冲突时,两个不相等的对象就会有相同的 hashcode 值.当hash冲突产生时,一般有以下几种方式来处理:

(1)拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储.

(2)开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入

(3)再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数计算地址,直到无冲突.

18、深拷贝和浅拷贝的区别是什么?


浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.

深拷贝:被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都

19、final有哪些用法?

final也是很多面试喜欢问的地方,但我觉得这个问题很无聊,通常能回答下以下5点就不错了:

(1)被final修饰的类不可以被继承

(2)被final修饰的方法不可以被重写

(3)被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.

(4)被final修饰的方法,JVM会尝试将其内联,以提高运行效率

(5)被final修饰的常量,在编译阶段会存入常量池中.

除此之外,编译器对final域要遵守的两个重排序规则更好:

在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序

初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序.

20、static都有哪些用法?


所有的人都知道static关键字这两个基本的用法:静态变量和静态方法.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享.

除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作:

public calss PreCache{

static{

//执行相关操作

}

}复制代码

此外static也多用于修饰内部类,此时称之为静态内部类.

最后一种用法就是静态导包,即 import static.import static是在JDK 1.5之后引入的新特性,可以用来指定导入某个类中的静态资源,并且不需要使用类名,可以直接使用资源名,比如:

import static java.lang.Math.*;

public class Test{

public static void main(String[] args){

//System.out.println(Math.sin(20));传统做法

System.out.println(sin(20));

}

}复制代码

21、3*0.1 0.3返回值是什么


false,因为有些浮点数不能完全精确的表示出来.

22、a=a+b与a+=b有什么区别吗?


操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,

byte a = 127;

byte b = 127;

b = a + b;

// 报编译错误:cannot convert from int to byte

b += a;复制代码

以下代码是否有错,有的话怎么改?

short s1= 1;

s1 = s1 + 1;复制代码

有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1的运算结果是int类型,而s1是short类型,此时编译器会报错.

正确写法:

short s1= 1;

s1 += 1;复制代码

+=操作符会对右边的表达式结果强转匹配左边的数据类型,所以没错.

23、try catch finally,try里有return,finally还执行么?


执行,并且finally的执行早于try里面的return

结论:

(1)不管有木有出现异常,finally块中代码都会执行;

(2)当try和catch中有return时,finally仍然会执行;

(3)finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;

(4)finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

24、 Excption与Error包结构

Java可抛出(Throwable)的结构分为三种类型:被检查的异常(CheckedException),运行时异常(RuntimeException),错误(Error)。

运行时异常

定义:RuntimeException及其子类都被称为运行时异常。

特点:Java编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过。例如,除数为零时产生的ArithmeticException异常,数组越界时产生的IndexOutOfBoundsException异常,fail-fast机制产生的ConcurrentModificationException异常(java.util包下面的所有的集合类都是快速失败的,“快速失败”也就是fail-fast,它是Java集合的一种错误检测机制。当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。记住是有可能,而不是一定。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的ConcurrentModificationException 异常,从而产生fail-fast机制,这个错叫并发修改异常。Fail-safe,java.util.concurrent包下面的所有的类都是安全失败的,在遍历过程中,如果已经遍历的数组上的内容变化了,迭代器不会抛出ConcurrentModificationException异常。如果未遍历的数组上的内容发生了变化,则有可能反映到迭代过程中。这就是ConcurrentHashMap迭代器弱一致的表现。ConcurrentHashMap的弱一致性主要是为了提升效率,是一致性与效率之间的一种权衡。要成为强一致性,就得到处使用锁,甚至是全局锁,这就与Hashtable和同步的HashMap一样了。)等,都属于运行时异常。

常见的五种运行时异常:

(1)ClassCastException(类转换异常)

(2)IndexOutOfBoundsException(数组越界)

(3)NullPointerException(空指针异常)

(4)ArrayStoreException(数据存储异常,操作数组是类型不一致)

(5)BufferOverflowException

被检查异常

定义:Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。

特点 : Java编译器会检查它。 此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。例如,CloneNotSupportedException就属于被检查异常。当通过clone()接口去克隆一个对象,而该对象对应的类没有实现Cloneable接口,就会抛出CloneNotSupportedException异常。被检查异常通常都是可以恢复的。

如:

IOException

FileNotFoundException

SQLException

被检查的异常适用于那些不是因程序引起的错误情况,比如:读取文件时文件不存在引发的

FileNotFoundException 。然而,不被检查的异常通常都是由于糟糕的编程引起的,比如:在对象引

用时没有确保对象非空而引起的 NullPointerException 。

错误

定义 : Error类及其子类。

特点 : 和运行时异常一样,编译器也不会对错误进行检查。

当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。程序本身无法修复这些错误的。例如,VirtualMachineError就属于错误。出现这种错误会导致程序终止运行。OutOfMemoryError、ThreadDeath。

Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等

25、OOM你遇到过哪些情况,SOF你遇到过哪些情况


OOM:

(1)OutOfMemoryError异常

Java Heap 溢出:

一般的异常信息:java.lang.OutOfMemoryError:Java heap spacess。

java堆用于存储对象实例,我们只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,就会在对象数量达到最大堆容量限制后产生内存溢出异常。

出现这种异常,一般手段是先通过内存映像分析工具(如Eclipse Memory Analyzer)对dump出来的堆转存快照进行分析,重点是确认内存中的对象是否是必要的,先分清是因为内存泄漏(Memory Leak)还是内存溢出(Memory Overflow)。

如果是内存泄漏,可进一步通过工具查看泄漏对象到GCRoots的引用链。于是就能找到泄漏对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自动回收。

如果不存在泄漏,那就应该检查虚拟机的参数(-Xmx与-Xms)的设置是否适当。

(2)虚拟机栈和本地方法栈溢出

如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。

如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常

这里需要注意当栈的大小越大可分配的线程数就越少。

(3)运行时常量池溢出

异常信息:java.lang.OutOfMemoryError:PermGenspace

如果要向运行时常量池中添加内容,最简单的做法就是使用String.intern()这个Native方法。该方法的作用是:如果池中已经包含一个等于此String的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。由于常量池分配在方法区内,我们可以通过-XX:PermSize和-XX:MaxPermSize限制方法区的大小,从而间接限制其中常量池的容量。

(4)方法区溢出

方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。也有可能是方法区中保存的class对象没有被及时回收掉或者class信息占用的内存超过了我们配置。

异常信息:java.lang.OutOfMemoryError:PermGenspace

方法区溢出也是一种常见的内存溢出异常,一个类如果要被垃圾收集器回收,判定条件是很苛刻的。在经常动态生成大量Class的应用中,要特别注意这点。

SOF(堆栈溢出StackOverflow):

StackOverflowError 的定义:当应用程序递归太深而发生堆栈溢出时,抛出该错误。

因为栈一般默认为1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。

栈溢出的原因:递归调用,大量循环或死循环,全局变量是否过多,数组、List、map数据过大。

26、 简述线程、程序、进程的基本概念。以及他们之间关系是什么?


线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如 CPU 时间,内存空间,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。

27、线程有哪些基本状态?(补充)


Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java并发编程艺术》4.1.4 节)。

28、Java 序列化中如果有些字段不想进行序列化,怎么办?


对于不想进行序列化的变量,使用 transient 关键字修饰。

transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。transient 只能修饰变量,不能修饰类和方法。

29、Java 中 IO 流


Java 中 IO 流分为几种?

(1)按照流的流向分,可以分为输入流和输出流;

(2)按照操作单元划分,可以划分为字节流和字符流;

(3)按照流的角色划分为节点流和处理流。

Java Io 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。

InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。

OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

按操作方式分类结构图:

按操作对象分类结构图:

30、 Java IO与 NIO的区别(补充)


NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。

31、java反射的作用于原理


(1)定义:

反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。

这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

(2)哪里会用到反射机制?

jdbc就是典型的反射

Class.forName(‘com.mysql.jdbc.Driver.class’);

//加载MySQL的驱动类复制代码

这就是反射。如hibernate,struts等框架使用反射实现的。

第一步:获取Class对象,有4中方法:

1)Class.forName(“类的路径”);

2)类名.class

3)对象名.getClass()

4)基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象

(3)实现Java反射的类:

1)Class:表示正在运行的Java应用程序中的类和接口

注意: 所有获取对象的信息都需要Class类来实现。

2)Field:提供有关类和接口的属性信息,以及对它的动态访问权限。

3)Constructor:提供关于类的单个构造方法的信息以及它的访问权限

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-hxMuI72v-1711726198118)]

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

[外链图片转存中…(img-2ZlmCZqb-1711726198119)]

[外链图片转存中…(img-Mb0IHF7E-1711726198119)]

[外链图片转存中…(img-gbKYmisq-1711726198120)]

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. Java的基本数据类型有哪些?它们的大小是多少? 答:Java的基本数据类型有byte、short、int、long、float、double、char和boolean。它们的大小分别为8位、16位、32位、64位、32位、64位、16位和1位。 2. Java的访问修饰符有哪些?它们分别代表什么意思? 答:Java的访问修饰符有public、protected、default和private。它们分别代表公开的、受保护的、默认的和私有的。 3. Java的final关键有什么作用? 答:final关键可以用来修饰类、方法和变量。它的作用是使被修饰的类、方法或变量不可被继承、重写或修改。 4. Java的static关键有什么作用? 答:static关键可以用来修饰类、方法和变量。它的作用是使被修饰的类、方法或变量在内存只有一份拷贝,可以直接通过类名访问。 5. Java的抽象类和接口有什么区别? 答:抽象类和接口都是用来实现多态的机制。抽象类可以包含抽象方法和非抽象方法,可以有构造方法和成员变量,不能被实例化。接口只能包含抽象方法和常量,不能有构造方法和成员变量,可以被多个类实现。 6. Java的重载和重写有什么区别? 答:重载是指在同一个类定义多个方法,它们的方法名相同但参数列表不同。重写是指子类重写父类的方法,方法名和参数列表都相同。 7. Java的异常处理机制是什么? 答:Java的异常处理机制是通过try-catch-finally语句块来实现的。当程序出现异常时,会抛出一个异常对象,可以通过catch语句捕获并处理异常,finally语句块的代码会在try或catch语句块执行完毕后执行。 8. Java的线程是什么?如何创建线程? 答:线程是程序执行的最小单位,可以同时执行多个线程实现并发执行。可以通过继承Thread类或实现Runnable接口来创建线程,然后调用start()方法启动线程。 9. Java的集合框架有哪些?它们的区别是什么? 答:Java的集合框架包括List、Set、Map和Queue等。它们的区别在于List是有序的、可重复的集合,Set是无序的、不可重复的集合,Map是键值对的集合,Queue是队列集合。 10. Java的反射机制是什么?如何使用反射? 答:Java的反射机制是指在运行时动态获取类的信息和调用类的方法。可以通过Class类的实例来获取类的信息,然后使用反射API来调用类的方法。使用反射可以实现动态加载类、动态创建对象、动态调用方法等功能。 ### 回答2: Java作为一门广泛应用于软件开发的编程语言,被越来越多的公司和企业所采用。因此,Java开发工程师也成为各大公司的热门职位之一。为了能够通过Java开发工程师的面试,我们需要对Java基础知识进行深入学习。以下是Java基础高频面试题(2021年最新版)。 1. Java语言的特性? Java语言有四个特点,分别是: 1.1 简单性:Java语言的设计非常简单,易于使用和学习,减少了语言的复杂度。 1.2 面向对象:Java语言支持面向对象的编程方式,有助于代码的重用性和维护性。 1.3 平台无关性:Java语言可以在不同的平台上运行,具有跨平台的特性。 1.4 安全性:在Java语言,提供了许多安全机制,如类的访问控制、安全管理器等,能够保证程序的安全性和正确性。 2. Java包是什么? Java的包是一种组织程序的方式,它能够将相关的类、接口和其他文件组织在一起,形成一个层次结构。Java的包有助于代码的重用性和可维护性。 3. Java语言的数据类型有哪些? Java语言支持的数据类型包括: 3.1 基本数据类型:byte、short、int、long、float、double、char、boolean。 3.2 引用数据类型:类、接口、数组。 4. String和StringBuffer有什么区别? String是Java的一个不可变的符串类,所有的符串操作都是创建新的String对象,因此会占用大量的内存。而StringBuffer是可变的符串类,可以动态修改其的内容,在进行符串操作时不会产生新的String对象,因此可以减少内存的消耗。 5. Java的异常处理机制是什么? Java的异常处理机制可以帮助程序员处理程序发生的异常情况,包括编译时异常和运行时异常。在Java,异常由try-catch块捕获,通过throw语句抛出异常。 6. final、finally、finalize有什么区别? final是Java的一个关键,可以修饰类、方法和变量。在修饰类时,表示该类不能被继承;在修饰方法时,表示该方法不能被覆盖;在修饰变量时,表示该变量是一个常量,不能被修改。 finally是Java的一个关键,可以用在try-catch块,表示无论try和catch块的代码是否发生异常,都会执行finally块的代码。 finalize是Java的一个方法,是Object类的一个方法,用于垃圾回收时执行的方法,用来释放对象占据的资源。 7. Java系统输入输出有哪些方法? Java的System类提供了3种标准I/O流: 7.1 标准输入流:System.in,用于读取用户在命令行输入的数据。 7.2 标准输出流:System.out,用于将数据输出到命令行。 7.3 标准错误流:System.err,用于输出错误信息。 8. Java的多线程是怎么实现的? Java的多线程机制通过线程对象和run()方法来实现。在Java,线程是Thread类的对象,每个线程都有自己的run()方法,用于执行线程的任务。通过调用start()方法来启动线程,等到线程调度器分配时间片之后,线程才开始执行。如果要停止执行线程,可以调用stop()方法,但不建议使用该方法,因为可能会导致一些不可预料的结果发生。 9. Java的集合框架有哪些? Java的集合框架包括Collection和Map两个接口,分别用于存储对象的集合和键值对的映射集合。常用的集合类型包括:List、Set、Map、Queue。 10. Java的泛型是什么? 泛型是Java的一个特性,可以使得代码更加灵活和类型安全。通过使用泛型,可以将类型作为参数传递到方法或类,并在程序运行时根据实际传递的类型进行编译。 以上是Java基础高频面试题(2021年最新版),希望对广大读者在Java开发工程师的面试有所帮助。 ### 回答3: Java是一门广泛应用于各行各业的编程语言,它的应用范围包括大型企业级系统、游戏开发、移动应用程序以及物联网等。Java基础面试题面试Java开发人员时必不可少的环节,下面我会简要介绍一些最新的2021年Java基础面试题。 1. Java的四种访问修饰符是什么?他们分别表示什么? 答:Java的四种访问修饰符包括:public、protected、private和default(没有显示声明访问修饰符,则默认为default)。public表示变量或方法可以在任何地方被调用;protected表示变量或方法限制为同一包内或者其子类使用;private表示变量或方法只能在当前类使用;default表示变量或方法在同一包内可见。 2. Javaobject类的基本方法有哪些?请解释这些方法的作用。 答:Object类的基本方法包括:equals()、hashCode()、toString()、clone()和finalize()。equals()方法用于判断两个对象是否相等,需要进行重写;hashCode()方法返回一个哈希码值,用于快速查找数据;toString()方法用于返回一个对象的符串表示形式;clone()方法用于创建一个对象的副本;finalize()方法在垃圾回收之前被调用,用于释放对象占用的资源。 3. 什么是Java的接口?接口有什么作用? 答:Java的接口是一个包含方法签名和常量的集合,它可以被类实现。Java的实现类必须实现接口定义的所有方法,否则就必须声明自己为抽象类。接口定义了一种规范,使得类可以按照规范进行编写。接口主要用于实现解耦,使开发人员可以更轻松地维护和升级代码。 4. Java的final关键有什么作用? 答:final关键可以用于修饰类、方法和变量。final修饰类表示该类不能被继承;final修饰方法表示该方法不能被子类重写;final修饰变量表示该变量的值不能被修改。final关键除了保护对象的线程安全和防止错误修改外,还可以提高代码的性能。 5. Java的static关键有什么作用? 答:static关键可以用于修饰类、方法和变量。static修饰类表示该类的变量和方法可以直接通过类名调用,不需要实例化类;static修饰方法表示该方法是属于类的,而不是属于对象的;static修饰变量表示该变量是属于类的,而不是属于对象的。static关键可以提高程序的性能和代码的复用性。 以上是2021年Java基础面试题的简要介绍,当然这些只是一部分,Java基础知识广泛且深刻,希望大家在准备面试时能够多加练习掌握相关知识,从而更好地应对Java面试挑战。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值