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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yy505032788 中级黑马   /  2014-12-23 22:58  /  1304 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
        }

12 个回复

倒序浏览
这是可以的,因为方法中的变量用final修饰了,其声明周期和内部类对象应该是一致的。
回复 使用道具 举报
yninggis 发表于 2014-12-23 23:25
这是可以的,因为方法中的变量用final修饰了,其声明周期和内部类对象应该是一致的。 ...

请问下,该如何打印那个b
回复 使用道具 举报
感觉你在Inner1里调用方法打印b = 20是实现不了的,我曾经试过,目前为止没找到方法,
回复 使用道具 举报
可能实现不了。
回复 使用道具 举报
局部变量要么直接调用,要么用方法返回调用。就不能用其他方式去调用了
你在更深的地方把局部变量都隐藏了,所以调用不了。
回复 使用道具 举报
感觉运行不了~~~
回复 使用道具 举报
运行不了。估计会报错。
回复 使用道具 举报
lwh316658735 发表于 2014-12-24 23:03
局部变量要么直接调用,要么用方法返回调用。就不能用其他方式去调用了
你在更深的地方把局部变量都隐藏了 ...

只是看到打印三个变量,想到了那个位置还有一个,不知道能否调用打印,不过很感谢
回复 使用道具 举报
好纠结的问题,想不明白,所以我给运行了一遍,结果发现有错误,晕了好长时间。才搞出来。
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();
        }
    }
}

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

明白啦,谢啦啊
回复 使用道具 举报
yy505032788 发表于 2014-12-24 21:19
请问下,该如何打印那个b

搜了很多资料,没找到能显示打印那个b的方法。:dizzy:
回复 使用道具 举报
yninggis 发表于 2014-12-27 18:40
搜了很多资料,没找到能显示打印那个b的方法。

还是很感谢大哥帮忙,知道这个问题了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马