首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么对于类方法中的局部静态变量,初始赋值为nil只发生一次?

对于类方法中的局部静态变量,初始赋值为nil只发生一次的原因是因为静态变量的初始化是在编译时期完成的,而不是在运行时期。在编译时期,编译器会为静态变量分配内存,并将其初始值设置为nil。这样,每次调用该类方法时,都会使用同一个静态变量的内存地址,而不会重新分配内存。

由于静态变量只会初始化一次,所以初始赋值为nil也只会发生一次。即使在多次调用该类方法时,静态变量的值已经被修改,但是静态变量的内存地址仍然是不变的。

这种设计可以提高程序的性能和效率。因为静态变量的初始化只发生一次,不需要重复分配内存和赋值操作,节省了时间和资源。同时,静态变量的值在多次调用中保持一致,可以在类方法中共享数据,方便实现一些需要记录状态或者共享数据的功能。

对于类方法中的局部静态变量,可以使用腾讯云的云函数(Serverless Cloud Function)来实现相关功能。云函数是一种无服务器的计算服务,可以在云端运行代码,无需关心服务器的运维和扩展。您可以使用腾讯云云函数来编写和部署类方法,实现静态变量的共享和状态记录。具体可以参考腾讯云云函数的产品介绍:腾讯云云函数

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Java学习笔记之三】java变量和常量

变量将被销毁;访问修饰符不能用于局部变量在声明它方法、构造函数或者语句块可见;局部变量是在栈上分配局部变量没有默认值,所以被声明后,必须经过初始化,才可以使用。    ...、构造方法或者语句块引用, 使得外部能够通过这些方式获取实例变量信息;成员变量可以声明在使用前或使用后;访问修饰符可以修饰成员变量; 成员变量对于方法、构造方法或者语句块是可见,一般情况下应该把它们设为私有...变量静态变量变量也称为静态变量,在以static关键字声明,但必须在方法、构造方法和语句块之外。无论一个创建了多少个对象, 拥有变量一份拷贝,变量资源。...静态变量除了被声明为常量之外很少使用,常量使之声明 public/private,final和static类型变量,常量初始化后不可改变。...与实例变量具有相似的可见性,但为了对 使用者可见,大多数静态变量声明为public类型。默认值和实例变量相似,可以在声明时赋值也可以在构造方法中指定, 此外,静态变量还可以在静态语句块初始化。

85860

面向对象:封装?继承?多态?

默认初始化 显示初始化(如果有显示初始化就进行) 执行构造方法, 如果构造方法里面有赋值操作,就进行赋值 把地址值赋值给引用 static静态 特点: 随着加载而加载,随着消失而消失,因为静态会一直存在静态...,过一段时间垃圾回收器就会来清理)局部:随着方法调用而存在,随着方法执行完毕而消失 初始化:静态:有默认初始化成员:有默认初始局部:没有默认初始化,所以在使用之前必须先赋值 调用不同:静态名可以调用...局部代码块,在方法内部{},限定变量生命周期,及早释放,提高内存利用率 构造代码块,在方法外面,里面{},每创建一次对象就执行一次,而且是在构造方法执行前执行,所以说就可以把构造方法里面的共性内容写到构造代码块里面...静态代码块在方法外面,里面static{},随着加载而执行,执行一次,做一些全局初始内容。...重写注意事项:A:父私有的不能被重写 B:子类重写父方法,权限必须大于等于父权限C:静态方法只能被静态方法重写(静态只能覆盖静态,其实不算重写,多态时候详细讲解) 重载和重写区别重写:发生在子父

52830

夯实Java基础系列18:深入理解Java内部类及其实现原理

