为什么这里是非法的呢?让tom david在那个块内作用覆盖前面那个为什么不可以?谢谢class Customer {
/* 说明变量屏蔽及作用域实例 
*/
public static void main(String [] args) {
Customer customer = new Customer();
String name = "John Smith";
{
// 下列说明是非法的
String name = "Tom David";
customer.name = name;
  System.out.println(
"The customer's name: " + customer.name);
}
}
private String name;
}

解决方案 »

  1.   

    String name = "John Smith";
                {
                    // 下列说明是非法的
                    String name = "Tom David";
    这里这个大括号相当于没有,是重复定义
      

  2.   

    没见过这样写程序的。
    把String去掉就可以覆盖
      

  3.   

    java是不允许这种定义的,举这个例子也就是为了说明这点
    不允许嵌套重复定义一个变量,不会覆盖
    我想是为了消除不易阅读、容易产生混淆的代码吧。
      

  4.   

    你把第二个定义的String name放在一个方法里
    就覆盖第一个了撒
      

  5.   


    {
                    // 下列说明是非法的
                    String name = "Tom David";     //括号外定义的name在这括号内存在作用域,所以不能同一作用域存在两个相同名字变量
                    customer.name = name;
                     System.out.println(
                        "The customer's name: " + customer.name);
                }
      

  6.   

    在JAVA里不予许在同一方法中存在同一名称的变量,后面的会覆盖前面的,所以是非法的
      

  7.   

    String name = "Tom David"; //name在{}外已经定义,作用域在{}内仍有效。
    customer.name = name; //name有private关键字修饰,不允许直接访问。
      

  8.   


    那到底块作用域用在哪呢?为什么下面的程序就可以呢?
    class Customer {
    2 /* 说明变量屏蔽及作用域实例
    3 */
    4 public static void main(String [] args) {
    5 Customer customer = new Customer();
    6 { String name = "Tom David";
    7  customer.name = name;
    8 System.out.println("The customer's name: " + customer.name);
    9  }
    10 // 下面的再说明是正确的
    11 String name = "John Smith";
    12 customer.name = name;
    13 System.out.println(
    14 "The customer's name: " + customer.name);
    15 }
    16 private String name;
    17 }
      

  9.   

    这个语法在c/c++里是允许的,但在java里不允许,设计者认为这样的代码会产生混乱,导致难于阅读。
      

  10.   

    20楼那个最后输出是什么啊?6            {    String name = "Tom David";
    7                 customer.name = name;
    8                System.out.println("The customer's name: " + customer.name);
    9             }这段的那个大括弧有用么?
      

  11.   


    输出的是:
    The customer's name: Tom David
    The customer's name: John Smith
    有用