黑马程序员技术交流社区

标题: 关于内部类,为什么内部类作为局部变量是不能被static修饰 [打印本页]

作者: ujump    时间: 2015-6-17 22:10
标题: 关于内部类,为什么内部类作为局部变量是不能被static修饰
如题,同学们帮忙解答下
作者: fyg408224345    时间: 2015-6-17 22:17
你这么一说我也想知道啊。 怎么没有大神回答啊。期待中。。。。
作者: 一口老郭    时间: 2015-6-17 22:26
static 应该只能修饰成员变量,不能修饰局部变量吧。
作者: 林RM    时间: 2015-6-17 23:45
很简单,你见过局部被静态修饰的吗
作者: shuaiqi_P_D    时间: 2015-6-17 23:58
局部内部类可以被static 修饰。。。
作者: 我是隔壁老王呀    时间: 2015-6-18 09:43
本帖最后由 我是隔壁老王呀 于 2015-6-18 10:04 编辑

   内部类可以简化看成具有独特属性的变量,局部内部类,那是局部变凉了。而 static修饰的是类变量,作用于整个类空间,局部变量是有作用范围的,不能出了范围还能有效,所以也就不能用static修饰了。
作者: 我是隔壁老王呀    时间: 2015-6-18 09:46
shuaiqi_P_D 发表于 2015-6-17 23:58
局部内部类可以被static 修饰。。。

你确定?
   无论从作用域范围,还是java的类加载机制,局部变量都是不能被static修饰的。除非你是其他的语言,有另外一套语法规范,例如c/c++,他可以,但是却和java是不同的语言。
作者: guiqulaixi    时间: 2015-6-18 12:06
因为这是Java语法的规定。没有为什么
作者: YongBao_Summer    时间: 2015-6-18 12:27
static是类的。变量是对象。当然不能。
作者: lucien_he    时间: 2015-6-18 16:06
楼上说的简单明了
作者: rose_xiaomei    时间: 2015-6-18 19:45
又涨知识了
作者: edithe    时间: 2015-6-18 21:34
本帖最后由 edithe 于 2015-6-18 21:36 编辑

成员内部类是可以用static修饰的,你说的是局部内部类吧
我来说下吧,要了解这个问题,我们首先得知道类加载的过程
我们写的代码是存在硬盘的,运行的时候,先进行类加载,jvm会解析代码,如果发现有static修饰则会存在方法区,
成员内部类相当于外部类的成员变量,可以用static修饰
局部内部类是相当于局部变量,你因该知道局部变量是不能用static修饰的吧(生命周期不一致,存放位置不一致)

作者: 宏博    时间: 2016-10-14 18:46
本帖最后由 宏博 于 2016-10-14 20:02 编辑

java类加载顺序,首先加载类,执行static成员初始化,接下来执行对象的创建。也就是说加载非静态成员是在创建对象以后。静态局部内部类要加载首先要加载其所在的局部,也就是在创建对象以后,但是静态局部内部类因为是静态的,所以它的加载是在创建对象以前,这样就矛盾了,所以不能创建局部静态内部类。
此回帖为本人宏博结合类的加载原理自创,如果转载请声明

作者: 麦诗人℃    时间: 2016-10-14 19:28
shuaiqi_P_D 发表于 2015-6-17 23:58
局部内部类可以被static 修饰。。。

不可以的




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