- 陶小凡
-
静态变量存在于方法区中,成员变量存在于堆内存中,成员变量所属于对象JAVA成员变量和静态变量的区别,成员变量随着对象创建而存在。随着对象被回收而消失。静态变量随着类的加载而存在。
静态变量是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。
对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。
而在以Pascal为代表的许多程序语言中,所有局部变量都由系统自动分配存储空间,而所有全局变量的存储空间则以静态分配的方式获取,因此由于实际上“局部变量”和“全局变量”这两个术语已足以涵盖所有的情况,在这些程序语言中通常不使用“静态变量”这一术语,而直接以“全局变量”代之。
在这些程序语言中,静态变量就是全局变量,而即使在有明确区分全局和静态变量的程序语言中,在编译后的代码里二者也以相同的方式获取存储空间。而今术语“静态变量”的概念则主要基于C族语言的“static”的定义。
静态变量也可以用于存储常数。具体来说,静态变量可用const,constant或final等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区。
- 北营
-
作用域不同 成员变量只有在类中或者 当前对象存在才能使用 ,而静态变量 从程序开始到程序结束都可以使用
- 九万里风9
-
JAVA成员变量和静态变量的区别:
1,成员变量所属于对象。所以也称为实例变量。
静态变量所属于类。所以也称为类变量。
2,成员变量存在于堆内存中。
静态变量存在于方法区中。
3,成员变量随着对象创建而存在。随着对象被回收而消失。
静态变量随着类的加载而存在。随着类的消失而消失。
4,成员变量只能被对象所调用 。
静态变量可以被对象调用,也可以被类名调用。
所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。
静态成员和非静态成员的区别是什么?
1.访问方式不一样.静态成员(通过类名.静态成员名访问).非静态成员(通过对象名.非静态成员名访问)2.静态成员属于类.该类的所有对象共同拥有这一个成员.非静态成员属于对象,每个对象都有一份.静态成员不论有类有多少个对象.只在内存中分配一块空间.非静态成员,有多少个对象就分配多少个空间.2023-06-06 10:36:503
静态变量和成员变量的区别太难理解了
成员变量和静态变量的区别1、两个变量的生命周期不同成员变量随着对象的创建而存在,随着对象被回收而释放。静态变量随着类的加载而存在,随着类的消失而消失。2、调用方式不同成员变量只能被对象调用。静态变量可以被对象调用,还可以被类名调用。3、别名不同成员变量也称为实例变量。静态变量也称为类变量。4、数据存储位置不同成员变量存储在堆内存的对象中,所以也叫对象的特有数据。静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。成员变量和静态变量的区别1、两个变量的生命周期不同成员变量随着对象的创建而存在,随着对象被回收而释放。静态变量随着类的加载而存在,随着类的消失而消失。2、调用方式不同成员变量只能被对象调用。静态变量可以被对象调用,还可以被类名调用。3、别名不同成员变量也称为实例变量。静态变量也称为类变量。4、数据存储位置不同成员变量存储在堆内存的对象中,所以也叫对象的特有数据。静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。2023-06-06 10:36:571
C++的静态成员变量能在构造函数里初始化吗
静态构造器在静态成员第一次被访问之前调用。示例代码如下:编译运行后就会看到这样的结果 using System;namespace Test{ public class Program { public static void Main() { Console.WriteLine("外部函数调用静态属性,其值为: {0}", TestClass.Name); } } public class TestClass { private static string _name; public static string Name { get { return _name; } set { _name = value; } } static TestClass() { _name = "abc"; Console.WriteLine("静态变量 name 在静态构造去中被初始化, 初始值为: {0}", _name); } }}2023-06-06 10:37:092
java中私有变量和静态成员变量是一个意思么?有什么区别?
不是,私有变量只能在它的类中进行引用,而静态成员变量可在不同的成员方法中进行引用2023-06-06 10:37:174
c++模板类中的静态成员变量什么时候会被初始化,如果想要指定其在某个源文件中初始化,要怎么写?
What?????????????!2023-06-06 10:37:242
java中如何理解多个对象共享同一个静态成员变量?
public class Demo {public static void main(String[] args) {new inner1().setDemo("456");String demo1 = new inner1().getDemo();String demo2 = new inner2().getDemo();System.out.println(demo1);System.out.println(demo2);}}class inner1{private static String demo = "123";public static String getDemo() {return demo;}public static void setDemo(String demo) {inner1.demo = demo;}}class inner2{private static String demo;public static String getDemo() {return demo;}public static void setDemo(String demo) {inner2.demo = demo;}}结果是:456 null2023-06-06 10:37:313
java中静态的成员方法里一定都是静态的成员变量吗
是的,静态方法中的成员变量也必须都是静态的,不然编译就会报错。原因也正如你说的,静态方法不依赖与对象的存在,所以如果有非静态的成员变量就会引发歧义2023-06-06 10:37:381
类的静态成员和非静态成员有何区别?
非静态成员也叫成员变量,二者区别如下 :1、名称上的区别成员变量也叫实例变量;静态变量也叫类变量。2、内存存储的区别成员变量存储到堆内存的对象中,静态变量存储到方法区的静态区中。3、生命周期不同成员变量随着对象的出现而出现,随着对象的消失而消失。静态变量随着类的出现而出现,随着类的消失而消失。静态数据成员和普通数据成员区别较大,体现在下面几点:(1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。而静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在。(2)因为类的静态数据成员的存在不依赖与于任何类对象的存在,类的静态数据成员应该在代码中被显式地初始化,一般要在类外进行,例如上例。在C++11标准中,我们可以为静态成员提供const整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr(源自C++Primer中文版270页)。2023-06-06 10:37:451
static静态变量不就是成员变量吗
是的,静态变量是成员变量中的一种,成为静态成员变量,还有一种是实例成员变量2023-06-06 10:38:031
static变量有什么作用
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。 static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。2023-06-06 10:38:342
静态成员变量能作为其他类的成员函数的参数吗
静态成员变量当作参数传给其他函数时仅仅是个值,函数调用不就是传个值么,为什么不能?2023-06-06 10:38:4211
C++的类中怎么用静态变量?
C++类支持静态成员变量,在使用的时候,遵循类内声明,类外定义的原则。即在类内部进行声明该变量的类型以及静态属性,但不可以赋初始值,而是要在类外定义,同时赋初始值。初始值部分,=init_value可以省略,省略时默认赋值为0。在使用上:1 成员函数均可使用静态变量;2 如果静态变量属性为public,那么任意一个对象a均可使用静态变量var,使用形式为 a.var;3 如果静态变量属性为public,那么可以用如下形式,在类class_type有效的范围内,使用静态变量var:;2023-06-06 10:39:021
C++中类里面定义 静态成员变量的问题
类中的静态成员变量的初始化必须在类外实现!!并且静态变量定义的关键是:static const int aaa; 再类外初始化的格式是:const 数据类型 【类名】::变量名=数字 例如该程序中:const int a::aaa=10;2023-06-06 10:39:092
java 中类的静态方法怎么调用成员变量
static是类级别方法也就是可以类名.方法调用不加static是实例级别的也就是必须先有实例(对象)才能调用其方法如newA().test()除了把成员加static修饰还有别的办法吗 可以new个对象再调用2023-06-06 10:39:172
书上说Java里面静态变量只会有一份,这是什么意思,为什么我可以定义多个静态的成员变量
因为静态变量只在类的空间中保存了一份,它是属于类的,当你第一次加载类的时候,静态变量就会随着一起加载,再往后即便你创建对象了,由于创建时根本就没把静态变量拷贝给对象,当然这个变量也就只初始化一次了。2023-06-06 10:39:243
JAVA中静态变量成员有什么特点?简单点说 初学者深圳
1.特点一:静态变量的值是共享。比如说A类中有个静态变量V_A,A类创建了两个实例a,b。如果给实例a的变量V_A赋值,如a.V_A=1。那么这时候查看实例b的V_A变量的值也为1,也就是说A对象实例化的两个类共享同一个变量值,而且静态变量 2.特点二:不需要对象实例化就可以使用。比如A类中的静态变量V_A可以用A.V_A的形式使用◤2023-06-06 10:39:331
在Java中同类中的静态方法能否调用类成员变量?为什么?
不行,因为java中静态的东西是类级别的,也就是说用类名就可访问,也可以用任何对象名访问,无论以哪种形式访问的都是同一个东西。而一般我们所说的成员变量,是指对象级别的,也就是说每一个对象所拥有的成员变量都是独立的不同的变量,是属于对象自己拥有的。相对于来说访问范围,无疑是静态的更大,静态的可以被任何对象所访问且是同一个,而成员变量是每个对象各自拥有的。那么,为什么“静态方法不能调用类成员变量”,因为要想访问成员变量你必须有个“已经实例化好的对象”,除非你在静态方法里创建一个当前类的实例对象,否则你是无法直接调用成员变量的,因为它不知道这个成员变量属于哪个实例对象的。而在成员方法里,所有属于成员的变量、方法已经可以确定是同一个对象的,并且可以用this表示当前对象。2023-06-06 10:39:581
静态成员函数可以访问非静态成员变量吗
静态成员函数不能访问非静态成员变量,这是规定。 但是你可以换下解决问题的思路。线程的入口函数除了可以锁静态成员函数,也可是全局函数。 在全局函数里获取主窗口的句柄之后,接下来可以访问各种成员变量。2023-06-06 10:40:061
- c#不支持方法内的静态变量,原因有二。1.一般来说方法内的静态变量可以用该方法所属类的静态成员变量代替classA{classA{...publicstaticinta;//对func(){staticinta;....}//错============>...}func(){...}}2.方法中的静态变量会在多线程的应用里造成不比要的麻烦。2023-06-06 10:40:121
在jsp页面中 怎样定义一个静态成员变量
页面还可以定义静态变量,我咋不知道呢。。。。:( 多次传过来的参数。不懂。。。。。可以用局部刷新啊。2023-06-06 10:40:302
Java中静态内部类的成员可以访问外部类的静态变量吗
可以,静态变量是全局的,这样的问题自己完全可以下一个demo测试下,2023-06-06 10:40:393
如何初始化一个类中的静态成员变量
在类外初始化。格式: 类型 类::变量名例子:class Ctest{public:static int S_m_a; //声明};int Ctest::S_m_a =100 ; //初始化2023-06-06 10:40:572
java在 动态方法中 用 静态成员变量不行吗
不行的,只能在静态方法里面用静态变量。2023-06-06 10:41:042
c++静态成员变量为什么要在类外部定义
因为类的静态成语变量对于该类的对象们来说是共享的,而类内的成员变量在创建对象时会被构造函数初始化,假如该静态变量在类内,每创建一个对象该静态变量就被重新初始化,那把它定义为静态的目的何在?2023-06-06 10:42:441
C++的类静态成员函数可以访问类中的私有成员吗?为什么?
类的静态成员函数功能上等同与全局函数,不能访问类的任何成员变量和成员函数。类的静态成员函数的出现是封装的需要。2023-06-06 10:42:592
c++静态变量
静态变量关键字static。你的问题描述不是很清楚,是想问用法?2023-06-06 10:43:063
C++的类中怎么用静态变量?
例如:在类内定义:static int a;在类外面(不在其他函数中)初始化:int 类名::a=0;(0为赋给a的初始数值);静态变量属于类,可以用类名调用,而且静态变量是每个同类对象共用的变量,就好比共享文件一样,谁都可以共享使用。 其实和非静态变量的使用是一样的,两者没有任何区别,任何属于类的函数都可以直接调用它。另外就是静态函数,同样静态函数和原来的成员函数没有任何区别,它的使用和静态变量的使用一样。可能你想知道的是,另外一个常量修饰符const,常数据成员只能用形参列表赋初值,而且不能改变,常数据成员的使用和普通数据成员除了不能修改它的值外,没有任何区别!而常成员函数的使用仅限于常对象,其他的和普通成员函数没有任何区别。2023-06-06 10:43:254
类的静态成员和非静态成员有何区别?
非静态成员也叫成员变量,二者区别如下 :1、名称上的区别成员变量也叫实例变量;静态变量也叫类变量。2、内存存储的区别成员变量存储到堆内存的对象中,静态变量存储到方法区的静态区中。3、生命周期不同成员变量随着对象的出现而出现,随着对象的消失而消失。静态变量随着类的出现而出现,随着类的消失而消失。静态数据成员和普通数据成员区别较大,体现在下面几点:(1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。而静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在。(2)因为类的静态数据成员的存在不依赖与于任何类对象的存在,类的静态数据成员应该在代码中被显式地初始化,一般要在类外进行,例如上例。在C++11标准中,我们可以为静态成员提供const整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr(源自C++Primer中文版270页)。2023-06-06 10:43:381
静态变量,怎么在其他函数使用
C++类支持静态成员变量,在使用的时候,遵循类内声明,类外定义的原则。即在类内部进行声明该变量的类型以及静态属性,但不可以赋初始值,而是要在类外定义,同时赋初始值。如<pre t="code" l="cpp">class class_type{static var_type var; };var_type class_type::var = init_value;初始值部分,=init_value可以省略,省略时默认赋值为0。在使用上:1 成员函数均可使用静态变量;2 如果静态变量属性为public,那么任意一个对象a均可使用静态变量var,使用形式为 a.var;3 如果静态变量属性为public,那么可以用如下形式,在类class_type有效的范围内,使用静态变量var:class_type::var2023-06-06 10:43:451
java中静态的成员方法里一定都是静态的成员变量吗
是的,静态方法中的成员变量也必须都是静态的,不然编译就会报错。原因也正如你说的,静态方法不依赖与对象的存在,所以如果有非静态的成员变量就会引发歧义2023-06-06 10:43:511
java中使用static声明的变量是否必须赋初值
发达2023-06-06 10:44:008
JAVA中静态变量成员有什么特点?简单点说 初学者
A类实例化的两个对象2023-06-06 10:44:173
在C++中类的静态成员变量必须在类外再声明一次吗?
必须在类外初始化2023-06-06 10:44:232
java中,静态成员函数和静态成员变量可以被继承么?
楼上正解 遇到问题 要多想 然后测试一下自己的想法 才能提高自己 共勉2023-06-06 10:44:445
访问类的静态成员变量的时候出现undefined reference to
static CSingleton* m_pInstance;改为static CSingleton* m_pInstance = NULL;声明时候顺便初始化为NULL即可。你这里只声明未定义啊。2023-06-06 10:45:111
java错误 方法 main 不能声明为“静态”;只能在静态类型或顶级类型中才能声明静态
因为你的main方法在内部类中...要么把main方法写在外部类上,要么把Test1类修饰为static类,运行时要java AverageStore$Test1才能运行main方法在内部类,,,很好玩么...一般放进去也没用你说是不是所以我建议还是把Test1类放到外部,不要写成内部类2023-06-06 10:45:202
java 中是不是 只有静态方法 才能调用静态的成员变量
是!2023-06-06 10:45:306
c++类中静态成员函数怎么访问类私有变量
可以……类的所有成员函数都可以访问本类的私有成员,但是静态成员函数没有this指针,因此只能访问显式参数的私有成员……2023-06-06 10:45:442
java 为什么静态方法不能访问成员变量
生命周期不同,被static修饰的属性跟方法会随着的类的加载而存在.而非静态成员变量则是在该类被创建对象是才会初始化,如果类只是被加载而没有创建实例对象,则无法访问非静态成员.2023-06-06 10:45:532
什么时候使用静态变量和方法
静态方法和静态变量在调用时非常方便,使用类名.的方式就可以调用。那什么时候该使用静态变量和静态方法呢? 静态变量在程序运行前就已经分配了空间。静态变量属于类,如果一个类中有静态成员变量,那么这个类的所有new出来的实例对象都共享这个变量。所谓共享就是每一个实例对象都可以访问此静态变量,且对此静态变量的修改对每一个实例可见。 示例1 运行结果: 由示例1运行结果可以看出,每个Person实例对象对staticCount的更改均会被共享。而对于count变量来说,小王的修改对小钱不可见(小钱不能拿到count =1 这个值),小钱的修改对小王也不可见。因此共享变量可被使用在需要共享的变量中,如计数器。 静态的变量和方法是属于类的,是共享的,因此不能体现出多态来。从另一个角度考虑,如果一个方法和他所在类的实例对象无关,那么它就应该是静态的,否则就应该是非静态。因此像工具类,一般都是静态的。2023-06-06 10:46:001
C++类的静态成员变量为什么一定要初始化
类内只是声明。类外才是定义。所以不是一定要初始化,而是一定要在类外定义。不然系统认为这个是未定义的。2023-06-06 10:46:061
VC++中自定义类型 能否作为静态类成员变量?
static MVEC m_vec;只是在类中进行了声明,而规则是需要在类外定义class b{public: static MVEC m_vec;};MVEC b::m_vec;...2023-06-06 10:46:131
C++静态变量本身可否是一个实例对象
对象都是类的实例,我没有听过实例对象的说法。静态变量当然可以是一个对象。比如class A{public: A(int x) {...}... static A static_value;};static A value(3);static A A::static_value(3);这里value是普通的静态变量,A::static_value是A的类静态成员变量,他们都是A的实例。2023-06-06 10:46:191
java静态类在什么时候使用
/*static(静态修饰符)1. static修饰成员变量 :如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。静态成员变量的访问方式:方式1: 可以使用对象进行访问。格式: 对象.变量名。方式二: 可以使用类名进行访问。格式: 类名.变量名;注意: 1. 非静态的成员变量只能使用对象进行访问,不能使用类名进行访问。2. 千万不要为了方便访问数据而使用static修饰成员变量,只有成员变量的数据是真正需要被共享的时候才使用static修饰。static修饰成员变量的应用场景: 如果一个数据需要被所有对象共享使用的时候,这时候即可好实用static修饰。2. static修饰成员函数:*/class Student{static String name; //非静态成员变量static String country = "中国"; //静态的成员变量public Student(String name){this.name = name;}}class Demo10 {public static void main(String[] args) {Student s1 = new Student("狗娃");Student s2 = new Student("狗剩");//System.out.println("国籍:"+ Student.country);System.out.println("名字:"+ s1.name);System.out.println("名字:"+ s2.name);}}2023-06-06 10:46:261
C++的类中怎么用静态变量?
缺少初始化。静态变量必须初始化才能使用!#includeusingnamespacestd;classa{public:staticinta;};inta::a=0;voidmain(){a::a=10;cout<评论00加载更多2023-06-06 10:46:443
静态变量可以再结构体中声明吗
可以,这样就是静态成员变量,公用的。2023-06-06 10:46:512
c++ 静态成员函数全局变量
静态成员函数不能访问非静态成员变量,这是规定。 但是你可以换下解决问题的思路。线程的入口函数除了可以锁静态成员函数,也可是全局函数。 在全局函数里获取主窗口的句柄之后,接下来可以访问各种成员变量。2023-06-06 10:46:591
java中一个类中的静态变量有什么用
静态变量有什么用,那就把和成员变量的区别告诉你。静态变量用static修饰:附属于类而成员变量是附属于对象的。具体反应在 每个对象有各自的成员变量,但是他们共享静态变量。所以静态变量相当于是大家的共有资源。再调用方法上。静态变量可以通过类名或者对象名访问,而成员变量只能通过对象名。因为静态变量是类编译完成后就分配了内存空间,所以不用创建对象也可以访问。而成员变量必须在构造对象以后才会分配内存空间,只能通过对象名访问。2023-06-06 10:47:061
c++类里面添加类的静态成员指针变量如何初始化
在cpp文件里写一行: int *xxx::mmm=NULL;其中xxx是类名,mmm是静态成员指针变量2023-06-06 10:47:131
JAVA中,非静态方法可以调用静态成员变量吗?
实例方法既可以操作实例变量,又可以操作类变量.2023-06-06 10:47:204