static final 和 final

Java static final、static和final的区别 1、static finalstatic修饰的属性强调它们只有一个,final修饰的属性表明是一个常数(创建后不能被修改)。static final修饰的属性表示一旦给值,就不可修改,并且可以通过类名访问。static final也可以修饰方法,表示该方法不能重写,可以在不new对象的情况下调用EP:下面程序定义static final int CONSTANT 重新赋值时编译会出错。packag... 阅读详情

final关键字

可能使用到final的三种情况:数据、方法和类。

1. final 数据

1.一个永不改变的编译时变量
2.一个在运行时被初始化的值,而不能被改变

一个既是static 又是final的域只占一段不能改变的存储空间。
对于基本类型,final使数值恒定不变;
而对于对象引用,一旦引用被初始化指向一个对象,就无法把它改为指向另一个对象,然而对象自身却是可以修改的。

一个既使用final 有使用static final的例子

class SelfControl{
    private static int counter;
    private int id=counter++;
    public String toString(){
        return "SelfControl  "+id;
    }
}
class WithStaticFields{
    final SelfControl sc=new SelfControl();
    static final SelfControl ssc=new SelfControl();
    public String toString(){
        return "sc= "+sc+"\n"+"ssc"+ssc;
    }
}

public class FinalFields {
    public static  void main(String[] args){
        System.out.println("first object");
        System.out.println(new WithStaticFields());
        System.out.println("second object");
        System.out.println(new WithStaticFields());

    }

}

运行结果:
first object
sc= SelfControl 1
ssc= SelfControl 0
second object
sc= SelfControl 2
ssc= SelfControl 0

final :在一个对象类唯一;
static final:在多个对象中都唯一;

空白final
是指被声明为final但未给定初始值的域。编译器一定要保证空白final在使用之前一定被初始化。可以在构造器中或者调用this()进行初始化,否则编译器报错。使用空白final,一个类中的final域可以做到根据对象的不同而有所不同,但又保持其恒定不变的特性。

class Poppet {
  private int i;
  Poppet(int ii) { i = ii; }
}

public class BlankFinal {
  private final int i = 0; // Initialized final
  private final int j; // Blank final
  private final Poppet p; // Blank final reference
  // Blank finals MUST be initialized in the constructor:
  public BlankFinal() {
    j = 1; // Initialize blank final
    p = new Poppet(1); // Initialize blank final reference
  }
  public BlankFinal(int x) {
    j = x; // Initialize blank final
    p = new Poppet(x); // Initialize blank final reference
  }
  public static void main(String[] args) {
    new BlankFinal();
    new BlankFinal(47);
  }
}

final 参数
在参数列表中将参数指明为final,将无法在方法中更改参数引用所指向的对象。

class Gizmo {
  public void spin() {}
}

public class FinalArguments {
  void with(final Gizmo g) {
    //! g = new Gizmo(); // Illegal -- g is final
  }
  void without(Gizmo g) {
    g = new Gizmo(); // OK -- g not final
    g.spin();
  }
  // void f(final int i) { i++; } // Can't change
  // You can only read from a final primitive:
  int g(final int i) { return i + 1; }
  public static void main(String[] args) {
    FinalArguments bf = new FinalArguments();
    bf.without(null);
    bf.with(null);
  }
}

2. final 方法

对方法使用final,确保在继承中,使方法的行为不会改变,并且不会被覆盖。

3. final 类

final 类表明该类不能被继承,final类中的方法都被隐式指定为final,因此无法覆盖。

《FreeRTOS 入门与实战》第2章:开发环境搭建(实战) STM32CubeIDE工程创建与FreeRTOS移植J-Link调试环境搭建SystemView可视化跟踪配置。 阅读详情

相关推荐

LABVIEW学习之MODBUS-TCP通讯

LABVIEW学习之MODBUS-TCP通讯 1,MODBUS-TCP通讯介绍: MODBUS通讯是工业上面经常用到的一种通讯协议。该协议的原理及介绍不在此累述,下面直接介绍LABVIEW对此协议的应用。 2,MODBUS通讯所需的函数: 安装了DSC模块之后可以在数据通信内找到相关函数 3 ,主VI 主要思路就是使用状态机来进行连接 读取 写入 断开。使用枚举类型来选择状态: 1,连接 2,写入多个M继电器: 3,写入单个M继电器 4,写入双字节D...

