解决方案 »

  1.   

    上面的报错是因为第一个声明的ei变量的作用范围包含第二个ei变量的作用范围,第二个就没有这个问题。
      

  2.   

    for if  try等里面定义的变量只影响到所在的代码快里面。粗浅的理解方法就是{}中定义的只影响{}中间的。
      

  3.   

    上面的 ei 变量作用域包含 下面的for 循环块,会影响到for 循环块内,在for 循环块内再定义 ei ,则属于重复定义同名变量;
    下面的 ei 定义在for 循环块内,它的作用域仅在 for 循环块内,不会影响到 for 循环块外面。
      

  4.   

    int ei = 5;        
     for (int i = 0; i < 10; i++) {            
           int ei = 10;        
     }
    这段代码必然会报错,因为你的ei在开始就定义了,当执行for循环时,出现重新定义的现象,当然会出现“ei已在前面定义"的错误。for (int i = 0; i < 10; i++) { 
                int ei = 10;         }         
    int ei = 5;
    这个不会报错是因为for循环里面的ei和外面的ei是两个变量,里面的ei作用域只在for循环里面有效,而外面的ei值一直是5,且不会报错。
      

  5.   

    这个你要看Java规范了
    见chapter  6.4 Shadowing and Obscuring
    里面说的是
    Some declarations are not permitted within the scope of a local variable, formal
    parameter, exception parameter, or local class declaration because it would be
    impossible to distinguish between the declared entities using only simple names.
    也就是说Java禁止出现在一个低级的作用域里声明使用一个“高级域”里的变量。所以下面这个也是编译错误的
    public class Test {
        public static void main(String[] e) {
            int e = 10;
        }
    }
      

  6.   



    int ei = 5;

    for (int i = 0; i < 10; i++) {
    int ei = 10;
    }这样子写也是对的。这里大概需要理解两个重要的概念,代码块和作用域,还有程序编译是从上往下扫描的。
    上面两个ei的作用域都在{}内部。所以互不干扰,正确。
    for (int i = 0; i < 10; i++) {
    int ei = 10;
    }
    int ei = 5;
    // ------------------------------------
    以下这个例子正确是因为,第一个ei的作用域在{}里面。而第二个ei的作用域,是从它定义开始往下都能其作用。
    所以也不会出现重定义。
      

  7.   

    这是变量作用域的问题,简单的说第一个int ei在for循环外已经定义过了,那么他的作用域就包含了for循环内的内容。如果在for循环中再次定义,就造成了重复定义的问题。 第二个因为首先在for循环中定义了,所以当for循环结束的时候,这个变量就会被自动销毁,所以你可以在for循环外面再次定义。
      

  8.   



    int ei = 5;//1
            for (int i = 0; i < 10; i++) {
                int ei = 10;//报错是因为1处的代码依然有效,
            }
    //上面的代码报错是因为已经有一个ei的变量了,//---------------------------------------------------
    for (int i = 0; i < 10; i++) {
                int ei = 10;
            }
            int ei = 5;
    下面那个不报错是因为ei只是影响for循环里面,所以在外面再次定义是没有问题的。
    作用域问题而已。