Java中的final与static关键字详解
需积分: 9 32 浏览量
更新于2024-08-05
收藏 8KB MD 举报
本文档主要讨论了Java中的`final`和`static`两个关键字,以及它们在修饰类、方法和变量时的作用。
## 1. final关键字
### 1.1 final关键字概述
`final`在Java中表示“最终”的意思,它可以用于修饰类、方法和变量。使用`final`关键字后,它所修饰的元素具有以下特性:
- **修饰类**:被`final`修饰的类不能被其他类继承,这样的类被称为“太监类”或“最终类”,确保其无法有子类。
- **修饰方法**:`final`修饰的方法不能被子类重写,这保证了方法的行为在继承链中保持一致。
- **修饰变量**:`final`修饰的变量一旦赋值后就不能再更改。对于基本类型,这意味着值不可变;对于引用类型,意味着引用不能指向新的对象(即地址值不变),但被引用的对象内部状态仍然可以改变。
```java
public class Demo02修饰变量 {
public static void main(String[] args) {
// 创建学生对象
final Student s = new Student();
s.name = "柳岩";
s.age = 36; // 修改姓名与年龄
s.name = "老王"; // 重命名可行
s.age = 40; // 变量值可变,只要不改变引用
// 下面这行会报错,因为s是final的,不能重新赋值
// s = new Student();
}
}
```
## 2. static关键字
### 2.1 static概述
`static`关键字用于修饰类的成员(包括变量和方法)。被`static`修饰的成员属于类本身,而不属于类的实例。这意味着:
- **静态成员共享**:所有类的实例都可以共享静态成员,它们只存在一个副本,不会因为创建新对象而产生额外的副本。
- **访问方式**:静态成员可以通过类名直接访问,无需创建对象。通常建议使用类名访问静态成员,以避免混淆和提高代码可读性。
```java
public class Student {
String name; // 姓名
int age; // 年龄
// 所有的学生都是中国国籍,如果定义成员变量每个对象需要单独赋值有点麻烦
// 想要让多个对象共享同一个国籍就可以定义成静态变量
static String country; // 国籍
}
public class Demo静态的演示 {
public static void main(String[] args) {
// 创建学生对象
Student s = new Student();
s.name = "柳岩";
s.age = 36;
// 建议使用类名访问静态变量,不建议使用对象名访问静态变量
// s.country = "中国";
Student.country = "中国"; // 创建学生
Student s2 = new Student();
s2.name = "大鹏";
// ...
}
}
```
在上述代码中,`Student`类的`country`字段被声明为`static`,因此所有`Student`对象都共享同一个国籍。在`main`方法中,我们通过`Student.country`来设置和访问这个共享属性,而不是通过特定的实例对象。
总结起来,`final`和`static`都是Java中重要的修饰符,它们分别用于确保变量的不可变性和类成员的共享性。理解并恰当使用这两个关键字对于编写健壮、高效的Java代码至关重要。
2018-03-16 上传
2018-03-06 上传
2169 浏览量
728 浏览量
2358 浏览量
879 浏览量
658 浏览量
2020-11-23 上传
qq_46065933
- 粉丝: 0
- 资源: 2
最新资源
- WordPress作为新闻管理面板的实现指南
- NPC_Generator:使用Ruby打造的游戏角色生成器
- MATLAB实现变邻域搜索算法源码解析
- 探索C++并行编程:使用INTEL TBB的项目实践
- 玫枫跟打器:网页版五笔打字工具,提升macOS打字效率
- 萨尔塔·阿萨尔·希塔斯:SATINDER项目解析
- 掌握变邻域搜索算法:MATLAB代码实践
- saaraansh: 简化法律文档,打破语言障碍的智能应用
- 探索牛角交友盲盒系统:PHP开源交友平台的新选择
- 探索Nullfactory-SSRSExtensions: 强化SQL Server报告服务
- Lotide:一套JavaScript实用工具库的深度解析
- 利用Aurelia 2脚手架搭建新项目的快速指南
- 变邻域搜索算法Matlab实现教程
- 实战指南:构建高效ES+Redis+MySQL架构解决方案
- GitHub Pages入门模板快速启动指南
- NeonClock遗产版:包名更迭与应用更新