[2024最新] java八股文实用版(附带原理)---java基础篇

说说JVM、JRE和JDK的关系?

JVM、JRE 和 JDK 是 Java 生态系统中的三个核心组件,它们在 Java 开发和运行时环境中扮演着不同的角色。

JVM虚拟机
Java虚拟机是一种抽象计算机,它为 Java 程序提供了运行环境。JVM 的主要职责是执行 Java 字节码,并将其转换为机器代码,以便在特定平台上运行。JVM 是实现 Java 跨平台的关键组件。
​
JRE运行环境
Java 运行时环境是一个软件包,它提供了运行 Java 应用程序所需的所有组件。JRE 包含 JVM 以及 Java 类库和其他支持文件。JRE 是运行Java 应用程序的最低要求。JRE包含JVM,用于执行Java字节码。JRE包含Java标准类库,这些类库为 Java 应用提供基础功能。
​
JDK开发工具包
Java 开发工具包是为 Java 开发者提供的完整开发环境。JDK 包含 JRE 以及开发 Java 应用程序所需的工具和库。JDK 是开发和编译 Java 程序的必备工具。JDK 包含一个完整的 JRE 环境。

java三大特性是什么?

封装
封装是将对象的属性和方法封装在一起,并对外隐藏对象的内部细节,只暴露必要的接口。通过封装,可以保护对象的状态不被外部直接修改,增强了代码的安全性和可维护性。
​
继承
继承是面向对象编程中的一个机制,通过继承,一个类可以继承另一个类的属性和方法,从而实现代码的重用。主要使用extends关键字来声明继承
​
多态
多态是指同一个方法在不同对象中具有不同的实现方式。多态可以通过方法重载(Overloading)和方法重写(Overriding)来实现。
​
方法重载:在同一个类中,方法名相同但参数列表不同。
方法重写:在子类中重新定义父类中的方法。

构造器是否可被重写?

可以被重载:在同一个类中,可以定义多个构造器,只要它们的参数列表不同。
不能被重写:因为构造器不属于类的继承成员,并且它们的名称必须与类名相同。

String、StringBuffer 和 StringBuilder 的区别是什么?

String:不可变,线程安全
​
StringBuffer:可变性,线程安全性能比builder高,适用多线程
​
StringBuilder:可变性,线程不安全,性能高,适用单线程

抽象类能使用final修饰吗?

不能,final修饰符用于表示类不能被继承,而抽象类的主要用途就是被继承以提供基础实现或定义抽象方法供子类实现。

静态变量和实例变量的区别?

静态变量用static关键字定义,通过类名或对象实例访问,而实例变量必须通过对象实例访问。

final finally finalize区别?

final:用于声明常量、不可重写的方法和不可继承的类。
finally:用于异常处理,确保某些代码总是会执行。
finalize:用于对象被垃圾回收之前的清理操作,但由于不确定性,不推荐依赖。

父类的静态方法能否被子类重写?

不能,父类的静态方法不能被子类重写。静态方法是通过类名调用的,而不是通过实例调用的,所以它们不能表现出多态性。不过,子类可以定义一个与父类静态方法同名的方法,这种情况称为方法隐藏,而不是方法重写。

Java有哪些数据类型?

整数类型
byte、short、int、long
浮点类型
float、double
布尔类型
boolean
引用数据类型
类、接口、数组

short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

short s1 = 1; s1 = s1 + 1;会导致编译错误,因为s1 + 1的结果是int类型,不能直接赋值给short类型的变量。
short s1 = 1; s1 += 1;是正确的,因为复合赋值运算符+=会隐式地进行类型转换。

final有什么用?

声明变量时:值不能被改变
声明方法时:不能被子类重写
声明类时:不能被继承

this与super的区别?

this:
引用当前对象的实例变量
​
super:
调用父类的构造函数、调用父类的方法

==和equals的区别是什么?

