黑马程序员技术交流社区

标题: 这个变量可以打印么? [打印本页]

作者: yy505032788    时间: 2014-12-23 22:58
标题: 这个变量可以打印么?
public static void main(String[] args) {
                Outer1 ou = new Outer1();
                ou.show();
        }
}

class Outer1 {
        int b = 10;

        void show() {
                final int b = 20;
                class Inner1 {
                        int b = 30;

                        void method() {
                                int b = 40;
                                System.out.println(new Outer1().b);//外部类的b
                                System.out.println();//可以打印b=20么?
                                System.out.println(this.b);//局部内部类的b
                                System.out.println(b);//局部内部类方法中的b
                        }
                }
                Inner1 in = new Inner1();
                in.method();
        }


作者: yninggis    时间: 2014-12-23 23:25
这是可以的,因为方法中的变量用final修饰了,其声明周期和内部类对象应该是一致的。
作者: yy505032788    时间: 2014-12-24 21:19
yninggis 发表于 2014-12-23 23:25
这是可以的,因为方法中的变量用final修饰了,其声明周期和内部类对象应该是一致的。 ...

请问下,该如何打印那个b
作者: cz萑    时间: 2014-12-24 21:33
感觉你在Inner1里调用方法打印b = 20是实现不了的,我曾经试过,目前为止没找到方法,
作者: Franklin    时间: 2014-12-24 22:52
可能实现不了。
作者: lwh316658735    时间: 2014-12-24 23:03
局部变量要么直接调用,要么用方法返回调用。就不能用其他方式去调用了
你在更深的地方把局部变量都隐藏了,所以调用不了。
作者: zcyemenye    时间: 2014-12-24 23:59
感觉运行不了~~~
作者: 960943877    时间: 2014-12-25 00:07
运行不了。估计会报错。
作者: yy505032788    时间: 2014-12-25 12:27
lwh316658735 发表于 2014-12-24 23:03
局部变量要么直接调用,要么用方法返回调用。就不能用其他方式去调用了
你在更深的地方把局部变量都隐藏了 ...

只是看到打印三个变量,想到了那个位置还有一个,不知道能否调用打印,不过很感谢
作者: duluhua    时间: 2014-12-25 13:53
好纠结的问题,想不明白,所以我给运行了一遍,结果发现有错误,晕了好长时间。才搞出来。
public class B{
    public static void main(String[] args)
    {
       Outer1 o = new B().new Outer1();//这里困惑了我好久,根据视频反复看了几遍才写出来,还是有点晕
       o.show();
    }
    //该类是定义在类成员变量位置上的,方法时需要先创建B的对象才能访问new B()
    class Outer1 {
        int b = 10;

        void show() {
                final int b = 20; //这里的b是方法内声明的,是局部变量 ,好像只能在方法内直接使用。因为执行的是方法,代码会直接执行
                final int AA=90;
                final int BB=80;
                class Inner1 {
                        int b = 30;//这里的b把上面的final int b = 20;给覆盖了
                        int BB = 70;//这里的BB把final int BB=80;给覆盖了
                        void method() {
                                int b = 40;
                                System.out.println(new Outer1().b);//外部类的b   10
                                System.out.println();//可以打印b=20么?  打印不了 ,因为被int b = 30;给覆盖了
                                System.out.println(this.b);//局部内部类的b  30
                                System.out.println(b);//局部内部类方法中的b   40
                                System.out.println(AA);//这里方法的是方法内定义的常量    90
                                System.out.println(BB);//打印的是Inner1的BB   70
                        }
                }
                Inner1 in = new Inner1();
                in.method();
        }
    }
}

到现在还晕乎乎的,你看明白了吗
作者: yy505032788    时间: 2014-12-25 14:03
duluhua 发表于 2014-12-25 13:53
好纠结的问题,想不明白,所以我给运行了一遍,结果发现有错误,晕了好长时间。才搞出来。
public class B{ ...

明白啦,谢啦啊
作者: yninggis    时间: 2014-12-27 18:40
yy505032788 发表于 2014-12-24 21:19
请问下,该如何打印那个b

搜了很多资料,没找到能显示打印那个b的方法。:dizzy:

作者: yy505032788    时间: 2014-12-27 19:00
yninggis 发表于 2014-12-27 18:40
搜了很多资料,没找到能显示打印那个b的方法。

还是很感谢大哥帮忙,知道这个问题了。




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