【Java基础面试题】

目录

前言

[1.1 为什么Java代码可以实现一次编写、到处运行?](#1.1 为什么Java代码可以实现一次编写、到处运行?)

[1.2 一个Java文件里可以有多个类吗(不含内部类)?](#1.2 一个Java文件里可以有多个类吗(不含内部类)?)

[1.3 说一说你对Java访问权限的了解](#1.3 说一说你对Java访问权限的了解)

[1.4 介绍一下Java的数据类型](#1.4 介绍一下Java的数据类型)

[1.5 int类型的数据范围是多少?](#1.5 int类型的数据范围是多少?)

[1.6 请介绍全局变量和局部变量的区别](#1.6 请介绍全局变量和局部变量的区别)

[1.7 请介绍一下实例变量的默认值](#1.7 请介绍一下实例变量的默认值)

[1.8 为啥要有包装类?](#1.8 为啥要有包装类?)

[1.9 说一说自动装箱、自动拆箱的应用场景](#1.9 说一说自动装箱、自动拆箱的应用场景)

[1.10 如何对Integer和Double类型判断相等?](#1.10 如何对Integer和Double类型判断相等?)

总结


前言

本文主要介绍了Java基础相关的面试题目。


1.1 为什么Java代码可以实现一次编写、到处运行?

JVM(Java虚拟机)是Java跨平台的关键。 在程序运行前,Java源代码(.java)需要经过编译器 编译成字节码 (.class),然后在程序运行时,JVM负责将字节码翻译成特定平台下的机器码并运行。(只要在不同的平台上安装对应的JVM,就可以运行字节码文件。)

同一份Java源代码在不同的平台上运行,它不需要做任何的改变,并且只需要编译一次。而编译好的字节码,是通过JVM这个中间的"桥梁"实现跨平台的,JVM是与平台相关的软件,它能将统一的字节码翻译成该平台的机器码。

1.2 一个Java文件里可以有多个类吗(不含内部类)?

一个java文件里可以有多个类 ,但最多只能有一个被public修饰的类 ,如果这个java文件中包含public修饰的类,则这个类的名称必须和java文件名一致

1.3 说一说你对Java访问权限的了解

Java语言为我们提供了三种访问修饰符,即private、protected、public,在使用这些修饰符修饰目标时,一共可以形成四种访问权限,即private、default、protected、public,注意在不加任何修饰符时为default访问权限。

修饰成员变量/成员方法时,该成员的四种访问权限的含义如下:

  • private:该成员可以被该类内部成员访问;
  • default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问;
  • protected:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问,还可以被它的子类访问;
  • public:该成员可以被任意包下,任意类的成员进行访问。

修饰类时,该类只有两种访问权限,对应的访问权限的含义如下:

  • default:该类可以被同一包下其他的类访问;
  • public:该类可以被任意包下,任意的类所访问。

1.4 介绍一下Java的数据类型

Java数据类型包括基本数据类型和引用数据类型两大类。

基本数据类型有8个,可以分为4个小类,分别是整数 类型(byte/short/int/long)、浮点 类型(float/double)、字符 类型(char)、布尔 类型(boolean)。在这8个基本类型当中,除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行 类型转换

每种类型所占据的内存空间:

  • byte:1字节(8位),数据范围是 -2^7 ~ 2^7-1。
  • short:2字节(16位),数据范围是 -2^15 ~ 2^15-1。
  • int:4字节(32位),数据范围是 -2^31 ~ 2^31-1。
  • long:8字节(64位),数据范围是 -2^63 ~ 2^63-1。
  • float:4字节(32位),数据范围大约是 -3.4*10^38 ~ 3.4*10^38。
  • double:8字节(64位),数据范围大约是 -1.8*10^308 ~ 1.8*10^308。
  • char:2字节(16位),数据范围是 \u0000 ~ \uffff。
  • boolean:Java规范没有明确的规定,不同的JVM有不同的实现机制。

1.5 int类型的数据范围是多少?

int类型占4字节(32位),数据范围是 -2^31 ~ 2^31-1。

1.6 请介绍全局变量和局部变量的区别

Java中的变量分为成员变量和局部变量,它们的区别如下:

成员变量:

  1. 成员变量是在类的范围里定义的变量;
  2. 成员变量有默认初始值;
  3. 未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同;
  4. 被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。

局部变量:

  1. 局部变量是在方法里定义的变量;
  2. 局部变量没有默认初始值;
  3. 局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。

1.7 请介绍一下实例变量的默认值

实例变量若为引用数据类型 ,其默认值一律为null。若为基本数据类型,其默认值如下:

  • byte:0
  • short:0
  • int:0
  • long:0L
  • float:0.0F
  • double:0.0
  • char:'\u0000'
  • boolean:false

1.8 为啥要有包装类?

Java语言是面向对象的语言,其设计理念是"一切皆对象"。但8种基本数据类型却出现了例外,它们不具备对象的特性。正是为了解决这个问题,Java为每个基本数据类型都定义了一个对应的引用类型,这就是包装类。

1.9 说一说自动装箱、自动拆箱的应用场景

自动装箱:可以把一个基本类型 的数据直接赋值给对应的包装类型

自动拆箱:可以把一个包装类型 的对象直接赋值给对应的基本类型

通过自动装箱、自动拆箱功能,可以大大简化基本类型变量和包装类对象之间的转换过程。比如,某个方法的参数类型为包装类型,调用时我们所持有的数据却是基本类型的值,则可以不做任何特殊的处理,直接将这个基本类型的值传入给方法即可。

1.10 如何对Integer和Double类型判断相等?

Integer、Double不能直接进行比较,这包括:

  • 不能用==进行直接比较,因为它们是不同的数据类型;
  • 不能转为字符串进行比较,因为转为字符串后,浮点值带小数点,整数值不带,这样它们永远都不相等;
  • 不能使用compareTo方法进行比较,虽然它们都有compareTo方法,但该方法只能对相同类型进行比较。

整数、浮点类型的包装类,都继承于Number类型,而Number类型分别定义了将数字转换为byte、short、int、long、float、double的方法。所以,可以将Integer、Double先转为转换为相同的基本数据类型(如double),然后使用==进行比较。

示例代码:

java 复制代码
Integer i = 100;
Double d = 100.00;
System.out.println(i.doubleValue() == d.doubleValue());

总结

本文主要介绍了Java基础相关的面试题目。

相关推荐
BD_Marathon2 小时前
【Flink】部署模式
java·数据库·flink
鼠鼠我捏,要死了捏5 小时前
深入解析Java NIO多路复用原理与性能优化实践指南
java·性能优化·nio
ningqw5 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友5 小时前
vi编辑器命令常用操作整理(持续更新)
后端
superlls5 小时前
(Redis)主从哨兵模式与集群模式
java·开发语言·redis
胡gh5 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫6 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong6 小时前
技术人如何对客做好沟通(上篇)
后端
叫我阿柒啊7 小时前
Java全栈工程师面试实战:从基础到微服务的深度解析
java·redis·微服务·node.js·vue3·全栈开发·电商平台
颜如玉7 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源