Java常见面试问题(学习过程中总结)

本文深入解读Java面试中的核心问题,包括JVM、JRE与JDK的关系,跨平台原理,按位与逻辑运算符的区别,以及高效计算和变量交换技巧。还涉及了类型转换和常见编程陷阱,是提升Java面试准备的实用指南。
摘要由CSDN通过智能技术生成

Java基础面试题

下面是学习过程中接触的Java基础部分的面试题

  1. JVM、JRE 和 JDK 的关系
  2. 什么是跨平台性?原理是什么?
  3. &和&&的区别?
  4. 用最有效率的方法计算 2 乘以 8
  5. 在没有使用临时变量的情况如何交换两个整数变量的值?
  6. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
  7. float f=3.4;是否正确?

Java基础面试题解答(不足修改)

1.JVM、JRE 和 JDK 的关系

JVM概述
JVM 全称Java Virtual Machine,可以理解成一个可运行 Java 字节码的虚拟计算机系统:

  1. 它有一个解释器组件,可以实现 Java 字节码和计算机操作系统之间的通信
  2. 对于不同的运行平台,有不同 的 JVM。

JVM 屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。
在这里插入图片描述
JRE概述
JRE全称Java Runtime Environment,Java 运行时环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。

JDK 概述
JDK 全称 Java Development ToolKit,是 Java 语言开发工具包。JDK 是整个 JAVA 的核心,包括了 Java 运行环境(Java Runtime Environment),一堆 Java 工具(javac/java/jdb 等)和 Java 基础的类库(即 Java API 包括rt.jar)。
它不提供具体的开发软件,它提供的是无论你用何种开发软件写 Java 程序都必须用到的类库和 Java 语言规范。
简单来说就是JDK包含JRE,JRE包含JVM的关系

JDK、JRE、JVM的区别与联系

JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。

JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

a.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。

b.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。

2.什么是跨平台性?原理是什么?

所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。

实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。(注意不是能在所有的平台上运行,关键是该平台是否能安装相应的虚拟机)。

总结:Java程序之所以能够实现跨平台运行,是因为它根本就不直接运行在任何底层平台上,而是需要在哪里运行,就在哪里(如Windows平台)事先准备好自己的Java平台,而这只是仅仅是安装和配置一个软件而已!

3.&和&&的区别?

1.&

(1)按位运算符; (2)逻辑运算符

作为按位运算符时:

当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01

作为逻辑运算符时:
&左右两端条件式有一个为假就会不成立,但是两端都会运行,比如(1+2)=4 &(1+2)=3;;1+2=4即使为假也会去判断1+2=3是否成立。

2.&&——逻辑运算符

&&也叫做短路运算符,因为只要左端条件式为假直接不成立,不会去判断右端条件式。
例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。

相同点:只要有一端为假,则语句不成立

4. 用最有效率的方法计算 2 乘以 8

2 << 3,
因为将一个数左移n 位,就相当于乘以了2 的n 次方,那么,一个数乘以8 只要将其左移3 位
即可,而位运算cpu 直接支持的,效率最高,所以,2 乘以8 等於几的最效率的方法是2 << 3。

5.在没有使用临时变量的情况如何交换两个整数变量的值?

int a = 3;
int b = 2
a = a + b;//此时 a = 5
b = a - b;//b = 5 - 2 = 3
a = a - b//a = 5 - 3 = 2

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

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

s1是short型,s1+1是int型,不能显式转化为short型。可bai修改为s1 =(short)(s1 + 1) 。

short s1 = 1; s1 += 1正确。

7.float f=3.4;是否正确?

不正确。精度不准确,应该用强制类型转换,如下所示:

float f=(float)3.4 或float f = 3.4f

在java里面,没小数点的默认是int,有小数点的默认是 double;

面向对象部分链接

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值