我来提一点吧,可能我的理解也不是很透彻,这个是我在疯狂JAVA讲义里看到的
下面有3个程序
程序1:
public class TestScope1
{
//定义一个成员变量作为循环变量
static int i;
public static void main(String[] args)
{
for ( i = 0 ; i < 10 ; i++)
{
System.out.println("Hello");
}
}
}
程序2:
public class TestScope2
{
public static void main(String[] args)
{
//定义一个方法局部变量作为循环变量
int i;
for ( i = 0 ; i < 10 ; i++)
{
System.out.println("Hello");
}
}
}
程序3:
public class TestScope3
{
public static void main(String[] args)
{
//定义一个代码块局部变量作为循环变量
for (int i = 0 ; i < 10 ; i++)
{
System.out.println("Hello");
}
}
}
这3个程序,其中程序3的效率最高,程序1的效率最低。
程序3效率高,变量i只是在循环中使用,因此可以作为一个局部变量定义在循环体内作为一个局部变量,循环退出后就通过JAVA中的垃圾回收机制回收。
而程序1的效率最低,因为把变量i定义成静态属性,是一个类属性,在类加载是就存在,直到系统完全销毁该类,生命周期与类相同,对内存来说是一个极大的负担。尤其是该属性的作用只是作用于某个循环,这样做就更不可取。程序简单时感觉不到之间的差距,当在一个非常复杂的程序中时,2者差距会非常大。
程序2是将i定义成类的一个成员变量或者实例属性,在类被实例化时开始存在,他的作用范围进存在与本实例所存在的范围有关。它也有一定的内存消耗,但是比程序1小,比程序3大,介于两者之间。
对于我理解中有什么不对的地方,麻烦大家指正,谢谢~~~{:soso__8961432591078930798_3:}
|
|