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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 郑庆伟 于 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为什么只能修饰成员变量和方法而不能修饰局部的?

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1 不墨守陈规

查看全部评分

7 个回复

倒序浏览
这个主要是由作用范围决定的。在方法内部定义的内部类,只能在方法的内部,也就是定义该类的区域内使用。
这样的结果就是,在方法之外,并不能访问到该内部类,也即不需要private和static等修饰,因为他本身就是在内部使用的,外部不能访问
还可以从另一个方面想一下,如果在外部可以使用的话,要以什么样的语法进行调用,他的生命周期又将是怎样的呢

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。所以声明为static的变量实质上就是全局变量。所以static不能修饰局部变量。
此外,局部变量是存放在栈中的,程序运行完立即释放。它只能在定义它的方法内部使用。所以不用修饰符

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
哦 这样就没有意义了,这样也无法通过编译。
回复 使用道具 举报
静态修饰的内容被所有对象共享,局部变量的作用域只能是所在的函数,而且是在栈内存中存在,当出了作用域就会被释放,根本不能让所以对象共享,而且静态修饰的内容存在于方法区,在内存中和局部变量的存储空间也不一样,所以是不能修饰局部的,上面说的局部只在作用域中有效,生命周期短,但静态是随便类的加载而加载,随类的消失而消失,生命周期也是最长的。private访问控制符是不能修饰局部的
回复 使用道具 举报
嗯 问的问题有点.......,跟1+1为什么等于2一样。
回复 使用道具 举报
我也遇到这个问题 多谢了
回复 使用道具 举报
刘帅 来自手机 初级黑马 2015-4-5 18:36:52
8#
正好遇到这个问题~~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马