静态成员变量是属于某个对象实例(静态的成员变量)
请问在java中一个类里的static数据成员不是属于类而不属于对象吗?那不管对象怎么调用这个静态
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
每个静态变量内存地址是唯一的,所以题目中不管new PC()多少个实例,ad变量所指向的内存地址是唯一的(也就是说m.ad、m1.ad和PC.ad相当于同一个变量),只要有一个地方改变,所有引用的地方都会改变。
静态成员与实例成员之间有什么不同?
静态成员又叫类成员,指的是用static修饰符所修饰过的变量或方法。
实例成员就是没有用static修饰的变量或方法。
主要不同就是这有没有static修饰。造成的结果是静态成员可以直接由类名调用,而实例成员还要用new标示符进行实例化,长生对象才能去调用方法和变量。
(了解即可,不必记忆) 深层原因是静态成员在分配空间时与实例成员的不同。静态成员再分配时只有一份地址空间,只用分一次就行,以后都用这份空间。而实例成员再分配时是每次产生一个成员都要在再配一次空间。
问个java中静态成员变量的问题
属于的,当你在main方法中实例化lei的时候,类加载器开始加载有lei这个类,这时候会首先加载lei的静态成员,静态属性和静态方法,然后才加载非静态的成员,最后调用构造方法.所以a和b都是属于lei的,只是加载的时间不一样,如果实例化类,那他们都属于对象.
C++中类里static成员变量与普通的成员变量有什么不同?
C++中“类”的static成员,只有一个实例。也就是所有的类的实例都用同一个变量。如果这个变量是public的,那类的外部能够直接访问,方法是类名“变量名”。
代码中的实例变量、类变量、常量都属于成员变量,这与变量的修饰符有关系,也就是上面代码中的private、static、final等修饰符。
首先类的静态成员变量为类的全局变量,并不为类的对象所拥有。而类的普通成员变量通过类生成对象后是属于生成对象的变为此对象所特有,不能与其它生成的对象所共有。如下图所示,两个对象a,b的成员变量x并不是相同的。
静态成员变量需要在全局定义,普通成员变量是属于某个对象的,不需进行全局定义。访问类的静态成员变量可以通过如下形式,如类A中定义了静态成员变量x,形式为类名,变量名,类的静态成员变量在对象还没有产生前就已经存在了。
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的实例。
JAVA中,非静态方法可以调用静态成员变量吗?
当然可以。
1.
静态成员变量和静态成员方法都是属于类而不是某一个具体实例的,静态成员(包括属性和方法)是在类加载阶段就已经初始化了的,所以当某一个实例访问静态成员的时候,静态成员肯定是已经存在了的,所以可以访问。
2.反过来,如果让静态方法去访问实例成员那就不行了,因为实例成员的初始化在静态成员之后