当前位置: 首页 > news >正文

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之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#值传递和引用传递的区别
#按位与(&)、按位或(|)、按位异或(^)、按位取反(~)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 机器人--手眼标定算法
  • JAVA 使用POI实现单元格行合并生成
  • 秋招面经9.11
  • FAT32文件系统详细分析 (格式化SD nandSD卡)
  • Spring Boot中实现定时任务的主要方式
  • 详细分析Mysql配置文件路径的查找(多种方法)
  • IDA动态调试
  • 【电力系统】清除故障后电力系统的摆动曲线
  • 信号量(二值信号量和计数信号量)和互斥量
  • 【hot100-java】【搜索二维矩阵 II】
  • 装备综合保障研究进展整理
  • 15_分布式数据结构
  • Lua 与 C#交互
  • 通过域名无法访问不到网站,IP可正常访问(DNS污染)
  • 01 Docker概念和部署
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [Vue CLI 3] 配置解析之 css.extract
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Apache的基本使用
  • Codepen 每日精选(2018-3-25)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • PHP 的 SAPI 是个什么东西
  • React系列之 Redux 架构模式
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SQL 难点解决:记录的引用
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • webpack4 一点通
  • windows-nginx-https-本地配置
  • 分类模型——Logistics Regression
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 前端存储 - localStorage
  • 手写双向链表LinkedList的几个常用功能
  • 首页查询功能的一次实现过程
  • 微服务框架lagom
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​iOS安全加固方法及实现
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (1)(1.13) SiK无线电高级配置(五)
  • (C#)获取字符编码的类
  • (day 12)JavaScript学习笔记(数组3)
  • (ros//EnvironmentVariables)ros环境变量
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转载)从 Java 代码到 Java 堆
  • .env.development、.env.production、.env.staging
  • .Net 4.0并行库实用性演练
  • .NET C# 操作Neo4j图数据库
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器