java经典面试题总结

news/2024/7/5 5:36:02

1.请简述Java的继承,重写和多态的概念和运用
继承是一种Java中重要的面向对象编程方式,它允许一个类从另一个类继承某些属性和方法,在这种关系下,子类可以重写父类的方法,从而实现不同的行为。
多态是继承实现的一种关键概念,它允许一个对象以多种形式实现某个方法,通过这种方式,代码可以更加灵活,并提高代码的可扩展性和可重用性。

2.Java中的数组和列表有什么区别?
数组:数组长度是固定的,旨在存储具有相同类型的数据,而列表用于存储大量的数据,可以存储任何类型的数据。
列表:具有可变长度,可以在运行时动态添加或删除元素。

3.什么是Java中常见的运行时异常?
常见的Java运行时异常包括NullPointerException(空指针异常)、ArithmeticException(算术异常)、ArrayIndexOutOfBoundsException(数组越界异常),这些异常通常会在程序运行时抛出,导致程序崩溃或者运行不正确的结果。

4.请简述Java的线程和同步机制。
线程:Java程序的执行单元,允许程序并行执行。
同步机制:一种用于协调多个线程之间访问共享数据的方法,它可以避免资源冲突和数据竞争,确保线程之间的正确交互。

5.线程、进程、多线程、线程池
线程:是指进程中的一个单独的执行路径。一个进程可以包含多个线程,每个线程都可以并行执行不同的任务。

多线程:是指在同一时间内运行多个线程来完成多个任务。多线程提高程序的性能和响应速度。但是增加了代码的复杂性,同时需要考虑线程安全和死锁等问题。

线程池:是一组预先创建的线程,它们可以被重复使用来执行多个任务。使用线程池可以避免在创建和销毁线程时产生额外的开销,从而提高程序的性能。Java 中提供了 Executor 框架来实现线程池。

6.请举例说明Java中的面向对象编程(OOP)原则。
面向对象编程原则包括封装、继承和多态
封装:指将数据和方法组合成一个类中,以允许访问控制;
继承:允许类从另一个类继承属性和方法;
多态:允许一个对象用不同形式表示某个方法的实现。

7.讲一下你对Java中反射的理解和应用场景。
反射:Java中一种常用的高级特性,它允许在运行时动态获取类的信息,并且可以在运行时动态调用类的方法和修改类的属性。
Java中的反射被广泛应用于框架和插件的开发中。

8.如何在Java中使用泛型以及它们的优点和缺点?
泛型是Java中一种强类型
优点:约束和类型安全的编程方式,它可以在运行时检查数据类型,抑制类型转换异常,并提高代码的可读性和重用性。
缺点:可能导致运行时效率下降,会导致代码复杂性增加,限制范围窄
Java中的泛型被广泛应用于数据结构、集合类、IO操作和注解等领域。

9.Java 8中新特性包括哪些,它们有什么优点?
Java 8中引入了一些新特性,包括Lambda表达式、方法引用、默认方法、Stream API、时间日期API等。
这些新特性使得Java更加现代化、简洁和灵活,并且可以提高代码的可读性、可维护性和可扩展性。

10.如何在Java中处理大文件?请举例说明。
在处理大文件时,Java可以使用多种技术以提高性能和减少内存占用。其中,常用的技术包括分块处理、基于内存映射的IO、基于缓存的IO等。这些技术可以通过Java中的File类、BufferedReader、BufferedWriter、FileChannel等API实现。

11.Java中多态的实现原理
Java中的多态是面向对象编程的一个重要特性,它允许一个类的对象表现出多种形态。多态的实现主要依赖于继承和接口,通过方法重写和接口实现来实现。

实现原理: 多态的实现原理主要依赖于Java的动态方法分派机制。当一个子类重写了父类的方法时,Java运行时系统会根据对象的实际类型来决定调用哪个方法。这个过程是在运行时进行的,而不是在编译时。这使得我们可以通过父类引用来调用子类的方法,实现多态的特性。

12.JVM中的垃圾回收器是如何工作的?
垃圾回收器是Java虚拟机的一种组成部分,它负责自动回收不再使用的对象,并释放内存空间。
垃圾回收器通常采用分代回收机制,即把Java对象分为不同的代,按照不同的策略进行自动回收。

13、Java 中 IO 流的分类
Java中的流可以按照数据的类型和传输的方向来分类,分别由四个抽象类来表示

按照数据的类型,流分为字节流和字符流:
字节流:InputStream,OutputStream。字节流按照8位传输,可以处理任何类型的数据,包括二进制数据。
字符流: Reader,Writer。字符流按照16位传输,只能处理字符或者字符串,可以直接处理Unicode字符。

