黑马程序员技术交流社区

标题: 为什么找不到变量呢? [打印本页]

作者: 王新春    时间: 2011-11-14 08:46
标题: 为什么找不到变量呢?
本帖最后由 王新春 于 2011-11-22 16:45 编辑

我定义了变量i,怎么编译时,出错,找不到变量i呢?

public class Test {
        public static void main(String[] args){
                {
                 int i=0;
                 i++;
                }
                int[] array = new int[1];
                method(array,i);
                System.out.println(array[0]+" "+i);
        }
        public static void method(int[] array,int i){
                array[0] = 1;
                i = 1;
        }
}
作者: 骚灵小情歌    时间: 2011-11-14 08:51
本帖最后由 骚灵小情歌 于 2011-11-14 08:53 编辑

.你把变量括起来干嘛呀
作者: 咪咪    时间: 2011-11-14 09:38
在类中如果用空括号括起来的代码块称之为构造代码块,它的执行顺序早于构造函数晚于静态代码块,代码块内部的成员就是局部的所以你的i是一个局部变量,就相当于for循环内部的声明的变量一样外部无法使用的所以会编译失败。
作者: 宋文轩    时间: 2011-11-14 09:42
  {
                 int i=0;
                 i++;
                }
这样写的话,这是一个代码块,里面定义的变量属于局部变量只在这个代码块里面生效,外面的没有办法访问。
作者: quanhui    时间: 2011-11-14 09:52
因为{
                 int i=0;
                 i++;
                }
中的i被区间括起来了,所以i变量成为了局部变量,此区间外的内容是无法调用这个局部变量的。
作者: 杨强    时间: 2011-11-14 09:59
你定义的是局部变量,method方法访问不到,于是。。
作者: 清秋    时间: 2011-11-14 12:39
杨强 发表于 2011-11-14 09:59
你定义的是局部变量,method方法访问不到,于是。。

如果是在一个方法的某个代码快的内部声明变量,它的作用域就是这个代码块。代码块是指位于一对大括号“{}”以内的代码
作者: 咖啡    时间: 2011-11-14 16:41
public class Test {
        public static void main(String[] args){
                {
                 int i=0;
                 i++;
               int[] array = new int[1];
                method(array,i);
                System.out.println(array[0]+" "+i);

                }
                        }
        public static void method(int[] array,int i){
                array[0] = 1;
这样就可以了。
作者: fly51888    时间: 2011-11-14 18:15
{
    int i=0;
    i++;
}
是一个代码块,你所定义的变量是个局部变量。局部变量的特点是只在局部有效。当i 超过{}后就不再有效,而后面的代码中
method(array,i);
System.out.println(array[0]+" "+i);
又用到 i 。此时i已经不存在了。

改正后的代码可以如下:
第一种方法:
public class MaoPao {
        public static void main(String[] args){
                    int i=0;
                i++;
                int[] array = new int[1];
                method(array,i);
                System.out.println(array[0]+" "+i);
        }
        public static void method(int[] array,int i){
                array[0] = 1;
                i = 1;
        }
}

第二种方法:
public class MaoPao {
        public static void main(String[] args){
                   int[] array = new int[1];
                {
                 int i=0;
                 i++;
                 method(array,i);
                 System.out.println(array[0]+" "+i);
                }
               
               
        }
        public static void method(int[] array,int i){
                array[0] = 1;
                i = 1;
        }
}

当然还有其他的,只要理解基础原理就行了:局部变量和全局变量的作用域问题。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2