为什么这里是非法的呢?让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;
}
/* 说明变量屏蔽及作用域实例
*/
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;
}
{
// 下列说明是非法的
String name = "Tom David";
这里这个大括号相当于没有,是重复定义
把String去掉就可以覆盖
不允许嵌套重复定义一个变量,不会覆盖
我想是为了消除不易阅读、容易产生混淆的代码吧。
就覆盖第一个了撒
{
// 下列说明是非法的
String name = "Tom David"; //括号外定义的name在这括号内存在作用域,所以不能同一作用域存在两个相同名字变量
customer.name = name;
System.out.println(
"The customer's name: " + customer.name);
}
customer.name = name; //name有private关键字修饰,不允许直接访问。
那到底块作用域用在哪呢?为什么下面的程序就可以呢?
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 }
7 customer.name = name;
8 System.out.println("The customer's name: " + customer.name);
9 }这段的那个大括弧有用么?
输出的是:
The customer's name: Tom David
The customer's name: John Smith
有用