, 参数类型是外部类类型, 在构造方法内部使用这个参数1添加成员变量赋值;   3 在调用内部类构造函数初始化内部类对象时, 会默认传入外部类引用。...简单来说,加载都是发生要被用到时候。内部类也是一样 1 普通内部类在第一次用到时加载,并且每次实例化时都会执行内部成员变量初始化,以及代码块和构造方法。...2 静态内部类也是在第一次用到时被加载。但是当它加载完以后就会将静态成员变量初始化,运行静态代码块,并且执行一次。当然,非静态成员和代码块每次实例化时也会执行。...静态构造块、静态类属性按出现在定义里面的先后顺序初始化,同理非静态也是一样,只是静态在加载字节码时执行一次,不管你new多少次,非静态会在new多少次就执行多少次规律三、java只有在被用到时候才会被加载规律四...public class 局部内部类 { class A {//局部内部类就是写在方法方法执行时加载,一次性使用。

1.2K10

Java基础知识大全(二)

对象:事物具体存在个体。 3:成员变量局部变量区别(重点) (1)作用域 成员变量:针对整个有效。 局部变量在某个范围内有效。...(3)初始值 成员变量:有默认初始值。 局部变量:没有默认初始值,使用前必须赋值。 4、匿名对象 (1)匿名对象就是没有名字对象。是对象一种简写形式。...(2)应用场景 A:调用一次方法。...可以被名直接调用 (3)静态注意事项 A:静态方法只能访问静态成员 为什么:因为静态内容是随着加载而加载,它是先进内存。...A:当所有对象共享某个数据时候,就把这个成员变量定义静态修饰。 B:当某个方法没有访问该类静态成员,就可以把这个方法定义静态修饰。静态生命周期比较长,所以一般不推荐使用。

61151

Java基础深入解析——与对象

静态方法静态成员变量; 堆内存存非静态成员变量(就是对象); 栈内存局部变量; 非静态方法区存和函数代码。   局部变量存在于栈内存,没有初始值。...对于只需要访问成员变量就只提供get方法对于只需要赋值成员变量只提供set方法,从而增加了安全性。 注:1.private是权限修饰符,只能用于修饰成员变量和成员函数,不能用于修饰局部变量!...构造函数只能在对象初始时候给对象成员变量进行一次赋值,创建完对象之后就不能再赋值了;若今后需要修改对象成员变量,就需要用set方法。 9.能否在成员函数调用构造函数? 不行!...4.各自作用 a)  局部代码块:是得程序员手动控制局部变量生命周期,从而能够节约内存。 b)  静态代码块:全是静态成员变量初始化。...成员变量存储在堆内存(是属于对象特有数据); 静态变量存储在方法区(==共享数据区)静态区(是所有对象共享数据) PS:纠正一个错误:堆内存存对象(非静态成员变量),栈内存局部变量,而局部变量所属函数不放在栈内存

85370

夯实Java基础系列18:深入理解Java内部类及其实现原理

