Java中的final与static关键字详解

需积分: 9 1 下载量 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代码至关重要。