栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。对于栈内存,我们需要明确的是里面都存了什么。
在栈内存中存储的都是局部变量。那什么是局部变量呢?局部变量通常是定义在方法中的变量。而且,变量的作用域一旦结束,该变量在内存中就自动释放。这就意味着栈内存的更新速度比较快,因为在栈内存中,变量的生命周期比较短。
一般来讲,局部变零都有自己的所属函数,函数在被加载进栈内存的同时,其中的局部变量也被加载进栈内存。那么除了函数以外哪里还有局部变量呢?比如在 for 循环中:
class ForDemo
{
public static void main (String[] args)
{
for(int x = 1, x<5, x++)
{
System.out.println("x="+x);
}
//System.out.println("x="+x);不可在此操作x!
}
}
循环变量X就是一个局部变量,当 for 循环结束后,变量 X在内存中就被释放了。所以,不能在for循环外操作变量X 。除了 for循环中有局部变量以外, if 代码块中也有局部变量:
class IfDemo
{
public static void main (String[] args)
{
int x = 5;
if(x = 1)
{
System.out.print("a");
}else
{
System.out.print("b");
}
}
}
还有一个地方也有局部变量,就是在局部代码块中:
class BlockDemo
{
public static void main (String[] args)
{
{
int x = 2;
System.out.print(x);
}
//System.out.print(x);不可在此操作x!
}
}
局部代码块看似毫无用途,但是在大程序中,或许会起到优化程序的作用。比如,我们有一个变量,而对这个变量的操作早早就结束了,而且将来再也不会操作这个变量了,那我们就可以将这个变量及其操作放在一对{}中,当这个{}结束时,里面的变量就被自动释放了,这样这个变量就不会在占用内存了。我们也可以到动力节点在线的视频课程中找到相关的源码,自己敲出对应的代码运行,才更有实践的意义。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54