【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基础相关的面试题目。

相关推荐
gopher9511几秒前
final,finally,finalize的区别
java·开发语言·jvm
Jason-河山9 分钟前
利用 Python 爬虫采集 1688商品详情
java·http
计算机源码社9 分钟前
分享一个餐饮连锁店点餐系统 餐馆食材采购系统Java、python、php三个版本(源码、调试、LW、开题、PPT)
java·python·php·毕业设计项目·计算机课程设计·计算机毕业设计源码·计算机毕业设计选题
Zww089113 分钟前
idea插件市场安装没反应
java·ide·intellij-idea
夜雨翦春韭14 分钟前
【代码随想录Day31】贪心算法Part05
java·数据结构·算法·leetcode·贪心算法
计算机学姐15 分钟前
基于微信小程序的调查问卷管理系统
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
problc26 分钟前
Android 组件化利器:WMRouter 与 DRouter 的选择与实践
android·java
程序员南飞2 小时前
ps aux | grep smart_webrtc这条指令代表什么意思
java·linux·ubuntu·webrtc
弥琉撒到我2 小时前
微服务swagger解析部署使用全流程
java·微服务·架构·swagger
一颗花生米。3 小时前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式