要想正确地理解控制的作用,我们必须首先理解一下作用域的概念。对于程序控制,你应该首先理解不同的控制在什么样的范围内起作用,这就是我们所说的作用域。
对于作用域中所定义的各种变量,作用域限定了这些变量的可被访问范围,也就是说“变量的可见性”及“存在时间”。
所谓变量的可见性:是指只有在规定的作用域范围内,变量是可以被访问及操纵控制的。
所谓变量的存在时间:是指只有在规定作用域范围内,变量是存活的,一旦超出了变量的存活范围,变量就不存在了,对于这种不存在的理解应该有两种情况:
1)内存立即被回收,变量在内存中不存在了,这种情况主要针对于基本类型。
2)对象句柄不存在了,对象不再被操纵,对象的内容还存在,这种情况主要针对对象类型。
一、块作用域
一个块或复合语句是用一对花括号“{}”括起来的任意数量的简单Java语句。块定义了变量的作用范围。对于块我们主要理解以下两方面就可以了:
1)块是可以被嵌套的
2)嵌套块内不可以声明相同名字的变量
/*块的嵌套*/
public class PartArea
{
public static void main(String[] args)
{ //main方法开始
int a = 15;
int b = 2;
if (a == 15)
{ //条件块开始
double c = 2; //c是可用的
System.out.println(a + "/" + c + "=" + (a / c));
System.out.println("the value a is" + a); //a是可用的
} //条件块结束
//System.out.println("the value c is" + c); //在这里c已经不再可用
System.out.println(a + "/" + b + "=" + (a / b));
System.out.println(a + "%" + b + "=" + (a % b));
} //main方法结束
}
输出结果:
15 / 2.0 = 7.5
the value a is 15
15 / 2 = 7
15 % 2 = 1
分析:
在这个程序中,我们在main方法中嵌套了一个条件判断块,也就是说在main方法中包含了另一个块。
变量a在main方法是可见的,也就是说只有在main方法结束处,变量a才失去它存活的空间,由于条件块是包含在main方法块中的,所以在条件块中我们依然可以操纵或访问到变量a。对于变量c ,由于它只是在条件块中定义,同样的理论变量c也是在条件块结束处的花括号处结束它的“可见性”。
/*块的嵌套*/
public class PartArea2
{
int a = 10
public static void main(String[] args)
{ //main方法开始
int a = 15;
int b = 2;
if (a == 15)
{ //条件块开始
double c = 2; //c是可用的
System.out.println(a + "/" + c + "=" + (a / c));
System.out.println("the value a is" + a); //a是可用的
} //条件块结束
// System.out.println("the value c is" + c); //在这里c已经不再可用
System.out.println(a + "/" + b + "=" + (a / b));
System.out.println(a + "%" + b + "=" + (a % b));
} //main方法结束
}
输出结果:
15 / 2.0 = 7.5
the value a is 15
15 / 2 = 7
15 % 2 = 1
分析:
为什么能正确的执行了呢?不是说嵌套块不能重复定义吗?这里我就向读者解释这个让很多程序员容易混淆的问题:
1)所谓嵌套块,是方法内的嵌套,不包括类的花括号。
2)换个角度理解,不允许重复定义的是局部变量,对于成员变量或类变量是可以被重复定义的,局部变量的值覆盖全局变量的值。
二、对象的存活时间
Java中的对象,只有在存活时间上与主类型(基本类型)不一致,在变量的作用域的其它方面是一致的。
在Java中用new关键字创建一个对象的时候,它在内存堆中生成了一个对象的实例,我们要想操纵这个对象,要给这个对象赋与一个句柄,例如:
String s = new String(" 这是一个字符串对象")
“s”也就是我们所说的主类型的变量名,也被称为句柄。句柄s在作用域结束时,句柄s消失,但对于对象本身依然存在于内存中。由于句柄的消失,我们已经无法再去操纵对象了,所以从表面上来看,对象也就不存在了。
posted on 2007-05-15 14:36
心随Wǒ动 阅读(316)
评论(0) 编辑 收藏