Java工程师常见面试题:Java基础(一)

1、JDK 和 JRE 有什么区别?

JDK是Java开发工具包,它包含了JRE和开发工具(如javac编译器和java程序运行工具等),主要用于Java程序的开发。而JRE是Java运行环境,它只包含了运行Java程序所必须的环境,主要用于Java程序的运行。

JDK面向的是Java开发者,提供了Java开发工具,如编译工具(javac)和打包工具(jar)等,方便开发者进行Java程序的开发和调试。而JRE面向的是Java程序的使用者,只要安装了JRE,就可以在对应的操作系统上运行Java程序。

JDK由JRE和Java开发工具组成,包含了Java语言所必须的类库和Java虚拟机(JVM),以及编译器和调试器等开发工具。而JRE只包含Java虚拟机(JVM)和Java语言所必须的类库,这些类库对于开发来说是足够的,但对于开发过程中的编译和调试并不足够。
在这里插入图片描述

2、为何要配置Java环境变量?

path环境变量的作用就是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找。而我们通常情况下配置的path变量,就是这个目录的完整路径。

简而言之,就是运行某个命令需要某些参数时,如果当前目录下找不到,则自动去环境变量中寻找。

3、== 和 equals 的区别是什么?

(1)类型与定义

==是一个操作符,用于比较两个变量的值。对于基本数据类型,它比较的是变量存储的值是否相等;对于引用类型,它比较的是两个引用是否指向内存中的同一地址(即是否是同一个对象的引用)。
equals()是Object类中的一个方法,用于比较两个对象的内容是否相等。默认情况下,它比较的是对象的内存地址(即是否是同一个对象),但该方法可以被重写以提供自定义的比较逻辑。

(2)运行速度

==:由于只是比较引用或内存地址,所以通常比equals()方法更快。

equals():由于可能需要执行更复杂的比较逻辑(尤其是在被重写的情况下),因此其运行速度可能慢于==。

(3)可重写性

==:不可重写,其行为是固定的。
equals():可以被重写以提供自定义的相等性判断逻辑。

下面程序的输出结果是什么?

public class Main {public static void main(String[] args) {Integer a = 1;Integer b = 2;Integer c = 3;Integer d = 3;Integer e = 321;Integer f = 321;Long g = 3L;Long h = 2L;System.out.println(c==d);//trueSystem.out.println(e==f);//falseSystem.out.println(c==(a+b));//trueSystem.out.println(c.equals(a+b));//trueSystem.out.println(g==(a+b));//trueSystem.out.println(g.equals(a+b));//falseSystem.out.println(g.equals(a+h));//true}
}

当 "=="运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。另外,对于包装器类型,equals方法并不会进行类型转换。

第一个和第二个输出结果没有什么疑问。第三句由于 a+b包含了算术运算,因此会触发自动拆箱过程(会调用intValue方法),因此它们比较的是数值是否相等。而对于c.equals(a+b)会先触发自动拆箱过程,再触发自动装箱过程,也就是说a+b,会先各自调用intValue方法,得到了加法运算后的数值之后,便调用Integer.valueOf方法,再进行equals比较。同理对于后面的也是这样,不过要注意倒数第二个和最后一个输出的结果(如果数值是int类型的,装箱过程调用的是Integer.valueOf;如果是long类型的,装箱调用的Long.valueOf方法)。

4、Java中有哪些数学函数?

Java中提供了一些数学函数,位于java.lang.Math类中。这些函数包括以下几种:

基本数学函数:abs、max、min。
指数函数:exp、log、pow。
三角函数:sin、cos、tan、asin、acos、atan。
双曲函数:sinh、cosh、tanh、asinh、acosh、atanh。
随机数函数:random。

5、final 在 java 中有什么作用?

(1)用来修饰一个引用

如果引用为基本数据类型,则该引用为常量,该值无法修改;
如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
如果引用时类的成员变量,则必须当场赋值,否则编译会报错。

(2)用来修饰一个方法

当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。

(3)用来修饰类

当用final修改类时,该类成为最终类,无法被继承。

比如常用的String类就是最终类。

6、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

当使用final关键字修饰变量时,这意味着该变量的引用地址被固定,它不能再指向另一个对象或值。然而,这并不意味着该引用所指向的对象的内容也不能改变。事实上,如果这个变量指向的是一个可变对象(如数组、集合或任何其他用户定义的可变类实例),那么对象的内容是可以修改的。

7、this 和super 关键字的作用

(1)this关键字的作用

