一、Java基础面试题

Java Se

Java语言有哪些特点?

  1. 简单易学;
  2. 面向对象(封装、继承、多态);
  3. 平台无关性
  4. 支持多线程
  5. 可靠性(具备异常处理和自动内存管理机制)

JVM 、JDK 、JRE三者之间的关系?

JDK(Java Develoment Kit): 是Java开发工具包,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。

JRE(JavaRuntime Environment): 是Java的运行环境,包含JVM标准实现及Java核心类库。

JVM (Java Virtual Machine) :是Java虚拟机,是整个Java 实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。所有的Java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。

面向对象有哪些特性?

封装:封装把一个对象的属性私有化,访问它可以通过特定的接口。

继承:通过已有的类来创建新类的过程,已有的类称为基类/父类,新类称为子类/派生类,新类可以继承父类的方法和属性,也可以新增自己的方法和属性。

多态:分为编译时多态(方法重载)和运行时多态(方法重写)。要实现多态需要做两件事:一是子类继承父类并重写父类中的方法,二是用父类型引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。在 Java 中有两种形式可以实现多态:继承(多个⼦类对同⼀⽅法的重写)和接⼝(实现接⼝并覆盖接⼝中同⼀⽅法)。

重载和重写的区别?

  1. 定义和实现方式:
    • 重载:在同一个类中定义多个同名但参数列表不同的函数,可以有不同的返回类型。
    • 重写:在派生类中重新定义基类中已经定义的函数,函数名、参数列表和返回类型都必须相同。
  2. 触发条件:
    • 重载:在同一个类中定义多个同名但参数列表不同的函数。
    • 重写:需要有继承关系,派生类中重新定义基类中已经定义的函数。
  3. 调用方式:
    • 重载:根据调用时提供的参数类型和数量,调用对应的重载方法。
    • 重写:根据对象的实际类型,调用对应的重写方法。

构造方法有什么特性?

  1. 名字与类名相同
  2. 没有返回值,但不能用void声明构造函数
  3. 成类的对象时自动执行,无需调用。

Java中创建对象的几种方式?

  1. 使用new 关键字

  2. 使用Class类的newInstance方法,该方法调用无参的构造器创建对象(反射)

    Class.forName.newInstance();
    
  3. 使用克隆clone()方法;

  4. 反序列化,比如调用ObjectInputStream 类的readObject()方法

抽象类和接口的区别?

  1. 抽象类中可以包含抽象方法和具体方法,可以有成员变量和构造方法,可以被继承; 接口中只能由抽象方法,在JDK1.8以后包含默认方法(具体实现的方法)。
  2. 抽象类中可以定义构造函数,接口中不能定义构造函数。
  3. 抽象类中的成员权限可以是public、默认、protected、抽象类中的抽象方法就是为了重写,(所以不能被private修饰),接口中的方法默认public abstrat、成员变量默认:public static final
  4. 抽象类可以被其他类继承,子类可以继承抽象类的属性和方法,并可以覆盖其中的方法。接口可以被类实现,类必须实现接口中定义的所有的方法,实现类可以实现多个接口。

Integer和int的区别?

  1. int是Java的八种基本数据类型之一,而integer是Java为Int提供的封装类;
  2. int 型变量的默认值是0,Integer变量的默认值是null,这一点说明Integer可以区分未赋值和为0的区分;
  3. Integer变量必须实例化才可以使用,而int不需要实例;

由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的,因为其内存地址是不同的;

如果Integer和int比较时,只要两个变量值相等,则结果就是true,因为包装类Integer和基本数据类型比较时,会自动进行拆箱操作,实际是两个int型变量在进行比较;

final、finally、finalize的区别?

final:用于声明属性、方法和类;表示属性不可变、方法不可覆盖、被其修饰的类不可继承;

finally: 异常处理语句结构一部分,表示总是执行;

finalize:Object类的一个方法,在垃圾回收时会调用被回收对象的finalize

==和equals的区别?

==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是应用数据类型,则比较的是对象的地址值是否相等。

equals方法:用法比较两个对象的内容是否相等。注意:equals 方法不能用于比较基本数据类型的变量。如果没有对 equals 方法进行重写,则比较的是引用类型的变量所指向的对象的地址(很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等)。

两个对象的hashCode()相同,则equals()也一定为true吗?

两个对象的hashCode()相同,equals()不一定为true.因为在散列表中,hashCoding()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等【散列冲突】

&和&&的区别?

Java中&&和&都是表示与的逻辑运算符,都表示逻辑运输符and,当两边的表达式都为true的时候,整个运算结果才为true的时候,整个运算结果才为true, 否则为false.

&&:有短路功能,当第一个表达式的值为false的时候,则不再计算第二个表达式。

&:不管第一个表示式结果是否为true,第二个都会执行。除此之外,&还可以用作位运算符:当&两边的表达式不是Boolean类型的时候,&表示按位操作。

switch是否能作用在byte/long/String上?

Java5 以前 switch(expr)中,expr 只能是 byte、short、char、int。

从 Java 5 开始,Java 中引入了枚举类型, expr 也可以是 enum 类型。

