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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Anyway 中级黑马   /  2016-8-26 10:28  /  674 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方法中的内部类能不能访问方法中的局部变量?这个问题我验证的怎么就是能访问呢?求大神解惑

public class Test {
    public static void main(String[] args)throws Exception{
        Outer outer = new Outer();
        //获取内部类对象
        Object object = outer.outerfuc();
        Method method = object.getClass().getMethod("innerfuc");
        method.invoke(object);
    }

class Outer {
    public Object outerfuc(){
        int x = 6;
        class Inner{
            public void innerfuc(){
                System.out.println(x);
            }
        }
        Inner inner = new Inner();
        inner.innerfuc();
        return inner;
    }
}

}

4 个回复

倒序浏览
我运行了一下,是在这一句报错的:Outer outer = new Outer();(标红线了)
你运行的若是如此可以继续看我的回复,否则我答非所问了
你这里创建内部类对象的方法错了
静态内部类可以直接创建对象;非静态的则需要通过外部类的对象创建(外部类对象.new 内部类工作方法);
你可以改成静态内部类(加static)或先创建一个外部类Test的对象再创建内部类Outer的对象
回复 使用道具 举报
我这里可以运行,报错是因为两个类放在一个class文件里outer类没加static。但是我问的不是这个问题,问题在第一行
回复 使用道具 举报
坚持努力wbj 发表于 2016-8-26 10:59
我运行了一下,是在这一句报错的:Outer outer = new Outer();(标红线了)
你运行的若是如此可以继续看我 ...


我这里可以运行,报错是因为两个类放在一个class文件里outer类没加static。但是我问的不是这个问题,问题在第一行
回复 使用道具 举报
哦,我也不知咋的;我把你这个拷出去后直接在我当时用的包下创建了个类,没有出现你说的问题,我把他换了个包确实出现你说的问题;仔细考虑我认为这是与变量的生命周期有关,局部变量生命周期结束在所在方法调用结束时,而类则是从它加载到卸载一直存在,使得者生命周期不一致;后者大于前者;后者有可能调用不存在的前者
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马