按照传输的方向,流分为输入流和输出流:
输入流:InputStream,Reader。输入流用于从数据源读取数据到内存中。
输出流:OutputStream,Writer。输出流用于从内存中写出数据到目标位置。

14、字节流和字符流的区别
字节流和字符流的区别主要在于处理数据的类型不同:
字节流可以处理任何类型的数据,包括二进制数据,而字符流只能处理字符或者字符串;
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
字节流在读写文本数据时,需要进行编码和解码的转换,而字符流则不需要。

15、JDK 和 JRE 有什么区别?
JDK:Java开发工具包
JRE:Java运行环境

JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。

16.final 在 java 中有什么作用?
(1)用来修饰一个引用
如果引用为基本数据类型,则该引用为常量,该值无法修改;
如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
如果引用时类的成员变量,则必须当场赋值,否则编译会报错。
(2)用来修饰一个方法
当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
(3)用来修饰类
当用final修改类时,该类成为最终类,无法被继承。

17.八种基本数据类型
1、整型
byte 、short 、int 、long
2、浮点型
float 、 double
3、字符型
char
4、布尔型
boolean

18、普通类和抽象类有哪些区别?
抽象类不能被实例化;
抽象类可以有抽象方法,只需申明,无须实现;
有抽象方法的类一定是抽象类;
抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;
抽象方法不能声明为静态、不能被static、final修饰。

19、接口和抽象类有什么区别?
(1)接口
接口使用interface修饰;
接口不能实例化;
类可以实现多个接口;

①java8之前,接口中的方法都是抽象方法,省略了public abstract。
②java8之后;接口中可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现;

(2)抽象类
抽象类使用abstract修饰;
抽象类不能被实例化;
抽象类只能单继承;
抽象类中可以包含抽象方法和非抽象方法,非抽象方法需要有方法体;
如果一个类继承了抽象类,①如果实现了所有的抽象方法,子类可以不是抽象类;②如果没有实现所有的抽象方法,子类仍然是抽象类。

20、throw 和 throws 的区别?
(1)throw
作用在方法内,表示抛出具体异常,由方法体内的语句处理;
一定抛出了异常;
(2)throws
作用在方法的声明上,表示抛出异常,由调用者来进行异常处理;
可能出现异常,不一定会发生异常;


http://lihuaxi.xjx100.cn/news/1704141.html

相关文章

冷笑话-1

代码检视时,程序员A看着下面的代码,疑惑地问程序员B:“为什么不用重载?” class MyClass {public MyClass queryById(long id) { //......}public MyClass queryByName(String Name) { //......}public MyClass queryByIdAndNam…

圆通快递订单创建接口asp版,面单打印接口asp版,asp圆通快递物流轨迹查询接口

今天接到一个朋友的急call,要帮他写一个圆通快递订单创建接口asp版,因为这位朋友的项目是asp写的,因此只能用asp来写这个接口,不说废话,上代码,有需要的可以参考,对了,我同时写了三个…

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策)

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策) “面向未来改变游戏规则的——可持续能源与环境学域” ���专注于能源环…

【C++】格式与实例化操作——[模板]详解(7)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一. 模板参数与模板参数列表1)模板参数…

【C语言进阶】指针进阶(三)

指针进阶(三) 9.指针和数组笔试题解析10.指针笔试题 9.指针和数组笔试题解析 数组名的理解 数组名是数组首元素的地址 但是有2个例外: sizeof(数组名),这里的数组名表示整个数组,sizeof(数组名)计算的是整个数组的大…

postman打开后,以前的接口记录不在,问题解决

要不这些文件保存在C:\Users\{用户名}\AppData\Roaming\Postman 比如,你目前使用的window登录用户是abc,那么地址便是C:\Users\abc\AppData\Roaming\Postman 打开后,这个目录下会有一些命名为backup-yyyy-MM-ddThh-mm-ss.SSSZ.json类似的文…

ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别

ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别 Springboot是什么? ChatGPT: Spring Boot是一个用于构建Java应用程序的开源框架,它是Spring Framework的一部分,但旨在简化Spring应用程序的开发。Sprin…

Redis的五种常用(基本)数据类型

目录 1、Redis简介 2、五种常用(基本)数据类型 2.1 String 数据结构 ⭐常用用法 举例(Linux版本) 2.2 List 数据结构 ⭐常用用法 举例(Linux版本) 2.3 Set 数据结构 ⭐常用用法 举例&#xf…