【面经总结】Java基础 - 语言特性

15 阅读3分钟

参数传递

形参和实参的区别是什么?

形参:方法定义的参数

实参:调用方法实际传入的参数

Java是值传递还是引用传递?

Java是值传递:将数据拷贝一份传递

  • 基本参数类型:拷贝字面量
  • 引用类型(对象):拷贝对象地址

值传递和引用传递区别是什么?

  1. 值传递:方法接收的是实参值的拷贝会创建副本
  2. 引用传递:方法接收的直接是实参所引用的对象在堆中的地址不会创建副本,对形参的修改将影响到实参。

为什么 Java 要设计成值传递?

  1. 简化理解:值传递的语义比较简单和直接。
  2. 安全性:避免方法对原始变量的意外或恶意修改

Final 关键字

Final 的作用是什么

final 是关键字。

  1. 修饰类:类不能被继承
  2. 修饰变量:变量不能被修改(常量)
  3. 修饰方法:方法不能被重写

final、finally、 finalize有什么不同?

  • final :关键字
  • finally:保证代码一定要被执行的一种机制。比如 try-finally 或者 try-catch-finally 去关闭 JDBC 连接等
  • finalize:是 Object 类的一个方法,允许对象在被垃圾收集器回收之前执行一些特定的清理操作,比如关闭文件、释放网络资源等。(JDK 9 后已经过时)

为什么 finalize 被弃用

无法保证 finalize 什么时候执行,执行的是否符合预期。

可以使用 try-with-resources 或者 try-finally 代替。

try-with-resources:

with-resources 部分实际上是指在 try 关键字后面的小括号中的资源声明。这些资源会在 try 语句块执行完毕后自动关闭。

 // 使用 try-with-resources 语句读取文件内容
 try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
     String line;
     while ((line = reader.readLine()) != null) {
         System.out.println(line);
     }
 } catch (IOException e) {
     e.printStackTrace();
 }

static 关键字

static 的作用

方便在没有创建对象的情况下来进行访问、调用和共享。

  1. static 修饰方法:可以直接通过类名调用
  2. static 修饰变量 (静态变量):变量属于类而不是对象
  3. static 静态代码块:在创建对象前执行的代码。

static 的底层原理:

  1. 堆:用于存储对象的内存区域。堆区是由 JVM 管理的,被所有线程共享的。
  2. 栈:每个线程有一个独立的栈区。栈保存基本数据和对象的引用地址。
  3. 方法区 (静态区):被所有线程共享,保存类信息、静态变量、静态方法。

堆内存中的成员变量会随着对象的产生而产生,随着对象的消失而消失。静态变量是所有线程共享的,与对象无关不会消失。

static 和 final 的区别

语义方向

  • static 关键字:用于声明类级别的成员,使得这些成员可以在没有实例的情况下被访问和共享。
  • final 关键字:用于声明常量、方法或类,使得这些不能被修改、重写或继承。