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

news2024/11/15 0:03:36

说说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.coloradmin.cn/o/2239545.html

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

相关文章

DevOps-Gitlab-私有代码仓库

1. 概述 1. 私有代码仓库 2. 精细化权限配置,让系统更安全 3. 控制用户/用户组是否可以提交到主分支 (PR Push Request) 4. 它使用Ruby语言写成。后来,一些部分用Go语言重写 2. Gitlab vs Github/Gitee GitlabGithub/Gitee共同点存放代码,git访问存放代码,git访问…

【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:技术、应用与伦理思考

一、引言 在当今科技迅速发展的时代,声音克隆技术成为人工智能领域的一个备受瞩目的分支。GPT-SoVITS V2作为一种声音克隆工具,正逐渐进入人们的视野,它在多个领域展现出巨大的潜力,同时也引发了一系列值得深入探讨的问题。本文旨…

重新认识HTTPS

一. 什么是 HTTPS HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。 所以安全上存在以下三个风险: 窃听风险,比如通信链路上可以获取通信…

Vite初始化Vue3+Typescrpt项目

初始化项目 安装 Vite 首先,确保你的 Node.js 版本 > 12.0.0。然后在命令行中运行以下命令来创建一个 Vite Vue 3 TypeScript 的项目模板: npm init vitelatest进入项目目录 创建完成后,进入项目目录: cd vue3-demo启动…

Three.js 搭建3D隧道监测

Three.js 搭建3D隧道监测 Three.js 基础元素场景scene相机carema网络模型Mesh光源light渲染器renderer控制器controls 实现3d隧道监测基础实现道路实现隧道实现多个摄像头点击模型进行属性操作实现点击模型发光效果 性能监视器stats引入使用 总结完整代码 我们将通过three.js技…

【学术会议介绍,SPIE 出版】第四届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2024,12月13-15日)

第四届计算机图形学、人工智能与数据处理国际学术会议 2024 4th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2024) 重要信息 大会官网:www.iccaid.net 大会时间:2024年12月13-15日 大会地…

VScode C++配置opencv4.5.3——先赞后看,配置成功实属不易-(镜像加速环境w版和配置文件版)

前置准备:配置MinGW和CMake 手把手教——class1_VScode配置C环境_linux vscode cpp配置-CSDN博客文章浏览阅读398次,点赞4次,收藏6次。点击Windows x64 Installer:下载msi文件 安装完成后验证。配置gcc文件下bin环境。最后ctrlF5运行尝试。W…

机器学习 笔记

特征值提取 字典 from sklearn.extaction import DictVectorizer mDictVectorizer(sparseFalse)#sparse是否转换成三元组形式 data[], #传入字典数据 data1model.fit_transform(data) #使用API 英文特征值提取 from sklearn.feature_extraction.text import CountVe…

推荐一款好用的postman替代工具2024

Apifox 是国内团队自主研发的 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,是非常好的一款 postman 替代工具。 它通过一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好接口文档,接口调试、数据 Mock、接口…

项目模块十七:HttpServer模块

一、项目模块设计思路 目的:实现HTTP服务器搭建 思想:设计请求路由表,记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表,服务器只接受请求并调用用户的处理函数即可。 处理流程: …

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式 Android WLAN低延迟模式是 Android 10 引入的一种功能,允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式,以减少网络延迟,启动条件如下: Wi-Fi 已启用且设备可以访问互联网。应用已创建并获得 Wi-Fi 锁&a…

requests库如何处理 - POST请求常见的两种请求体格式:表单格式JSON格式

目录: 每篇前言:一、POST请求的两种常见请求体格式详解1. 表单格式(form-encoded) - 举例:福州搜索示例代码(表单数据): 2. JSON格式 - 举例:CSDN搜索示例代码&#xff0…

HCIP-HarmonyOS Application Developer 习题(二十二)

1、用户将手机导航迁移至智能手表之后,智能手表如果需要获取手机传过来的数据,从下列哪个方法中获取? A、onCompleteContinuation() B、onStartContinuation() C、onRestoreData() D、onSaveData() 答案:C 分析:FA发起迁移后&am…

LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略

LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略 目录 Github Spark的简介 Github Spark的安装和使用方法 1、安装 2、使用方法 Github Spark的案例应用 Github Spark的简介 2024年10月30日,GitHub 重磅发布GitHub Spark 是一…

会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力

11月10日,2024世界物联网博览会分论坛——第三届无锡智能网联汽车生态大会在无锡举行,美格智能CEO杜国彬受邀出席,并参与“中央域控:重塑汽车智能架构的未来”主题圆桌论坛讨论,与行业伙伴共同探讨智能网联汽车产业领域…

HMSC联合物种分布模型在群落生态学中的贝叶斯统计分析

联合物种分布模型(Joint Species Distribution Modelling,JSDM)在生态学领域,特别是群落生态学中发展最为迅速,它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…

【AI技术对电商的影响】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python酷库之旅-第三方库Pandas(211)

目录 一、用法精讲 986、pandas.MultiIndex.get_loc方法 986-1、语法 986-2、参数 986-3、功能 986-4、返回值 986-5、说明 986-6、用法 986-6-1、数据准备 986-6-2、代码示例 986-6-3、结果输出 987、pandas.MultiIndex.get_locs方法 987-1、语法 987-2、参数 …

【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 select 语句是 Go 的一种控制结构,用于等待多个通道操作。它类似于 s…

Java基于SpringBoot+Vue的宠物共享平台的设计与实现(附源码,文档)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…