== 是一个比较操作符,用于比较两个操作数的内存地址(引用)是否相同。它可以用于比较基本数据类型和对象引用。
用于基本数据类
许多类重写了equals()方法,用于比较对象的内容。例如,String类重写了equals()方法,用于比较字符串的内容。

JDK中常用的包有哪些?

java.lang、java.util、java.io、java.sql、java.net

什么是字符串常量池?

字符串常量池是Java中用于优化字符串存储和管理的一种机制。它是Java运行时环境的一部分,专门用于存储字符串字面量和某些字符串对象,以减少内存消耗和提高性能。
​
字符串字面量的存储
当你在代码中使用字符串字面量(例如"hello")时,Java会首先检查字符串常量池中是否已经存在一个相同的字符串。如果存在,Java会直接引用该字符串,而不会创建新的字符串对象。如果不存在,Java会将该字符串添加到常量池中,然后引用它。
​
字符串对象的存储
使用new关键字创建的字符串对象,不会自动进入字符串常量池。它们在堆内存中创建,且每次都会创建一个新的对象。可以使用String类的intern()方法将字符串对象添加到常量池中。例如,调用str.intern()会将字符串str添加到常量池中,如果常量池中已经存在相同内容的字符串,则返回该字符串的引用。

instanceof关键字的作用?

主要作用
类型检查:确定对象是否是某个类的实例或是该类的子类的实例。
避免类型转换异常:在进行类型转换之前,使用instanceof可以防止ClassCastException异常。

什么是泛型?

泛型(Generics)是Java中的一种机制,本质是参数化类型,就是说所操作的数据类型被指定为一个参数。泛型提供了一种类型安全的方式来定义数据结构和算法,使代码更加通用和灵活,同时减少了类型转换和类型检查的错误。
​
泛型的限制
1、 基本类型:泛型不支持基本数据类型(如int、char等),只能使用其对应的包装类(如Integer、Character等)。
2、 类型擦除:Java的泛型是通过类型擦除实现的,这意味着在运行时,泛型类型信息会被移除,所有泛型类型都被替换为其原始类型(通常是Object)。这限制了某些操作,如创建泛型数组。
3、 静态上下文中使用泛型:不能在静态字段或静态方法中使用类型参数,因为类型参数是在实例化时才指定的,而静态成员与具体实例无关。

泛型擦除是什么?

泛型擦除是Java编译器在编译泛型代码时的一种机制。它的目的是确保泛型能够与Java的旧版本(即不支持泛型的版本)兼容。
在Java中,泛型信息只存在于源代码和编译时,在运行时,所有的泛型类型信息都会被擦除。这意味着在运行时,所有的泛型类型都被替换为它们的上限类型(如果没有显式指定上限,则默认为Object)。

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

浅拷贝:仅复制对象的值类型属性,对于引用类型属性,只复制引用,即新旧对象共享同一个引用类型的实例。修改新对象的引用类型属性会影响原对象。
深拷贝:不仅复制对象的值类型属性,还递归地复制引用类型属性,即新旧对象的引用类型属性指向不同的实例。修改新对象的引用类型属性不会影响原对象。

Java序列化中如果有些字段不想进行序列化如何处理?

使用transient关键字
如果有些字段不想进行序列化,可以使用transient关键字来标记这些字段。被标记为transient的字段在序列化过程中会被忽略,不会被写入到序列化流中。
​
自定义序列化方法
通过实现Serializable接口的自定义序列化方法来控制序列化过程。这些方法是writeObject和readObject。

jdk8 有哪些新特性?

Lambda表达式、Stream流、函数式接口、默认方法和静态方法

介绍一下Java的数据结构

