全局变量、局部变量【好像java中不存在全局变量这样的概念】

全局变量是一个运行时刻实体,它在程序的整个执行过程中都存在。全局变量占据的存储区域的使命周期从程序开始在程序终止时结束。 全局变量显示初始化时,或者未初始化时,在程序映像中有不同的分区:已初始化的全局变量是可执行模块的一部分。未初始化的全局变量则不是可执行模块的一部分,只有当定义它们的程序被调用时(即执行时),才分配空间,声明或定义时并不分配。未初始化的全局变量在运行时被初始化为0。

局部变量也叫自动变量,它声明在函数快内,作用范围也在函数快内,不能同一源文件的其它函数使用,也不能其他文件中的函数使用,局部变量存储在栈中。无论局部变量显示初始化,或者未初始化,都只有当定义它们的程序快被调用时(及执行时),才分配空间,声明或定义时并不分配,局部变量不是可执行每模块的一部分!!除非显示地局部变量进行初始化,否则,它们的初始值是不确定的。

全局变量没有声明在任何一个函数内,作用范围在程序运行始终存在,能被同一原文件的任何函数使用,

也能被其他文件中的函数使用,但是使用extern关键字。方法执行完后,随之销毁结束。

全局变量存储在数据段中。

静态局部变量用来表示不能被其它文件访问全局变量和函数。为了限制全局变量/ 函数的作用域,函数或变量前加static使得函数称为静态函数。但此处“static”的含义不是指存储方式,而是只对函数的作用域仅局限于本文件(所以又称内部函数)。 注意:对于外部(全局)变量,不论是否有static限制,它的存储区都是在静态存储区,生存周期都是全局的。此时static只是起作用域限制作用,限定作用域在本模块内部。

如果在一个类里面,该类的方法被声明为静态的,那么该类就可以直接调用该方法,方法是:(类名).方法( ){ }

例子:

public class change{

public static void changeStr( String str){

System.out.println("a:"+str);

str="welcome";

//this.str = str;

System.out.println("first:"+str);

}

String str = "abc";

public static void main(String[] args) {

String str="1234";

changeStr(str);

System.out.println(str);

}

}

静态全局变量与全局变量的差别是:前者只能被同一源文件中的函数调用,其它文件中的函数不能调用静态全局变量。

实例变量是定义在类里面,方法体外边,包括垃圾回收,只对实例变量起作用。