黑马程序员技术交流社区

标题: 求解 [打印本页]

作者: Anyway    时间: 2016-8-26 10:28
标题: 求解
方法中的内部类能不能访问方法中的局部变量?这个问题我验证的怎么就是能访问呢?求大神解惑

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

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


我这里可以运行,报错是因为两个类放在一个class文件里outer类没加static。但是我问的不是这个问题,问题在第一行
作者: 坚持努力wbj    时间: 2016-8-26 21:13
哦,我也不知咋的;我把你这个拷出去后直接在我当时用的包下创建了个类,没有出现你说的问题,我把他换了个包确实出现你说的问题;仔细考虑我认为这是与变量的生命周期有关,局部变量生命周期结束在所在方法调用结束时,而类则是从它加载到卸载一直存在,使得者生命周期不一致;后者大于前者;后者有可能调用不存在的前者




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