全局变量、静态全局变量、局部变量、静态局部变量
2015-09-07 15:18
274 查看
Tables | 作用域 | 存储方式 | 生命周期 | 初始化 | java | C/C++ |
---|---|---|---|---|---|---|
全局变量(外部变量) | 整个工程文件内 | 内存的静态存储区域 | 整个源程序 | 0 | 没有全局变量的概念 | 在main()函数前(类外)定义,用extern int g_int ;声明,才可以使用 |
静态全局变量 | 定义它的文件内 | 内存的静态存储区域 | 整个源程序 | 0 | 类里声明为public static的变量 | main()函数内(类内)定义变量使用static |
局部变量 | 在定义它的函数内 | 内存的栈区 | 函数返回后变量消失 | 不可知 | 在函数内直接定义 | 在函数内直接定义 |
静态局部变量 | 在定义它的函数内 | 内存的静态存储区域 | 整个源程序 | 0 | 无 | 在函数内使用static定义 |
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的意义就是要这个变量在对象没产生之前就就存在,那么在时间上造成冲突
相关文章推荐
- android app多渠道分发打包
- 对表拆分几种方法比较
- mysql 批量杀死sleep进程
- INSERT ... ON DUPLICATE KEY UPDATE 插入或者更新一起写 。掉咋天
- 欢迎使用CSDN-markdown编辑器
- LeetCode----Merge Two Sorted Lists
- 20150907
- 双击更新所有已安装的python模块
- android自动化工具之--Monkey log分析说明
- ios时间处理
- Tomcat实现多域名之间session共享
- Swift-边读边记-[1]
- 阅读《Android 从入门到精通》(2)——熟悉开发环境
- 1-4 Zabbix 用户管理
- linux(centos)下SVN服务器如何搭建
- python查询mysql,返回json
- 多线程之取钱
- Mac OS X 下安装 Ant
- 7、java5线程池之单一线程池newSingleThreadExecutor
- List 与 table 分组(group by )