const 与 static readonly

C# staticconstreadonly区别 const Static reado 阅读详情

重新开始更新!!!

先介绍两者在C#中的区别,明后天应该会更新java中。相信会有区别(一种扣茴字有几种写法的感觉)

const表示常量
static表示修饰的变量是类的一部分,可以说是全局唯一的变量(其中const默认是static的)
readonly表示,修饰的变量是不可被修改的

static readonly 表示变量是全局唯一且不可被修改的,这个其实和const很像。但是两者还是有区别的:

在编译时, const修饰的变量已经确定,一般认为编译后的变量是不可以被修改的。
static readonly是在运行时的常量,会有个计算的阶段

举个栗子:

在这里插入图片描述

这里的DbFileName 是写死的,而PoetryDbPath需要在不同的环境在处理获得

备注:
建议静态只读变量代替公开常量。尽管公开常量的性能要优越于静态只读变量,但两者的差距不是很大
const被其他项目编译到自己的程序集,而静态引用真是引用

2022/11/28
我来更新java部分啦

static

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
 对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。(静态代码块中可以创建实例并对实例中的对象赋值)

java中是没有readonly的

java中const类似的功能由 static final 实现:

final

final 修饰的变量即成为常量,只能赋值一次,但是 final 所修饰局部变量和成员变量有所不同。
final 修饰的局部变量必须使用之前被赋值一次才能使用。
final 修饰的成员变量在声明时没有赋值的叫“空白 final 变量”。空白 final 变量必须在构造方法或静态代码块中初始化。

final 修饰的变量即成为常量,只能赋值一次,但是 final 所修饰局部变量和成员变量有所不同。
final 修饰的局部变量必须使用之前被赋值一次才能使用。
final 修饰的成员变量在声明时没有赋值的叫“空白 final 变量”。空白 final 变量必须在构造方法或静态代码块中初始化。

注意:在使用 final 声明变量时,要求全部的字母大写,如 SEX,这点在开发中是非常重要的。

final 修饰的方法不可被重写,如果出于某些原因,不希望子类重写父类的某个方法,则可以使用 final 修饰该方法。

Java 提供的 Object 类里就有一个 final 方法 getClass(),因为 Java 不希望任何类重写这个方法,所以使用 final 把这个方法密封起来。但对于该类提供的 toString() 和 equals() 方法,都允许子类重写,因此没有使用 final 修饰它们。

final 修饰的类不能被继承。当子类继承父类时,将可以访问到父类内部数据,并可通过重写父类方法来改变父类方法的实现细节,这可能导致一些不安全的因素。为了保证某个类不可被继承,则可以使用 final 修饰这个类。

关于static和final更深入的部分,我会在了解完jvm后继续补充

C# readonly static const的区别 阅读详情

相关推荐

MySQL表名大小写敏感问题终极解决:lower_case_table_names=1不生效的3个隐藏坑

本文深入剖析了MySQL表名大小写敏感问题中,设置lower_case_table_names=1参数不生效的三个核心原因。关键在于理解该参数只能在数据库初始化前设置,并需排查配置文件优先级正确停止服务的顺序。文章提供了从Windows迁移到Linux的完整避坑指南验证方法,帮助DBA和开发者彻底解决这一跨平台兼容性难题。

weixin_29229055的博客 354

static readonly const

static 表示类所有---------------->值是可以改的,为类所有 readonly表示只读的变量--------->值不可改,实例化访问 const表示只读常量,为类所有----->值不可改,为类所有   static (为类所有)           readonly(值不可改)----------------->const(为类所有的值不可以改的...

weixin_33755847的博客 162

UNet改进(24):注意力机制-从基础原理到高级融合策略

本文系统探讨了如何通过引入各类注意力机制增强UNet在医学图像分割中的性能。文章分为基础篇、进阶篇和高级篇三个层级:基础篇介绍了时序注意力、可变形注意力、分层注意力等8种基础机制;进阶篇提出了5种混合注意力设计;高级篇则探讨了全局+局部+多尺度等复杂组合机制。实验表明,这些注意力模块在心脏MRI、肺部感染等任务中能提升2-15%的分割精度。文章还提供了硬件适配建议和完整实现代码,为研究者提供了全面的技术参考。未来方向包括NAS优化、量子注意力等前沿探索,为UNet在医疗影像等领域的应用革新提供了理论指导。

2501_91516851的博客 746

使用staticreadonly关键字构造饿汉式日志单例

一)使用staticreadonly关键字构造单例的原由 使用这两个关键字的原因主要基于它们有以下几个特征,虽然它们还有其他很多特征,但是理解以下几个特征会更容易理解如何构造单例。 1.static关键字的几个重要特征: 1)静态成员只被创建一次,静态成员是属于类而不是实例对象 2)一个类即使被创建多个实例,它的静态成员都只有一个 3)静态方法只能被重载,而不能被重写 2.reado...

f363641380的博客 802