基本数据结构
数组 (Array):固定大小的容器,用于存储相同类型的元素。数组在内存中是连续存储的,支持通过索引快速访问元素。
​
集合框架 (JCF)List 接口:有序集合,允许重复元素。ArrayList:基于动态数组实现,支持快速随机访问和遍历。LinkedList:基于双向链表实现,适合频繁的插入和删除操作。Vector:类似于ArrayList,但线程安全。Set 接口:无序集合,不允许重复元素。HashSet:基于哈希表实现,提供快速的插入、删除和查找操作。LinkedHashSet:保持插入顺序的HashSet。TreeSet:基于红黑树实现,元素按自然顺序排序。Map 接口:键值对映射,不允许重复键。HashMap:基于哈希表实现,提供快速的键值对存取。LinkedHashMap:保持插入顺序的HashMap。TreeMap:基于红黑树实现,键按自然顺序排序。

运行时异常和非运行时异常的区别是什么?

运行时异常运行时异常是指在程序运行期间可能会发生的异常。这类异常是 RuntimeException 类及其子类的实例。1、 无需显式捕获或声明:方法中不需要显式地捕获或声明可能抛出的运行时异常。编译器不会强制要求你处理这些异常。2、通常是编程错误:运行时异常通常是由于编程错误引起的,例如访问空指针、数组越界、类型转换错误等。3、常见的运行时异常:● NullPointerException● ArrayIndexOutOfBoundsException● ClassCastException● IllegalArgumentException非运行时异常非运行时异常是指在编译时必须处理的异常。这类异常是 Exception 类及其子类的实例。1、 需要显式捕获或声明:方法中必须显式地捕获或声明可能抛出的非运行时异常。编译器会强制要求你处理这些异常。2、 通常是可预见的异常情况:非运行时异常通常是由于合理的、可以预见的异常情况引起的,例如文件未找到、网络连接失败等。3、 常见的非运行时异常:● IOException● SQLException● FileNotFoundException● ClassNotFoundException

装箱和拆箱的原理和作用?

装箱和拆箱是指基本类型与其对应的包装类之间的相互转换。装箱和拆箱的引入简化了基本类型与对象类型之间的转换操作,靠构造器自动转换

java函数参数是值拷贝还是引用拷贝?

基本类型参数传递
对于基本类型,传递的是值的拷贝。在函数内部对参数的任何修改都不会影响到原始变量。
引用类型参数传递
对于引用类型,传递的也是值的拷贝,但这个值是对象的引用。这意味着在函数内部可以通过引用修改对象的内容,但不能改变引用本身指向的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14236.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

PL/SQL执行.sql文件

1.编写.sql文件,创建update.sql文件,文件如下: set feedback offset define off--更新表中所有人的年龄update a set age18;prompt Done. 2.打开plsql选择命令窗口,即选择File->New->Command Window; 打开后的…

论文5—《基于改进YOLOv5s的轻量化金银花识别方法》文献阅读分析报告

论文报告:基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档 基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档摘要国内外研究现状国内研究现状国外研究现状 研究目的研究问题使用的研究方法试验研究结果文献结论创新点和对现有研究的贡献1. 目标检测技术2. …

【数据结构】ArrayList与LinkedList详解!!!——Java

目录 一🌞、List 1🍅.什么是List? 2🍅.List中的常用方法 二🌞、ArrayList 1🍍.什么是ArrayList? 2🍍.ArrayList的实例化 3🍍.ArrayList的使用 4🍍.ArrayList的遍…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3(10) 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

微信版产品目录如何制作?

微信作为我国最流行的社交媒体平台,拥有庞大的用户群体。许多企业都希望通过微信来推广自己的产品,提高品牌知名度。制作一份精美、实用的微信版产品目录,是企业微信营销的重要手段。微信版产品目录的制作方法,帮助您轻松入门。 ​…

消息推送之SSE

