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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林枢 黑马帝   /  2011-9-19 22:07  /  1649 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test2 {

  2.         public static void main(String[] args) {
  3.          
  4.         }
  5.        
  6.         class shit{
  7.                  final static int i=0;
  8.         }

  9. }
复制代码
为什么 要加final 编译器才不报错

4 个回复

倒序浏览
黑马网友  发表于 2011-9-19 22:08:43
沙发
首先方法中定义有一个内部类,我们只是为了控制这个类的可见性,它并不是方法的一部分我们只是代码这样写,
目的是为了控制内部类的可见性,编译之后的结果,也会出现 外部类 和 内部类各自的字节码class文件,
这就说明内部类是一个独立的个体,他们就是两个类而已,他们各自都有自己的成员变量和方法。
并且方法的属性与内部类的生命周期不同. 方法执行完毕后,方法内的属性也会随之被销毁,然而如果让内部类在使用
被销毁的属性这并不合理. 解决方法就是加上final关键字.在java中, 某个属性一旦加上final关键字, 可以看作是常量,
而常量的生命周期在程序的整个执行期间
都是有效的. 所以可以引用, 不会出错.
回复 使用道具 举报
黑马网友  发表于 2011-9-19 22:39:23
藤椅
非静态内部类中不能声明任何static成员(static final 形式的常量定义除外)
回复 使用道具 举报
黑马网友  发表于 2011-9-19 23:06:26
板凳
补充一点,楼主想要在非静态内部类里面定义一个静态变量,
而这个静态变量就是没有实例化就可以直接用类名去引用的成员,
如果这个内部类不是静态的,连这个内部类都不能直接用外部类名去引用,
所以你给它定义一个静态成员没有意义,所以就成了一个规定:非静态内部类中不能声明任何static成员
如果你非要用这个静态变量i,那么你可以把它定义到与此内部类关联的外部类中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马