从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

break,continue,return的区别及作用?

break 跳出整个循环,不再执行循环(结束当前的循环体)

continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)

return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)

Java中的参数传递时传值呢?还是传引用?

Java 的参数是以值传递的形式传入方法中,而不是引用传递。

当传递方法参数类型为基本数据类型(数字以及布尔值)时,一个方法是不可能修改一个基本数据类型的参数。

当传递方法参数类型为引用数据类型时,一个方法将修改一个引用数据类型的参数所指向对象的值。即使 Java 函数在传递引用数据类型时,也只是拷贝了引用的值罢了,之所以能修改引用数据是因为它们同时指向了一个对象,但这仍然是按值调用而不是引用调用。

Java的泛型是如何工作的?什么是类型擦除?

泛型是通过类型参数来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息,

类型擦除:泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。在泛型类被类型擦除的时候,之前泛型类中的类型参数部分如果没有指定上限,如 < T > 则会被转译成普通的 Object 类型,如果指定了上限如 < T extends String > 则类型参数就被替换成类型上限。

深拷贝和浅拷贝的区别?

​ 深拷贝

​ 直接复制了一个对象,并且用新指针指向新对象

​ 所以深拷贝是安全的

​ 浅拷贝

​ 仅拷贝基本数据类型对象,对于引用数据类型,创建了一个指针指向原有对象的地址值

​ 浅拷贝不安全,如果是引用数据类型对象,修改后会影响原数据

Java中反射是什么意思?有哪些应用场景?

在运行状态,对于任何一个类,都可以获得整个类的所有属性和方法,对于任何一个对象都可以调用它的任何方法和属性。简单来说就是动态获取类的信息以及动态调用类的属性和方法的功能。

Stream流用过吗?

Stream 流,简单来说,使用 java.util.Stream 对一个包含一个或多个元素的集合做各种操作。这些操作可能是 中间操作 亦或是 终端操作。 终端操作会返回一个结果,而中间操作会返回一个 Stream 流。

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

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

相关文章

17 | Spark中的map、flatMap、mapToPair mapvalues 的区别

在Apache Spark中,map、flatMap、mapToPair和mapValues是用于对RDD(Resilient Distributed Dataset)进行转换的不同操作。这些操作可以用来处理分布式数据集中的元素,但它们的用途和行为略有不同。 以下是它们的主要区别以及相应的Java代码示例: map:map操作用于对RDD中…

【C++】C++面向对象编程三大特性之一——继承

❤️前言 本篇博客主要是关于C面向对象编程中的三大特性之一的继承&#xff0c;希望大家能和我一起共同学习进步&#xff01; 正文 我们刚刚学习一块全新的知识&#xff0c;首先简单关注一下它的概念和简单的使用方法。 继承的概念及定义 继承的概念 继承的概念&#xff1a;…

WordPress Page Builder KingComposer 2.9.6 Open Redirection

WordPress Page Builder KingComposer 2.9.6 Open Redirection WordPress 插件 KingComposer 版本2.9.6 以及以前版本受到开放重定向漏洞的影响。该漏洞在packetstorm网站披露于2023年7月24日&#xff0c;除了该漏洞&#xff0c;该版本的插件还存在XSS攻击的漏洞风险 图1.来自…

AI「反腐」,德国马普所结合 NLP 和 DNN 开发抗蚀合金

内容一览&#xff1a;在被不锈钢包围的世界中&#xff0c;我们可能都快忘记了腐蚀的存在。然而&#xff0c;腐蚀存在于生活中的方方面面。无论是锈迹斑斑的钢钉&#xff0c;老化漏液的电线&#xff0c;还是失去光泽的汽车&#xff0c;这一切的发生都与腐蚀有关。据统计&#xf…

通信笔记:RSRP、RSRQ、RSNNR

0 基础概念&#xff1a;RE、RS和RB RE (Resource Element)&#xff1a;资源元素是 LTE 和 5G 网络中的最小物理资源单位。一个资源元素对应于一个子载波的一个符号周期。 RS (Reference Signal)&#xff1a;参考信号是在 LTE 和 5G 网络中用于多种目的的特定类型的信号。它们可…

深入剖析云计算与云服务器ECS:从基础到实践

云计算已经在不断改变着我们的计算方式和业务模式&#xff0c;而云服务器ECS&#xff08;Elastic Compute Service&#xff09;作为云计算的核心组件之一&#xff0c;为我们提供了灵活、可扩展的计算资源。在本篇长文中&#xff0c;我们将从基础开始&#xff0c;深入探讨云计算…

数学建模--三维图像绘制的Python实现

目录 1.绘制三维坐标轴的方法 2.绘制三维函数的样例1 3.绘制三维函数的样例2 4.绘制三维函数的样例3 5.绘制三维函数的样例4 6.绘制三维函数的样例5 1.绘制三维坐标轴的方法 #%% #1.绘制三维坐标轴的方法 from matplotlib import pyplot as plt from mpl_toolkits.mplot3…

【算法系列篇】分冶-快排