风动9527的博客 2万+

可以防止方法覆盖的声明有:final void f(){}static void f(){}

这两个声明可以防止方法被子类修改或覆盖,从而确保方法在继承关系中保持不变。修饰符声明的方法属于类级别的方法,不属于实例方法,因此不能被子类重写或覆盖。修饰符声明的方法是最终方法,不能被子类重写或覆盖。关键字用于将方法与类关联,不依赖于具体的实例对象。关键字用于确保方法的最终实现不会被修改,而。可以防止方法被覆盖,但它们的作用不同。

m0_53298280的博客 1642

告别手动核对!用这个ABAP报表一键导出所有物料的库存与需求清单

本文介绍了如何通过定制化ABAP报表一键导出SAP系统中所有物料的库存与需求清单,整合MD04、MB52、ME2N等多个事务码的数据,大幅提升供应链管理和生产计划效率。该报表可自动生成包含库存状态、MRP需求、采购订单等关键指标的物料全景视图,帮助企业减少手工操作错误,节省时间成本。

weixin_33725515的博客 467

Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!

大家应该经常会遇到这static、this、super、final四个关键字,甚至容易把含义搞混。其实static、this、super、final这四个关键字互相是没有什么联系的(除了this和super有一定关系外),所以大家其实要刻意区分一下这几个对应的功能和使用场景那么这篇博客带领大家学习一下static的用法。

dream_ready的博客 5352

window部署open claw(使用wsl-Ubuntu-docker部署)

本文详细介绍了在Windows 11系统下通过WSL2+Docker部署OpenClaw的完整流程。首先需要满足硬件配置要求并开启虚拟化功能,然后依次完成WSL2安装配置、Docker Desktop安装、OpenClaw镜像拉取等步骤。重点说明了端口映射、socat转发配置及openclaw.json文件修改方法。最后通过验证WSL2内网IP和端口访问服务。该方案具有最佳兼容性,能有效避免Windows环境下的依赖冲突问题。

Kmoyic的博客 2763

【Unity】ABB CRB 15000 外部引导运动实战:从配置到实时控制

本文详细介绍了ABB CRB 15000协作机器人的外部引导运动(EGM)功能在Unity环境中的实战应用。从RobotStudio配置到Unity实时通信架构,再到EGM运动控制技巧和问题排查,全面解析如何实现机器人的高精度实时控制。通过实际案例展示EGM技术在精密装配等场景中的显著效果,帮助开发者快速掌握这一先进技术。

weixin_29057695的博客 445

编译时多态和运行时多态

