Tables | 作用域 | 存储方式 | 生命周期 | 初始化 | java | C/C++ |
---|---|---|---|---|---|---|
全局变量(外部变量) | 整个工程文件内 | 内存的静态存储区域 | 整个源程序 | 0 | 没有全局变量的概念 | 在main()函数前(类外)定义,用extern int g_int ;声明,才可以使用 |
静态全局变量 | 定义它的文件内 | 内存的静态存储区域 | 整个源程序 | 0 | 类里声明为public static的变量 | main()函数内(类内)定义变量使用static |
局部变量 | 在定义它的函数内 | 内存的栈区 | 函数返回后变量消失 | 不可知 | 在函数内直接定义 | 在函数内直接定义 |
静态局部变量 | 在定义它的函数内 | 内存的静态存储区域 | 整个源程序 | 0 | 无 | 在函数内使用static定义 |
java中一切都是类的一部分。java中的全局变量可以定义一个final类来实现类中的变量可以当作全局变量
1、static应用范围:可用于内部类、方法和变量。
2、标记一个方法为static,意味着这个方法,被所在类的所有实例公用,在类装载时被首先执行,执行一次即被所有该类的实例共享,同时意味着:
A、static方法内部不能引用非static变量。
B、static方法不能被子类重写为非static方法。
C、父类的非static方法不能被子类重写为static方法。
D、static代码块可以用static {}来完成,在类被第一次装载时执行初始化,先于静态方法和其他方法的执行。
关于java没有静态局部变量的理解:
很简单的原因是因为sun并没有给java的static赋予c/c++中static那么多的意义。在java中static的意义就只有是在类被加载之后就分配空间(存在)的东西
使用局部静态变量是很不好的编程习惯,在c/c++编程中也应该尽量避免。这种方法基本上都不是thread safe的,重入也有问题。
没有什么东西是一定要使用局部静态变量的,一般这种都是为了记录状态,其实只要加个参数就可以解决了。
我们知道成员方法是在对象创建后才分配空间的,那么如果在成员方法内部定义个static变量,按照java中static的意义就是要这个变量在对象没产生之前就就存在,那么在时间上造成冲突