目录
声明和变量
声明
变量
1、为什么要初始化
2、系统初始化和手动初始化
3、变量的类别
局部变量
成员变量
类变量
成员和局部变量的区别
参考材料
声明和变量
声明
1.变量的声明
因为不声明的变量被编译器识别的代价高于声明后识别的代价。 从编译速度来看,声明即有利于统一管理,也有利于编程人检查代码。
2.函数的声明
当你和你的小伙伴们写一个工程的时候,往往会出现,我已经写完而你却还没写完,然而我写的部分要调用你写的函数,这就造成我无法测试我写的部分的正确性。现在,我可以用函数调用声明假装你的函数已经写好,这样我就可以测试我的代码了。
感悟:
程序的代码书写需要结构化,程序的思想与逻辑更需要结构化。
结构而成体系,协作而不搅乱全局,简化繁琐的工作,便于决策和思考核心,开拓广度和研究深度。
3.声明提升
var a=1和 var a ,a = 1 都有两个阶段,第一个是编译阶段的任务,而第二个则是执行阶段的任务。编译阶段对整个文件的声明部分做完整的分析(包括局部变量),从而确定变量的作用域。在当前作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理。 可以将这个过程形象地想象成所有的声明(变量和函数)都会被“移动”到各自作用域的最顶端,这个过程被称为声明提升。而所赋的值留在原地。
变量
1、为什么要初始化
操作系统虽然回收了该内存空间,但它并不清空该内存空间中遗留下来的数据。
如果没有经过java虚拟机赋初值的变量。分配给变量的储存空间可能被使用过,会有一些垃圾信息。
2、系统初始化和手动初始化
首先纠正一个观点,全局变量和局部变量都是需要初始化的。这是因为使用没有初始化的变量是不安全的。只不过全局变量的初始化工作可以交给JVM。而局部变量需要赋初值进行初始化。
为什么局部变量不可以呢?我认为是出于性能等多方面的考虑。
堆中,JVM在分配内存时将整块区域置为零即完成了初始化,方便快捷。而局部变量运行时被分配于栈中,量大,生命周期短,如果由JVM完成初始化,将是一笔很大的性能开销。所以java明文规定局部变量必须显性初始化。
3、变量的类别
局部变量
局部变量:方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量
成员变量:是定义在类中、方法体之外的变量。这种变量在创建对象的时候实例化(分配内存)。成员变量可以被类中的方法和特定类的语句访问。
类变量
类变量(静态变量):类变量也声明在类中,方法体之外,但必须声明为static类型。static 也是修饰符的一种。
局部变量的值覆盖全局变量的情况成立的条件。
1、全局变量和局部变量重名。
2、全局变量和局部变量都进行了声明。
实例:
\#include <iostream> using namespace std;
// 全局变量声明 int g = 20;
int main () {
// 局部变量声明 int g = 10;
cout << g;
return 0; }
当上面的代码被编译和执行时,它会产生下列结果:
10
成员和局部变量的区别
作用域:
- 成员变量定义在类中,在整个类中都可以被访问。
- 局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
生存周期:
- 成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
- 局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
初始化:
- 成员变量系统默认初始化值。
- 局部变量系统不能默认初始化值,使用时需要赋值初始化。
参考材料
C语言变量初始化是必须的吗?不初始化会怎样? http://m.biancheng.net/view/156.html