A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王新春 黑马帝   /  2011-11-14 08:46  /  3112 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 骚灵小情歌 于 2011-11-14 08:53 编辑

.你把变量括起来干嘛呀
回复 使用道具 举报
本帖最后由 王新春 于 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;
        }
}

8 个回复

倒序浏览
咪咪 来自手机 黑马帝 2011-11-14 09:38:36
藤椅
在类中如果用空括号括起来的代码块称之为构造代码块,它的执行顺序早于构造函数晚于静态代码块,代码块内部的成员就是局部的所以你的i是一个局部变量,就相当于for循环内部的声明的变量一样外部无法使用的所以会编译失败。
回复 使用道具 举报
  {
                 int i=0;
                 i++;
                }
这样写的话,这是一个代码块,里面定义的变量属于局部变量只在这个代码块里面生效,外面的没有办法访问。
回复 使用道具 举报
因为{
                 int i=0;
                 i++;
                }
中的i被区间括起来了,所以i变量成为了局部变量,此区间外的内容是无法调用这个局部变量的。
回复 使用道具 举报
杨强 黑马帝 2011-11-14 09:59:17
地板
你定义的是局部变量,method方法访问不到,于是。。
回复 使用道具 举报
清秋 黑马帝 2011-11-14 12:39:33
7#
杨强 发表于 2011-11-14 09:59
你定义的是局部变量,method方法访问不到,于是。。

如果是在一个方法的某个代码快的内部声明变量,它的作用域就是这个代码块。代码块是指位于一对大括号“{}”以内的代码
回复 使用道具 举报
咖啡 黑马帝 2011-11-14 16:41:48
8#
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:17
9#
{
    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;
        }
}

当然还有其他的,只要理解基础原理就行了:局部变量和全局变量的作用域问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马