首页 > 其他分享 >static和final有什么区别

static和final有什么区别

时间:2024-09-11 20:51:30浏览次数:3  
标签:变量 区别 关键字 static 修饰 方法 final

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
From: https://blog.csdn.net/2401_83418369/article/details/142149962

相关文章

  • C#中抽象类和接⼝有什么区别?
    在C#中,抽象类(AbstractClass)和接口(Interface)都是用来定义一组规范,以便派生类或实现类遵循这些规范。尽管它们的用途相似,但它们之间存在一些关键的区别:声明方式:抽象类使用abstract关键字声明。接口使用interface关键字声明。成员的实现:抽象类可以包含有实现的成......
  • POI常见包名称含义,常见HSSF,SXXF,SXSSF区别
    Java单元格合并后边框消失了在使用Java编写Excel文件时,经常会遇到合并单元格的需求。单元格合并可以使表格更加美观,同时减少重复的内容。然而,有时候在合并单元格后会发现边框消失了,这给我们带来了困惑。本文将介绍这个问题的原因以及解决方法,并提供相应的代码示例。问题描述当我......
  • [HTML] src 和 href 的区别
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Document</title&g......
  • 小程序与 H5 的区别
    所处的环境-H5的宿主是浏览器,只要是浏览器就可以使用,包括app的web-view,但是小程序不一样,它需要运行在特定平台(微信、支付宝、抖音等)。-小程序基于不同宿主的浏览器内核重构的内置解析器,并不是完整的浏览器,所以小程序不能调用浏览器的API,比如window、document、navigat......
  • 网站支持IPv6和不支持有什么区别?
    在当今数字化时代,互联网已经成为人们生活和工作中不可或缺的一部分。随着互联网的不断发展,IPv6作为新一代互联网协议,正逐渐被广泛应用。网站支持IPv6和不支持IPv6究竟有什么区别呢?一、IPv6的背景与优势IPv6是“InternetProtocolVersion6”的缩写,即互联网协议第六版。它是为了......
  • HTTP状态码301和302的区别详解
    文章目录   1、简介   2、301永久重定向   3、302临时重定向   4、为何要重定向?   5、何时会重定向?   6、301和302的区别   7、302的危害/风险1、简介HTTP状态码中,301和302都是网页重定向跳转,但是两者的使用场景和效果是不一样的,不认真学习很容易搞混......
  • @Autowired和@Resource的区别
    1--@Autowired@Autowired是Spring里面提供的一个注解,它默认是根据类型来实现Bean的依赖注入;@Autowired里面有一个required属性,默认值是true表示强制要求bean实例的一个注入,在应用启动的时候,如果IOC容器中不存在对应类型的bean,那么启动就会报错;如果我们不希望实现依赖注入就可以......
  • gcc / g++ 编译的区别
    今天在群里聊天的时候突然发现自己叫不清楚gcc/g++这两个东西。于是学习并且进行总结分享一下。GCC:GNUCompilerCollectionGNU编译器集合。那么GNU又是什么呢?是一个操作系统!具体涉及到一些历史知识和开源运动,放入下面的链接里啦https://www.gnu.org/home.zh-cn.html所以......
  • 浅拷贝和深拷贝的区别是什么?如何代码实现深拷贝?
    浅拷贝(ShallowCopy):浅拷贝创建一个新对象,但是这个新对象的属性值是指向原始对象属性值的引用。对于对象属性是基本数据类型的,浅拷贝会复制其值。对于对象属性是对象(或数组)的,浅拷贝只复制引用,而不复制对象本身。深拷贝(DeepCopy):深拷贝创建一个新对象,并且递归地复制所有......
  • String Builder 与 StringBuffer 的区别 ----面试时遇到的一个问题
    简介:在Java中,StringBuilder和StringBuffer都是用于操作字符串的类,它们提供了类似于字符串的功能,但允许在运行时修改字符串的内容。这两个类的主要区别在于线程安全性。StringBuilderStringBuilder是一个非线程安全的类,它在Java5中引入。由于它没有线程安全的限......