首先请看一个错误的例子:
如果要访问一个对象的方法或者变量(非static),那必须先初始化该对象,如修改上面的程序:
之后就可以访问P38的变量和方法了。
对static的变量、方法而言,不需要初始化/创建该对象,因为这些static的变量、方法是独立于这些类实例的。如果在static方法中访问了非static的变量/方法,而实际上要访问这些非static的变量的条件是该类必须已经实例化了,而这完全是矛盾的。
1.无需实例化某个类就可以访问该类的static变量、方法。
2.必须实例化某个类后才能访问该类的非static变量、方法。
从上面2个条件可以看出,从逻辑上,也不允许从static方法中访问非static方法,变量。除非在该static方法中实例化要访问的类之后,才能访问该类的方法/变量。
关于static函数在VM内调用的过程这里做一个简单的讨论。
运行TestMain 的结果是:
hh
被加载……
16
16
第一次调用MyStatic的时候,VM便为MyStatic生成了一个实例,之后再调用MyStatic.num都是使用了同一个实例。
分享到:
相关推荐
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把...
详细说明 static 关键字的使用方法 与使用场合
子函数 static 初学者可以参考 子函数 static 初学者可以参考
无法使用file1.cpp文件中static函数 三、静态数据成员/成员函数(C++特有) C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数. 这是与普通成员...
C_语言静态变量和静态函数,可以让您对C语言静态变量和静态函数有更清晰的认识
c++ qt 中在静态函数中发信号的方式,以及回调函数的基本使用, c++ qt 中在静态函数中发信号的方式,以及回调函数的基本使用, c++ qt 中在静态函数中发信号的方式,以及回调函数的基本使用
一般地,线程要读写类的私有成员变量,只有两种方法:将全局函数声明为类友元friend,或者使用静态的成员函数static。那非静态的成员函数呢?一般地方都说的是,不行,做不了。。。为什么不行?都是代码区的代码,...
讲述Qt如何实现静态函数中发送信号,对应文章: https://lizhifun.blog.csdn.net/article/details/112631489
当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。 下面是a.c的内容 代码如下:char a = ‘A’;...
引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次...
MarkDown文档,大家应该都知道,@Value注解可以给类中的非静态变量注入值,但是给静态变量注入值则会有警告,结果是失败的,本文档说明了如何使用@Value注解给类的静态变量赋值
Rand函数的详细讲解,Rand函数在软件开发中有着广泛的使用
static数据成员,static成员函数的使用方法实例
收集了函数指针_extern_typedef_const_static的基本用法。 拿出来供大家共享
C++类与对象:static静态数据成员静态成员函数.doc
主要介绍了java static块和构造函数的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握Java static关键字的函数方法,需要的朋友可以参考下
主要为大家介绍了Drupal7之drupal_static函数用法,需要的朋友可以参考下
static函数与普通函数有什么区别? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者...
看PW源码的时候发现setHeader()函数中使用static关键字,很奇怪,以前也没这样用过。 static用在函数里面,声明一次变量后,如果再次调用这个函数将会在初始值延续,如$sapi这里将累加。 复制代码 代码如下: echo ...