编译时多态和运行时多态 多态分为两种情况:编译时多态和运行时多态。如果在编译时能够确定执行多态方法称为编译时多态,否则称为运行时多态。 一、编译时多态 方法重载都是编译时多态。根据实际参数的数据类型、个数和次序,Java在编译时能够确定执行重载方法。 方法覆盖表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。例如,以下声明p、m引用本类实例,调用toString()方法是编译时多态。 public class Test { public static void

twx31420的博客 4997

在Rviz仿真环境中搭建传送带

<geometry><material>

qq_58268456的博客 936

Java关键字final、static使用总结

一、final         根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。         final类不能被继承,没有子类,final类中的方法默认是final的。         final方法不能被子类的方法覆盖,但可以被继承。         f...

towne 203

uniapp(vue3)- 详解安装/使用pinia报错reportJSException >>>> exception function:createInstanceContext, excepti

uniapp vue3 pinia报错reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack -> at useStore,H5网页,微信小程序,安卓App,苹果App,nvue,uniapp安装使用pinia出现报错at useStore,uniapp+vue3+ts 使用pinia报

🏆 前端领域优质创作者 4048

IEEE69节点数据(Matlab)

IEEE69节点数据(Matlab)

weixin_46039719的博客 1162

Static和Final的深度理解

      在Java中,static和final是使用频率非常高的关键字,之前也简单地用过static和final,但是始终觉得没有从深层次上理解这两个关键字。本文将从class文件和类的初始化机制出发理解这两个关键字。 一、编译时常量:      很多人包括我最开始有这种误解,是不是被final修饰的变量就是编译时常量呢,非也。顾名思义,编译时常量是指变量在编译期间就可以确定了,下面我举两...

277

windows在使用ping 127.0.0.1时出现一般故障的解决方案

本文主要介绍了windows在使用ping 127.0.0.1时出现一般故障的解决方案,希望能对使用windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 7万+

static、final、static final的区别

转自:http://blog.youkuaiyun.com/qq1623267754/article/details/361907151. final  final类不能被继承,没有子类,final类中的方法默认是final的final方法不能被子类的方法复盖,但可以被继承final成员变量表示常量,只能被赋值一次,赋值后不能再被改变final不能用于修饰构造方法private不能被子类方法覆盖,privat...

hust_yfang的博客 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

final、static和static final区别和使用

final、static和static final用法 1.final关键字 final关键字修饰变量: 1.这个变量必须在构造对象时就能够初始化 2.如果是基本数据类型的变量,那么这个变量一旦初始化就不能更改,相当于一个常量 3.如果是引用数据类型的变量,则初始化后就不能更改它的引用,不过引用对象变量的值可以更改 final关键字修饰方法: 1.表明这个方法不能被子类重写,防止类修改它的含义 与static比较都不能重写但可以被子类继承调用,不同在于static可以写一个同名方法隐藏父类的方法,而fina

小白的博客 6077

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java中的static和final

一、final   根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。  final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改

6202

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java中static、final、static final的区别

final可以修饰:属性,方法,类      final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。      final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。      final修饰的属性表明是一个常数(创建后不能被修改)。      final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继

沉浮 4万+

static和static final的区别

JVM-static vs static final 如果不清楚JVM类加载过程请先看另一篇文章类加载系统 开发时我们经常用到static以及static final来修饰我们的字段变量,那么他们到底有什么区别呢?其实他们的区别可以用使用字节码文件来解析 1. 准备测试代码 package com.hgy; import java.util.Arrays; import java.util.List; public class hello { private static String name

sui_feng_piao_guo的博客 5565

final和static

1.final修饰类 用final修饰类,表示这个类不能被继承 2.final修饰方法 使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。 ...

青苔小榭 1万+

Java static 与 final 详解

本文深入解析Java中static和final关键字的核心概念与应用。static用于声明类级别的成员(变量、方法、代码块、内部类),在类加载时分配在方法区,所有实例共享同一副本。final表示不可变性,可修饰类(不可继承)、方法(不可重写)和变量(引用不可变)。static final组合定义全局常量,可能被编译器内联优化。文章通过代码示例详细展示了static的四种使用形式(静态变量、常量、代码块、方法)和final的三种应用场景(类、方法、变量),并分析了它们在内存中的存储特点及线程安全特性。

J_liaty的博客 1万+

JAVA中static、final、static final的区别

1 问题当我们在使用java写类的属性时总会用到很多的类型去修饰它,比如字符串String,整数型int,但是我们偶尔也会遇到 static、final、static final,那么他们的区别是什么呢?2 方法final final可以修饰属性、方法、类,局部变量(方法中的变量)。 final修饰的属性的初始化可以在编译期,也可以在运行期,但是在初始化后就不能改变了。final修饰的属性表明...

算法与编程之美 2104

static final 和 static、final 的区别

static final 和 static、final 的区别

m0_63145380的博客 713

static和final以及初始化

static 最近看的ThinkingInJava中又这样一句话:static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。 说道用途就首先介绍static的特点: 当声明一个事物是static是,就意味着这个域或这个方法不会与包含它的那个类的...

GailyYelp的博客 2451

static和final关键字 ,static,final

static, final, springboot,springcloudalibaba,vue

QQ903275718的博客 699

final、static、static final 总结

final、static、static final 的总结

猿兄 407

final 和static 的区别

final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。 final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。 final修饰的属性表明是一个常数(创建后不能被修改)。 final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被...

叫我程序猿的博客 1646
上一篇: java初始化
下一篇: 接口与工厂
技术搬运工
博客等级 码龄11年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值