Java八股面试题整理(1)

发布时间 2023-11-01 17:35:04作者: silly_fox

1.为什么Java代码可以实现一次编写,到处运行?

参考答案

  • JVM(Java虚拟机)是Java跨平台的关键。

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

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

参考答案

一个java文件里可以有多个类,但最多只能有一个被public修饰的类;且这个public修饰的类名称必须与Java文件名一致。

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

参考答案

Java语言一共有三种访问修饰符:private,protected,public

访问权限一共有4种:private、default、protected、public

在不使用任何修饰符进行修饰时默认使用default访问权限。

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

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

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

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

4.介绍一下Java的数据类型

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

基本数据类型有8个,可以分为4个小类,分别是整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、布尔类型(boolean)。

除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。

引用类型就是对一个对象的引用,根据引用对象类型的不同,可以将引用类型分为3类,即数组、类、接口类型。

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

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

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

参考答案

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

成员变量:

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

局部变量:

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

注意事项

Java中没有真正的全局变量,面试官应该是出于其他语言的习惯说全局变量的,他的本意应该是指成员变量。

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

  • 实例变量若为引用数据类型,其默认值一律为null。
  • 实例变量若为基本数据类型的数值类型,默认值为0
  • 布尔类型的默认值为flase

8.为啥要有包装类?

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

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

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

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

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

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

通常将其转换为相同的数据类型后再比较,double的范围大于Integer,因此都转换为double类型后使用" = = "进行比较