参数传递
形参和实参的区别是什么?
形参:方法定义的参数
实参:调用方法实际传入的参数
Java是值传递还是引用传递?
Java是值传递:将数据拷贝一份传递
- 基本参数类型:拷贝字面量
- 引用类型(对象):拷贝对象地址
值传递和引用传递区别是什么?
- 值传递:方法接收的是实参值的拷贝,会创建副本。
- 引用传递:方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。
为什么 Java 要设计成值传递?
- 简化理解:值传递的语义比较简单和直接。
- 安全性:避免方法对原始变量的意外或恶意修改
Final 关键字
Final 的作用是什么
final
是关键字。
- 修饰类:类不能被继承
- 修饰变量:变量不能被修改(常量)
- 修饰方法:方法不能被重写
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 的作用
方便在没有创建对象的情况下来进行访问、调用和共享。
- static 修饰方法:可以直接通过类名调用
- static 修饰变量 (静态变量):变量属于类而不是对象
- static 静态代码块:在创建对象前执行的代码。
static 的底层原理:
- 堆:用于存储对象的内存区域。堆区是由 JVM 管理的,被所有线程共享的。
- 栈:每个线程有一个独立的栈区。栈保存基本数据和对象的引用地址。
- 方法区 (静态区):被所有线程共享,保存类信息、静态变量、静态方法。
堆内存中的成员变量会随着对象的产生而产生,随着对象的消失而消失。静态变量是所有线程共享的,与对象无关不会消失。
static 和 final 的区别
语义方向
static
关键字:用于声明类级别的成员,使得这些成员可以在没有实例的情况下被访问和共享。final
关键字:用于声明常量、方法或类,使得这些不能被修改、重写或继承。