文章目录 前言什么是分冶1.颜色分类1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 排序数组2.1 题目要求2.2 做题思路2.3 Java代码实现 3.数组中的第k个最大元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 最小的k个数4.1 题目要求4.2 做题思路4.3 Java代码实现 总结 前言 …

Python Tkinter Multiple Windows 教程

一、说明 在这个Python Tkinter教程中&#xff0c;我们将学习如何在Python Tkinter中创建多个窗口&#xff0c;我们还将介绍与多个窗口相关的不同示例。而且&#xff0c;我们将介绍这些主题。 Python Tkinter multiple windows使用多个窗口的 Python Tkinter 用户注册Python Tk…

7 Series FPGAs GTX/GTH Transceivers

目录 1. Overview2. Block Diagram3. Transmitter4. Receiver5. Physical Coding Sublayer&#xff08;PCS&#xff09;6. Physical Medium Attachment&#xff08;PMA&#xff09; 本博客为Xilinx 7系列FPGA的千兆比特高速收发器&#xff08;Gigabit Transceiver, GT&#xff…

【聚类】DBCAN聚类

OPTICS是基于DBSCAN改进的一种密度聚类算法&#xff0c;对参数不敏感。当需要用到基于密度的聚类算法时&#xff0c;可以作为DBSCAN的一种替代的优化方案&#xff0c;以实现更优的效果。 原理 基于密度的聚类算法&#xff08;1&#xff09;——DBSCAN详解_dbscan聚类_root-ca…

跨源资源共享(CORS)Access-Control-Allow-Origin

1、浏览器的同源安全策略 没错&#xff0c;就是这家伙干的&#xff0c;浏览器只允许请求当前域的资源&#xff0c;而对其他域的资源表示不信任。那怎么才算跨域呢&#xff1f; 请求协议http,https的不同域domain的不同端口port的不同 好好好&#xff0c;大概就是这么回事啦&…

【权限提升-Windows提权】-UAC提权之MSF模块和UACME项目-DLL劫持-不带引号服务路径-不安全的服务权限

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的&#xff1f; 后台权限&#xff0c;网站权限&#xff0c;数据库权限&#xff0c;接口权限&#xff0c;系统权限&#xff0c;域控权限等 2、以上常见权限获取方法简要归类说明&#xff1f; 后台权限&#xff1a;SQL注入,数…

伪类与伪元素

伪类与伪元素 伪类和伪元素的引入是因为在文档树里有些信息无法被充分描述&#xff0c;引用标准中的话就是&#xff1a;CSS引入伪类和伪元素的概念是为了实现基于文档树之外的信息的格式化。 文档树又称标准流&#xff0c;是浏览器在渲染显示网页内容时默认采用的一套排版规则…

1780_添加鼠标右键空白打开命令窗功能

全部学习汇总&#xff1a; GitHub - GreyZhang/windows_skills: some skills when using windows system. 经常执行各种脚本&#xff0c;常常需要切换到命令窗口中输入相关的命令。从开始位置打开cmd然后切换目录是个很糟糕的选择&#xff0c;费时费力。其实Windows 7以及Windo…

经管博士科研基础【19】齐次线性方程组

1. 线性方程组 2. 非线性方程组 非线性方程,就是因变量与自变量之间的关系不是线性的关系,这类方程很多,例如平方关系、对数关系、指数关系、三角函数关系等等。求解此类方程往往很难得到精确解,经常需要求近似解问题。相应的求近似解的方法也逐渐得到大家的重视。 3. 线…

vue3 封装千分位分隔符自定义指令

toLocaleString作用&#xff1a;在没有指定区域的基本使用时&#xff0c;返回使用默认的语言环境和默认选项格式化的字符串。可点击进入MDN查看 // 千分位分隔符指令 import { Directive, DirectiveBinding } from vueconst thousandSeparator: Directive {mounted(el: any, …

Win10搭建VisualSvn Server

Win10搭建VisualSvn Server 目录 Win10搭建VisualSvn Server一、下载VisualSvn Server安装包二、安装VisualSvn Server三、配置和使用VisualSVN Server四、添加用户及权限设定方法五、创建目录及配置权限 1、服务端&#xff1a;有集成了Subversion和Apache、安装使用非常简单且…

Redis从基础到进阶篇(三)----架构原理与集群演变

目录 一、缓存淘汰策略 1.1 LRU原理 1.2 案例分析 1.3 Redis缓存淘汰策略 1.3.1 设置最⼤缓存 1.3.2 淘汰策略 二、Redis事务 2.1 Redis事务典型应⽤—Redis乐观锁 2.2 Redis事务介绍 2.3 事务命令 2.3.1 MULTI 2.3.2 EXEC 2.3.3 DISCARD 2.3.4 WATCH 2.3.5 UNW…

Flutter之hydrated_bloc源码分析

Flutter_Bloc是状态管理组件,hydrated_bloc是 Flutter_Bloc的扩展,它可以在APP重启的情况下,自动记录上次APP的状态。android中可以使用SharePreference来实现状态记录,在Flutter之hydrate_bloc组件入门指南一文中已经讲解了其基本用法,本篇博文就不对其原理进行简单分析,…