一、简介 市面上很多系统都有 以上三种的消息提醒。但大多分为2类,一类移动端,一类web端比,通常在服务端会有若干张消息推送表,用来记录用户触发不同事件所推送不同类型的消息,前端主动查询(拉&#x…

react中如何在一张图片上加一个灰色蒙层,并添加事件?

最终效果: 实现原理: 移动到图片上的时候,给img加一个伪类 !!此时就要地方要注意了,因为img标签是闭合的标签,无法直接添加 伪类(::after),所以 我是在img外…

微搭低代码入门03函数

目录 1 函数的定义与调用2 参数与返回值3 默认参数4 将功能拆分成小函数5 函数表达式6 箭头函数7 低代码中的函数总结 在用低代码开发软件的时候,除了我们上两节介绍的变量、条件语句外,还有一个重要的概念叫函数。函数是执行特定功能的代码片段&#xf…

Zabbix中文监控指标数据乱码

1)点击主机,选择Zabbix server 中的 图形 一项,可以看到当前显示的为乱码 2) 下载字体文件: https://gitcode.com/open-source-toolkit/4a3db/blob/main/SimHei.zip 解压unzip -x SimHei.zip 3) 替换字体文…

限价订单簿中的高频交易

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

JDBC事务管理、四大特征(ACID)、事务提交与回滚、MySQL事务管理

目录 一、什么是JDBC事务? (1)事务概念。 (2)JDBC事务的实现。 1、提交。 2、回滚。 (3)生活中可以类比 JDBC 事务的例子。 1、以网上购物为例。 二、JDBC的四大事务(ACID&#xff0…

操作系统离散存储练习题

1. (简答题)分页存储管理系统具有快表,内存访问时间为2ns,检索快表时间为0.5ns,快表命中率为80%,求有效访问时间 -分析:首先访问缓存(快表),如果没有找到访问内存(页表&…

【AI日报】2024年11月13号

我回来啦!!发现自己好久不发文章了。 在某头部AI公众号实习的过程中,学到太多太多了,也感谢某位大神的指点,也衷心祝愿他的IP可以越做越好 之后因为时间关系,可能要自己出来单干了。 在实习过程中学到的…

inline内联函数(C++)

a)⽤inline修饰的函数叫做内联函数,编译时C编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就不需要建⽴栈帧了,就可以提⾼效率。 b)inline对于编译器⽽⾔只是⼀个建议,也就是说,你加了inl…

C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中

人工智能软件和硬件技术正在迅速发展。我们每天都能看到新的进步。其中一个巨大的飞跃是我们拥有更多基于自然语言处理(NLP)和深度学习(DL)机制的逻辑性更强的AI聊天应用。有许多AI工具可以用来开发由C、C、Delphi、Python等编程语…

Harmony- List组件最后一个item显示不全

在使用List组件显示数据的时候会出现最后一个item显示不全的问题,如下 出现在高度问题上,如果List组件上下没有其他占位组件就是正常显示的 解决方案: 1.给List组件加上layoutWeight(1),使它填满父控件剩余空间; 2.还有一种情况…

neo4j desktop基本入门

下载安装不在赘述,本文只记述一些neo4j的基本入门操作 连接本地neo4j数据库 1. 点击ADD添加连接 端口一般是7687 账户名和密码忘记了,可以通过neo4j web(默认为neo4jneo4j://localhost:7687/neo4j - Neo4j Browser)重置密码 AL…

function and task

任务和函数 在Verilog语言中提供了任务和函数,可以将较大的行为级设计划分为较小的代码段,允许设计者将需要在多个地方重复使用的相同代码提取出来,编写成任务和函数,这样可以使代码更加简洁和易懂。 1.1任务 任务的定义 任务定义…

24/11/13 算法笔记<强化学习> DQN算法

DQN算法的主要特点包括: 神经网络代替Q表:在传统的Q学习中,需要维护一个Q表来存储每个状态-动作对的Q值。而在DQN中,使用神经网络来近似这些Q值,这使得算法能够处理具有大量状态和动作的问题。 经验回放(E…

blind-watermark - 水印绑定

文章目录 一、关于 blind-watermark安装 二、bash 中使用三、Python 调用1、基本使用2、attacks on Watermarked Image3、embed images4、embed array of bits 四、并发五、相关 Project 一、关于 blind-watermark Blind watermark 基于 DWT-DCT-SVD. github : https://githu…