[C#]C#staticconstreadonlystatic readonly的区别联系

1、const修饰符 初始化时机:编译时,即编译程序时将值已经嵌入代码中; 值状态:不允许动态修改 修饰范围:字段、局部变量 主要应用场景:主要应用于程序运行中不需要改变的变量的值,比如数学符号PI; 2、static修饰符 初始化时机:运行时,可以声明时赋值,也可以在构造函数,或使用时赋值 值状态:允许修改 修饰范围:类、字段、属性、方法、运算符、事件、构造函数(不能用于索引器、析构函数或类以外的类型) 主要应用场景:主要作用于类的公共属性 3、readonly修饰符 初始化时机:运行时,可以声明时赋值或

德仔 1149

TypeScript(二)

类 定义class类 对象中包含两个部分:属性和方法 实例属性: 属性存在实例,只有new了实例,才能看到这些属性 类属性: 通过类访问属性 上图中 如果能访问成功,age就是类属性 在上方代码中应该会报错,因为类指的是Person,而age是实例属性,在Person外部也没有定义过Person.age所以访问不到 怎么定义类属性 类中的属性前添加static关键字 类属性也被称为静态属性 总结: 属性前加readonly 正常情况下实例属性可随意修改值 但属性前添加readonly关键字后,

差不少的博客 870

关于C#constreadonlystatic readonly的总结

我们在定义我们的常量的时候,优先选择constconst的效率更高,如果const不能用,比如:我们不是用常数,而是用一个函数的返回值给常量初始化,那么我们就使用static readonly。 例子:static readonly int a = SomeStaticClass.GetInt(); 如果用const,就会报compile-time error 关于readonly关键字:...

andyhan_1001的专栏 3329

Conststatic readonly的区别

static readonly需要注意的一个问题是,对于一个static readonly的Reference类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。 public static readonly MyClass myins = new MyClass(); … myins.SomeProperty = 10; //正常 myins = new MyClas...

一杯敬明天 1335

如何在 C# 中使用 constreadonlystatic

平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来...

dotNET跨平台 382

readonly,conststatic的区别

一、readonly只读 1.依赖于对象==》》需要new对象,然后通过对象去访问 2.可以static组合使用,此时用法const用法相似但也有不同点(二者的内存分配过程不一样,static readonly在运行时分配内存,const在项目编译时直接写入内存) 3.支持任意的数据类型 4.声明时初始化 优劣势:速度较const较慢,但是灵活性较好...

ShellBakers的博客 835

conststaticreadonly

定义: const:它指定字段或局部变量的值是常数,不能被修改。 readonly: 当字段声明包括readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。 static:声明属于类型本身而不是属于特定对象的静态成员。   使用: const用于定义常量,一般用strut进行存储,并在其他地方直接访问。 readonly用于定义只读的变

在坑中上爬,在打击中成长 1435

C# ConstreadonlyStatic区别

对于三者的关系,来彻底分解一下。1.静态常量,也称编译时常量,编译时--意味着用const定义的字段,在编译时就要确定值(也可以理解为声明时),之后无法更改。属于类型级,意思是用类名直接访问,被所有对象共享!a.编译时常量,编译时/声明时确定值,之后不能修改。b.性能比readonly稍好,灵活性差一些。c.静态常量,隐式被Static修饰,不能再用static重复修饰。d.静态常量的数据类型(内建的int和浮点型)、枚举或字符串。e.属于,意思是用类名直接访问,被所有对象共享!

Sevol_Y 1298

所谓conststatic的区别 conststatic readonly 区别

对于C/C++语言来讲, : -----const就是只读的意思,只在声明中使用;  -----static一般有2个作用,规定作用域和存储方式.       对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;        对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函

lijun5635的专栏 1115

C# static constreadonly区别

Const 定义的是静态常在对象初始化的时候赋值.以后不能改变它的值.属于编译时常量。 Static 定义的是静态变量.可以再外部改变它的值.. Readonly 是只读变量.属于运行时变量.可以在类初始化的时候改变它的值.. conststatic 不能在一起用 我们都知道,conststatic readonly的确非常像:通过类名而不是对象名进行访问,在程式中只读等等

HelloLWei的专栏 1293

C#中的staticreadonlyconst的比较

C#中有两种常量类型,分别为readonly(运行时常量)const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景。 工作原理     readonly为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,因此也有人称其为只读变量。     c

High_Mount的专栏 2万+

Unity&&C#学习笔记-constreadonlystatic sealed

在类里面可以不初始化值,有默认值readonly修饰的常量则可以延迟到构造函数初始化;引用类型readonly只有地址是不变的。

qq_54351806的博客 1382

C#conststaticreadonly的区别

一、 constreadonly ①【const】其修饰的字段只能在自身声明时初始化。 ②【Readonly】是只读变量,属于运行时变量,可以在类初始化的时候改变它的值。该类型的字段,可以在声明或构造函数中初始化。 ③小结: 《1》根据所使用的构造函数,readonly 字段可能具有不同的值。 《2》对于每一次编译后的结果,const的值是固定的,而readonly的值是可以在运行的时...

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 3289

C#学习笔记2-静态常量和动态常量

1.静态常量 public const int constValue= 1; 静态常量只能声明简单的数据类型,如:整型、浮点型、枚举或字符串。故静态常量属于值类型,不可以用new来初始化静态常量,用const定义的常量需要用访问静态常量的方式去访问,用访问对象成员的方式访问就会报错。 静态常量在编译时,编译器会自动将它替换成其对应的值,例如: int num = constValue;

UTD 611

[C#基础知识] ReadOnly关键字修饰的变量可以修改,只是不能重新分配

MSDN 官方的解释 readonly关键字是可以在字段上使用的修饰符。当字段声明包括readonly修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中. 很多初学者看完书就会认为,readonly修饰的变量在以后是不能修改的,在以后的开发中从不对ReadOnly的变量进行修改操作,形成思维定势,这个观念是错误的。 首先要明确一点:更改!...

weixin_30604651的博客 263

(三)c#conststaticreadonly的区别

const

m0_58717895的博客 1800

MT4变色均线_变色均线_变色指标_mt4_外汇指标_mt4均线变色_

MT4 变色均线,适用于外汇,黄金,原油,windows 平台使用的MT4指标

上一篇: Vue el-card去除边框——记录一种询问度娘之外的方法
下一篇: 创建springboot+mybatis+redies+vue项目流程记录(1)
和光9
博客等级 码龄6年 2粉丝 41原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值