黑马程序员技术交流社区

标题: 静态修饰符与私有为什么不能修饰局部方法中的内部类? [打印本页]

作者: 郑庆伟    时间: 2012-6-28 18:58
标题: 静态修饰符与私有为什么不能修饰局部方法中的内部类?
本帖最后由 郑庆伟 于 2012-6-28 21:08 编辑

class Outer
{
      int x = 3;
      void method()
      {
          class Inner//此处的局部方法中的内部类为什么不能用静态修饰符static和私有private来修饰?  
          {

               void function()
              {
                   System.out.println(Outer.this.x);
              }
          }
      }
}
class  InnerClassDemo3
{
      public static void main(String[] args)
      {
  
      }
}
静态修饰符还有私有private为什么只能修饰成员变量和方法而不能修饰局部的?


作者: 赵倩倩    时间: 2012-6-28 19:39
这个主要是由作用范围决定的。在方法内部定义的内部类,只能在方法的内部,也就是定义该类的区域内使用。
这样的结果就是,在方法之外,并不能访问到该内部类,也即不需要private和static等修饰,因为他本身就是在内部使用的,外部不能访问
还可以从另一个方面想一下,如果在外部可以使用的话,要以什么样的语法进行调用,他的生命周期又将是怎样的呢
作者: 刘笑    时间: 2012-6-28 19:57
一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。所以声明为static的变量实质上就是全局变量。所以static不能修饰局部变量。
此外,局部变量是存放在栈中的,程序运行完立即释放。它只能在定义它的方法内部使用。所以不用修饰符
作者: 郑庆伟    时间: 2012-6-28 20:16
哦 这样就没有意义了,这样也无法通过编译。
作者: 孙飞    时间: 2012-6-28 20:38
静态修饰的内容被所有对象共享,局部变量的作用域只能是所在的函数,而且是在栈内存中存在,当出了作用域就会被释放,根本不能让所以对象共享,而且静态修饰的内容存在于方法区,在内存中和局部变量的存储空间也不一样,所以是不能修饰局部的,上面说的局部只在作用域中有效,生命周期短,但静态是随便类的加载而加载,随类的消失而消失,生命周期也是最长的。private访问控制符是不能修饰局部的
作者: 郑庆伟    时间: 2012-6-28 20:55
嗯 问的问题有点.......,跟1+1为什么等于2一样。
作者: 刘孝泽    时间: 2014-7-3 16:47
我也遇到这个问题 多谢了

作者: 刘帅    时间: 2015-4-5 18:36
正好遇到这个问题~~~~~




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