  1. 对象内部指代自身的引用;
  2. 解决成员变量和局部变量的同名问题;
  3. 可以调用成员变量,不能调用局部变量;
  4. 可以调用成员方法。

(2)super关键字的作用

  1. 调用父类的成员变量或方法
  2. 调用父类的构造函数

8、在 Java 中,为什么不允许从静态方法中访问非静态变量?

静态变量属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问;
非静态变量属于类的对象,只有在类的对象产生时,才会分配内存,通过类的实例去访问;
静态方法也属于类本身,但是此时没有类的实例,内存中没有非静态变量,所以无法调用。

9、final 与 static 的区别?

当一个变量被声明为final时,它的值在初始化后不能被改变。对于引用类型,它指的是引用不可变,即不能再指向其他对象,但对象本身的状态可能改变。当方法被声明为final时,该方法不能被子类重写。当一个类被声明为final时,该类不能被继承。

当一个变量或方法被声明为static时,它属于类而非类的实例。静态变量在内存中只有一份,无论创建多少个类的实例,所有实例共享同一个静态变量。静态方法可以直接通过类名调用,无需创建类的实例。静态代码块在类加载时执行,通常用于系统初始化。

final关键字主要用于声明常量、防止继承和阻止方法重写,而static关键字主要用于实现与类相关联的变量和方法,以及控制类的初始化过程。

10、int可以强制转换为byte吗?

可以进行强制转换,在Java中,int是32位,byte是8位,如果强制转换,int类型的高24位将会被丢弃。

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

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

相关文章

MySQL与Redis缓存一致性的实现与挑战

缓存是提高应用性能的重要手段之一,而 MySQL 和 Redis 是两种常用的数据存储和缓存技术。在许多应用中,常常将 Redis 用作缓存层,以加速对数据的访问。然而,在使用 MySQL 和 Redis 组合时,保持缓存与数据库之间的一致性…

淘宝京东1688API接口系列:商品属性丨价格丨sku丨详情图等,请求文档说明示例

电商平台的API接口系列为商家、开发者及数据分析师等提供了丰富的商品数据,帮助他们更深入地了解商品详情、市场动态以及消费者行为。以下是淘宝、京东等电商平台API接口系列中关于商品属性、价格、SKU和详情图等相关信息的介绍: 1.请求方式&#xff1a…

数字化浪潮下的企业转型:机遇与挑战并存

一、数字化转型的时代背景 科技进步推动数字化转型随着云计算、大数据、人工智能等技术的迅猛发展,数字化转型成为必然趋势。这些技术不仅改变了我们的生活方式,也深刻影响着企业的运营模式和商业模式。经济全球化加速数字化转型在经济全球化的背景下&a…

Python神经网络提取音乐数据和开放C++音频图形框架

🎯要点 声音合成: 🎯波形和振荡器代码实现,绘图和声音播放:🖊三角形、锯齿波和方波振荡器声音合成 | 🖊环形声音调制器,输出立体声 | 🖊声音幅度调制 | 🖊声…

008 登录(index页面获取token) 同步

文章目录 CustomerController.javaCustomer.javaCustomerMapper.javaICustomerService.javaCustomerServiceImpl.javaJwtUtil.javaServerResult.javaServletInitializer.javaSpringbootDemoApplication.javacustomer.sqlCustomerMapper.xmlapplication.yamlindex.jsplogin.jspp…

no_good_file(训练题)

[题目信息]: 题目名称题目难度no_good_file(训练题)2 [题目考点]: 远程命令执行漏洞,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行…

读《SQL基础教程 第二版 上》的一些总结

1. 数据库语言 DDL: Data Definition Language,数据定义语言(库、表的操作) DML: Data Manipulation Language, 数据操控语言(对表中数据的增删改) DQL: Data Query Language,数据库查询语言…

Proxyman Premium for Mac v5.1.1激活版:卓越的网络调试与分析工具

Proxyman Premium for Mac是一款功能强大的网络调试与分析工具,专为开发人员和测试人员精心打造。它集多种功能于一身,为用户提供了全面、高效的网络开发体验。 Proxyman Premium for Mac v5.1.1激活版下载 作为一款跨平台代理工具,Proxyman …

蓝桥杯第859题——旅行

Z 小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光。Z 小镇附近共有 n 个景点(编号为 1,2,3,…,n),这些景点被 m 条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路。 也许是为了保…

cesium primitive 移动 缩放 旋转 矩阵

旋转参考:cesium 指定点旋转rectangle Primitive方式 矩阵篇-CSDN博客 平移参考:cesium 调整3dtiles的位置 世界坐标下 相对坐标下 平移矩阵-CSDN博客 一、primitive方式添加polygon let polygonInstance new Cesium.GeometryInstance({geometry: Ce…

逻辑回归模型-逻辑回归算法原理-逻辑回归代码与实现-笔记整合

通过一段时间的学习,总算把逻辑回归模型弄清楚了 《老饼讲解-机器学习》www.bbbdata.com中是讲得最清晰的,结合其它资料,整理一个完整的笔记如下,希望能帮助像我这样入门的新人,快速理解逻辑回归算法原理和逻辑回归实…

Adobe AE(After Effects)2023下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件,由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能,可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

06节-51单片机-LCD1602调试工具

欢迎订阅专栏,持续为您更新! 1.LCD1602调试工具 使用LCD1602液晶屏作为调试窗口,提供类似printf函数的功能,可实时观察单片机内部数据的变换情况,便于调试和演示。 本文提供的LCD1602代码属于模块化的代码&#xff…

java创建线程池的方法

简介 线程池是一种用于管理和重用线程的机制,它可以有效地管理线程的创建和销毁,减少线程创建和销毁的开销,并且能够控制并发线程数量,避免资源耗尽和系统过载。Java 提供了java.util.concurrent 包来支持线程池的实现。 1.Threa…

蓝桥杯刷题-乌龟棋

312. 乌龟棋 - AcWing题库 /* 状态表示:f[b1,b2,b3,b4]表示所有第 i种卡片使用了 bi张的走法的最大分值。状态计算:将 f[b1,b2,b3,b4]表示的所有走法按最后一步选择哪张卡片分成四类:第 i类为最后一步选择第 i种卡片。比如 i2,则…

基于OKHttp的大文件下载

1.需求&#xff1a; 根据Url下载大文件&#xff0c;本地创建文件&#xff0c;从输入流读取并写入文件&#xff0c;要求能满足大文件的下载&#xff0c;不能出现OOM 2.引入依赖 <!-- OK HTTP --> <dependency><groupId>com.squareup.okhttp3</groupId>…

Selenium(二):WebDriver核心方法和属性

一、WebDriver核心属性 1.river.name 浏览器名称 2.driver.current_url 获取当前URL 3.driver.title 获得当前页面标题 4.driver.page_source 获得当前页面源码 5.driver.current_window_handle 获得当前窗口句柄 6.driver.window_handles 获得当前所有窗口句柄 二、Web…

【学习】jemter中如何高效使用正则表达式

在Jemter的世界里&#xff0c;正则表达式无疑是一把锐利的剑&#xff0c;它可以帮助我们轻松地解决许多问题。在Jemter的性能测试过程中&#xff0c;我们常常需要提取响应中的某些数据&#xff0c;以便在后续的请求中使用。这时&#xff0c;正则表达式就派上用场了。通过学习如…

Java并发体系--LinkedTransferQueue

LinkedTransferQueue LinkedTransferQueue是Java并发包中的一个类&#xff0c;它实现了BlockingQueue接口。 LinkedTransferQueue是一个基于链表的无界阻塞队列&#xff0c;它支持先进先出的顺序&#xff0c;并且具有高并发性能。它的主要特点是能够在生产者线程和消费者…

【web开发网页制作】html+css家乡长沙旅游网页制作(4页面附源码)

家乡长沙网页制作 涉及知识写在前面一、网页主题二、网页效果Page1、主页Page2、历史长沙Page3、著名人物Page4、留言区 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码HtmlCSS 五、源码获取5.1 获取方式 作者寄语 涉及知识 家乡长沙网页制作&#x…