, 参数类型是外部类类型, 在构造方法内部使用这个参数1添加成员变量赋值; 3 在调用内部类构造函数初始化内部类对象时, 会默认传入外部类引用。...简单来说,加载都是发生要被用到时候。内部类也是一样 1 普通内部类在第一次用到时加载,并且每次实例化时都会执行内部成员变量初始化,以及代码块和构造方法。...2 静态内部类也是在第一次用到时被加载。但是当它加载完以后就会将静态成员变量初始化,运行静态代码块,并且执行一次。当然,非静态成员和代码块每次实例化时也会执行。...静态构造块、静态类属性按出现在定义里面的先后顺序初始化,同理非静态也是一样,只是静态在加载字节码时执行一次,不管你new多少次,非静态会在new多少次就执行多少次 规律三、java只有在被用到时候才会被加载...public class 局部内部类 { class A {//局部内部类就是写在方法方法执行时加载,一次性使用。

41010

Java关键字final、static总结与对比

static不可修饰外部类、局部变量【static 属于局部变量属于其方法,并不属于】。...两者区别是: 对于静态变量在内存只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载过程完成静态变量内存分配,可用名直接访问(方便)。...初始化 在该类被第一次加载时候,就会去加载被static修饰部分,而且一次使用时加载并进行初始化,后面根据需要是可以再次赋值。跟final一样。...static修饰变量可以重新赋值 final可以修饰方法局部变量方法变量),static不可以 看下面的例子: class StaticFinal{ public final double...其实static修饰加载时候就加载完成了(初始化),而且只会加载一次也就是说初始一次,所以不会发生变化。

76620

static在C和C++用法和区别

两者之间作用域相同,但生存期不同。 2. static局部变量在所处模块在初次运行时进行初始化工作,且操作一次。 3....(对于C++class对象例外,class对象实例如果不初始化,则会自动调用默认构造函数,不管是否是static类型) 特点: static局部变量”记忆性”与生存期”全局性” 二、外部静态变量...在用static修饰局部变量后,该变量在初次运行时进行初始化工作,且进行一次。    ...对于静态局部变量如果没有进行初始化的话,对于整形变量系统会自动对其赋值0,对于字符数组,会自动赋值'\0'....它们在存储空间中都存在一个副本。可以通过和对象去调用。对于静态成员函数,只能访问静态成员函数和静态成员变量,不能访问非静态成员函数或者变量

2.6K10

聊聊并发编程:final关键字

1.1 成员变量 成员变量可以分为变量(static修饰变量)以及实例变量,这两种类型变量赋初值时机是不同变量可以在声明变量时候直接赋初值或者在静态代码块变量赋初值,实例变量可以在声明变量时候给实例变量赋初值...,在非静态初始化块以及构造器赋初值。...归纳总结: 变量:必须要在静态初始化块中指定初始值或者声明该类变量时指定初始值,而且只能在这两个地方之一进行指定; 实例变量:必要要在非静态初始化块,声明该实例变量或者在构造器中指定初始值,而且只能在这三个地方进行指定...1.2 局部变量 对于局部变量使用final,理解就更简单,局部变量仅有一次赋值,一旦赋值之后再次赋值就会出错: 1.3 基本数据类型 VS 引用数据类型 上面讨论基本都是基本数据类型,基本数据类型一旦赋值之后...,但是不能直接对引用类型变量进行修改, final保证这个引用类型变量所引用地址不会发生改变 二、方法 当一个方法被final关键字修饰时,说明此方法不能被子类重写 public class FinalDemoParent

14930

JVM-虚拟机栈详解 附面试高频题 (手画多图)!!!深入浅出,绝对值得收藏哈!!!

局部变量变量在当前方法调用中有效。在方法执行时,虚拟机通过使用局部变量表完成参数值到参数变量列表传递过程。当方法调用结束后,随着方法栈帧销毁,局部变量表也会随之销毁。 ‍‍‍...静态变量局部变量对比 变量分类: 按数据类型分:基本数据类型、引用数据类型 按声明位置分:成员变量变量,实例变量)、局部变量 变量:linkingpaper阶段,给变量默认赋值...,init阶段给变量显示赋值静态代码块 实例变量:随着对象创建,会在堆空间中分配实例变量空间,并进行默认赋值 局部变量:在使用前必须进行显式赋值,不然编译不通过。...我们知道变量表有两次初始机会,第一次是在“准备阶段”,执行系统初始化,对变量设置零值,另一次则是在“初始化”阶段,赋予程序员在代码定义初始值。...和变量初始化不同是,局部变量表不存在系统初始过程。这意味着如果创建了局部变量,并且在使用前不对它进行显示赋值,那么将无法通过编译。

35220

Java Review (十二、面向对象----final 修饰符)

对于 final 修饰成员变量而言,一旦有了初始值,就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在初始化块、构造器成员变量指定初始值,那么这些成员变量值将一直是系统默认分配0...static{ //在静态初始化块变量指定初始值,合法 d = 5 . 6; } //构造器,可对既没有指定默认值, 又没有在初始化块...//普通方法不能为 final 修饰成员变量赋值 //d= 1. 2; //不能在普通方法 final 成员变量指定初始值 // ch = ' a '; }...如果 final 修饰局部变量在定义时没有指定默认值,则可以在后面代码对该 final 变量初始值,但只能一次,不能重复赋值 ; 如果 final 修饰局部变量在定义时己经指定默认值,则后面代码不能再对该变量赋值...但对于引用类型变量而言 ,它保存仅仅是一个引用, final 保证这个引用类型变量所引用地址不会改变,即 一直引用同一个对象,但这个对象完全可以发生改变 。

44540

干货——详解Java关键字

还有需要注意是: 1.静态属性和方法可以通过.属性名或方法名,而且,该类对象也是访问静态属性和变量。 2.Java语法规定,static不能修饰局部变量。没有为什么,这就是规定。...静态静态块和静态变量静态方法是没什么区别的,也是在加载时候执行,而且执行一次。...关于静态块有两点需要注意: 1.静态资源加载顺序严格按照静态资源定义顺序加载 2.静态块,对于定义在它之后静态变量,可以赋值但不能访问。...,加载God静态块,Person person = new Person("God");这时又会去加载Person,需要注意是,static块加载一次,因为之前在父已经加载过了,这时加载构造器...使用注意点: 1.在javafinal可以用来修饰方法、和变量(包括成员变量局部变量) 2.final修饰时候,这个将永远不会被继承,成员方法也会被隐式修饰final(尽量不要用

40930

Java基础8:深入理解内部类

, 参数类型是外部类类型, 在构造方法内部使用这个参数1添加成员变量赋值;   3 在调用内部类构造函数初始化内部类对象时, 会默认传入外部类引用。...简单来说,加载都是发生要被用到时候。内部类也是一样 1 普通内部类在第一次用到时加载,并且每次实例化时都会执行内部成员变量初始化,以及代码块和构造方法。...2 静态内部类也是在第一次用到时被加载。但是当它加载完以后就会将静态成员变量初始化,运行静态代码块,并且执行一次。当然,非静态成员和代码块每次实例化时也会执行。...静态构造块、静态类属性按出现在定义里面的先后顺序初始化,同理非静态也是一样,只是静态在加载字节码时执行一次,不管你new多少次,非静态会在new多少次就执行多少次 规律三、java只有在被用到时候才会被加载...public class 局部内部类 { class A {//局部内部类就是写在方法方法执行时加载,一次性使用。

1.4K00

【Java基本功】一文读懂Java内部类用法和原理

, 参数类型是外部类类型, 在构造方法内部使用这个参数1添加成员变量赋值;   3 在调用内部类构造函数初始化内部类对象时, 会默认传入外部类引用。...简单来说,加载都是发生要被用到时候。内部类也是一样 1 普通内部类在第一次用到时加载,并且每次实例化时都会执行内部成员变量初始化,以及代码块和构造方法。...2 静态内部类也是在第一次用到时被加载。但是当它加载完以后就会将静态成员变量初始化,运行静态代码块,并且执行一次。当然,非静态成员和代码块每次实例化时也会执行。...静态构造块、静态类属性按出现在定义里面的先后顺序初始化,同理非静态也是一样,只是静态在加载字节码时执行一次,不管你new多少次,非静态会在new多少次就执行多少次 规律三、java只有在被用到时候才会被加载...public class 局部内部类 { class A {//局部内部类就是写在方法方法执行时加载,一次性使用。

1K30

Javastatic、final关键字【详解】

this指当前对象,静态方法不用声明实例对象在java,程序执行时 字节码文件会被加载到内存,如果类没有创建对象 成员变量则不会分配到内存;但对于被static修饰静态变量/方法,堆中有一个专属静态变量区...,当JVM虚拟机将字节码加载到内存时,会为静态变量/方法在堆中分配出一段空间用于放置值,即静态变量/方法跟随加载而加载当你通过定义对象时候,才会在堆内存不同对象分配空间。...此时静态方法和非静态方法都在内存当中,所以在静态方法可以使用对象去调用一个非静态方法。4)static修饰成员属于,会存储在静态区,是随着加载而加载,且加载一次,所以只有一份,节省内存。...-局部变量2.3.1 局部变量——基本类型基本类型局部类型,被final修饰后,只能赋值一次,不能再修改,“一次赋值,终身不变”。...,都会对final修饰成员变量进行赋值,即每个构造方法中都要赋值一次(不常用、了解即可)public class Person { //对于final类型成员变量,有两种初始化方式(赋值方式)

14800

【Java零基础入门篇】第 ④ 期 - 继承(三)

局部变量 形参(方法、构造器定义变量方法局部变量(在方法内定义) 代码块局部变量(在代码块内定义) 注: 1.局部变量除形参外,均需显式初始化(赋值)后才能使用; 2.局部变量生存周期存在于方法内...(静态)方法 和 实例方法总结: 方法属于所有,第一次加载时候就存在于内存中了,不用创建对象就能使用。 方法只能使用变量(静态变量),因为他们都是在加载时就存在了。...②final标记方法不能被子类覆写。 ③final标记变量(成员变量局部变量)即称为常量。名称大写,且只能被赋值一次。...对象初始化顺序 变量静态变量)、实例变量方法静态方法)、实例方法静态代码块、构造方法执行顺序称为对象初始化顺序。 1.无继承执行顺序: (1)变量和static代码块。...2.有继承执行顺序: (1)父静态变量变量)和静态代码块(执行一次); (2)子类静态变量变量)和静态代码块(执行一次); (3)父实例变量(根据创建对象个数决定,每创建一个对象执行一次

7210

常见java面试基础问题(一) | 看看你会有多少?

局部变量在某个范围内有效。(一般指就是方法,语句体内) (2)存储位置 成员变量:随着对象创建而存在,随着对象消失而消失,存储在堆内存。...局部变量:在方法被调用,或者语句被执行时候存在,存储在栈内存。 当方法调用完,或者语句结束后,就自动释放。 (3)初始值 成员变量:有默认初始值。 局部变量:没有默认初始值,使用前必须赋值。...2 匿名对象 匿名对象就是没有名字对象。是对象一种简写形式。 2.应用场景 A:调用一次方法。 B:可以作为实际参数在方法传递中使用 3 封装: 1....存储位置 静态变量存储在方法静态区。 成员变量存储在堆内存。 4. 生命周期 静态变量随着加载而存在,随着消失而消失。生命周期长。...当某个方法没有访问该类静态成员,就可以把这个方法定义静态修饰。 静态生命周期比较长,所以一般不推荐使用。 9. 静态代码块特点: 它执行一次,它比main还先执行。

25030

《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

2) 静态局部变量和全局变量一样,数据都存放在全局区域,所以在主程序之前,编译器已经其分配好了内存,但在C和C++静态局部变量初始化节点又有点不太一样。...在C初始发生在代码执行之前,编译阶段分配好内存之后,就会进行初始化,所以我们看到在C语言中无法使用变量静态局部变量进行初始化,在程序运行结束,变量所处全局内存会被全部回收。...成员初始化列表概念 在构造函数,不在函数体内对成员变量赋值,而是在构造函数花括号前面使用冒号和初始化列表赋值 效率 用初始化列表会快一些原因是,对于类型,它少了一次调用构造函数过程,而在函数体赋值则会多一次调用...由于对象成员变量初始化动作发生在进入构造函数之前,对于内置类型没什么影响,但如果有些成员是,那么在进入构造函数之前,会先调用一次默认构造函数,进入构造函数后所做事其实是一次赋值操作(对象已存在),...所以如果是在构造函数体内进行赋值的话,等于是一次默认构造加一次赋值,而初始化列表一次赋值操作。

2.3K40

编码篇-iOS程序内存分配 栈区堆区全局区等相关知识

全局区(静态区) (static) 全局变量静态变量存储是放在一起初始全局变量静态变量存放在一块区域,未初始全局变量静态变量在相邻另一块区域。程序结束后有系统释放。...NSString *str1 = @"my string"; 函数初始化生成: # 这也会初始化内存空间,但是比较特别的这个方法是autorelease类型,内存由系统释放 NSString...总的来说,对于NSCFConstantString对象,只要字符串内容不变,就不会分配新内存地址,无论你是赋值、retain、copy。...指针变量在符号表上对应地址值指针变量地址值,而引用在符号表上对应地址值引用对象地址值。...十.局部变量 在ARC情况下,局部变量离开作用域就被销毁了,所以有些时候要注意,比如UIWebView,设成局部变量,在离开了作用域就被销毁了,但它可能还要执行delegate方法,所以程序就会崩溃。

1.5K20

CC++面试题之语言基础篇(一)

static第二个作用是保持变量内容持久。存储在静态数据区变量会在程序刚开始运行时就完成初始化,也是唯一一次初始化。...static第三个作用是默认初始化为0.和全局变量一样存储在静态数据区。 说说静态变量什么时候初始化? 对于C语言全局和静态变量初始发生在代码执行之前,属于编译期初始化。...对于C++:全局或静态对象对象首次用到时才进行构造。 静态局部变量,全局变量局部变量特点 首先从作用域考虑: 全局变量:全局作用域,可以通过extern作用于其他非定义源文件。...静态全局变量 :全局作用域+文件作用域,所以无法在其他文件中使用。 局部变量局部作用域,比如函数参数,函数内局部变量等等。 静态局部变量局部作用域,初始一次,直到程序结束。...c++A访问B私有成员解决方法 使用友元函数或友元:B声明A友元,或者在A声明B友元 提供公有成员函数或接口:如果希望B私有成员被A间接访问,可以在B中提供一些公有成员函数或接口

19710
领券