当前位置: 首页> 教育> 大学 > static和final有什么区别

static和final有什么区别

时间:2025/7/12 20:20:23来源:https://blog.csdn.net/2401_83418369/article/details/142149962 浏览次数:0次

1.是什么

    static 和 final 是 Java 中两个非常重要的关键字,它们各自有着独特的用途和含义,但也可以在某些情况下一起使用。下面我将详细解释这两个关键字的区别,并通过例子来加深理解。


static 关键字

  static 关键字用于声明属于类本身而不是类的某个特定对象的字段(变量)或方法。这意味着,无论创建了多少个类的对象,static 字段或方法都只有一份拷贝,由所有对象共享。

  • 用途

    • 静态字段:用于存储类的状态信息,这些信息不依赖于任何特定对象实例。
    • 静态方法:通常用于执行与类相关的操作,而不是与类的任何特定实例相关的操作。静态方法不能访问类的非静态成员(除非通过对象实例)。
  • 示例

    public class MyClass {  // 静态字段  static int staticField = 42;  // 静态方法  public static void staticMethod() {  System.out.println("This is a static method.");  }  public static void main(String[] args) {  // 不需要创建对象即可访问静态字段和方法  System.out.println(MyClass.staticField); // 输出 42  MyClass.staticMethod(); // 调用静态方法  }  
    }

final 关键字

   final 关键字用于表示一个值一旦被赋予之后就不能被改变(对于基本数据类型)或者一个对象的引用一旦指向某个对象之后就不能再指向其他对象(对于对象引用)。此外,final 还可以用来修饰类和方法,表示这些类或方法不能被继承或重写。

  • 用途

    • 修饰变量:表示变量的值不可变。
    • 修饰方法:表示该方法不能被子类重写。
    • 修饰类:表示该类不能被继承。
  • 示例

    public class MyClass {  // final 修饰的变量,必须在声明时初始化或在构造器中初始化  final int finalField = 100;  // final 修饰的方法,不能被子类重写  public final void finalMethod() {  System.out.println("This is a final method.");  }  public static void main(String[] args) {  MyClass obj = new MyClass();  // finalField 的值在初始化后不能改变  // obj.finalField = 200; // 这会编译错误  // 调用 final 方法  obj.finalMethod();  }  
    }

    static 和 final 的区别:

  • 作用范围static 作用于类级别,表示属于类本身;final 作用于变量、方法或类,表示不可变性或不可继承性。
  • 目的static 用于实现类级别的共享;final 用于保证值或行为的不变性。
  • 使用场景static 常用于工具类中的方法或常量;final 常用于配置值、不可变对象或防止方法被重写。

    总结:

    static关键字

  • 修饰类static关键字可以用来修饰类,表示该类是静态的,它不依赖于任何对象实例,可以直接通过类名访问。
  • 修饰变量static关键字可以用来修饰变量,表示该变量是类变量,属于类本身,而不是类的某个对象。类变量在内存中只存在一份,即使创建了类的多个对象,这些对象共享同一个类变量。
  • 修饰方法static关键字可以用来修饰方法,表示该方法是类方法,属于类本身,不是类的某个对象。类方法可以直接通过类名调用,无需创建类的实例。

final关键字

  • 修饰类final关键字可以用来修饰类,表示该类不能被继承。被声明为final的类不能有子类。
  • 修饰变量final关键字可以用来修饰变量,表示该变量是一个常量,其值一旦被初始化,就不能被更改。
  • 修饰方法final关键字可以用来修饰方法,表示该方法不能被重写。被声明为final的方法不能被子类覆盖。

        好啦,今天的干货就到这啦~    有什么疑问的小伙伴欢迎到评论区留言!


猜你感兴趣的方面:

#强制类型转换是什么?
#自动类型转换有哪些细节???
#JVM、JRE、JDK之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#值传递和引用传递的区别
#按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
关键字:static和final有什么区别