posts - 24,  comments - 29,  trackbacks - 0

        要想正确地理解控制的作用,我们必须首先理解一下作用域的概念。对于程序控制,你应该首先理解不同的控制在什么样的范围内起作用,这就是我们所说的作用域。
        对于作用域中所定义的各种变量,作用域限定了这些变量的可被访问范围,也就是说“变量的可见性”及“存在时间”。
        所谓变量的可见性:是指只有在规定的作用域范围内,变量是可以被访问及操纵控制的。
        所谓变量的存在时间:是指只有在规定作用域范围内,变量是存活的,一旦超出了变量的存活范围,变量就不存在了,对于这种不存在的理解应该有两种情况:
        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ǒ动 阅读(307) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

QQ群:9028409
QQ:29850994
点击这里给我发消息

留言簿(2)

随笔档案

积分与排名

  • 积分 - 30816
  • 排名 - 1351

最新评论

阅读排行榜

评论排行榜