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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张扬 中级黑马   /  2012-5-29 16:53  /  1963 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo
{
        Demo()
        {
                System.out.println("hello");
        }
}

class FinalDemo
{
        final int x;
        final Demo f;
        FinalDemo(int i)
        {
                x = i;
                System.out.print(x);
        }
        FinalDemo(Demo f)
        {
                f = f;
        }

        public static void main(String[] args)
        {
                FinalDemo fd = new FinalDemo(5);
                FinalDemo fd1 = new FinalDemo(new Demo());
        }

}



我在构造方法里初始化了呀 这是啥原因!

3 个回复

倒序浏览
构造函数必须把所有final类型的变量初始化,不能只初始化其中一个不然编译器会编译出错的
我把正确的代码给你
  1. class Demo
  2. {
  3.         Demo()
  4.         {
  5.                 System.out.println("hello");
  6.         }
  7. }

  8. class FinalDemo
  9. {
  10.         final int x;
  11.         final Demo f;
  12.         FinalDemo(int i)
  13.         {
  14.                 x = i;
  15.                 f = null;
  16.         }
  17.         FinalDemo(Demo f)
  18.         {
  19.                 this.f = f;
  20.                                 x = 0;
  21.         }

  22.         public static void main(String[] args)
  23.         {
  24.                 FinalDemo fd = new FinalDemo(5);
  25.                 FinalDemo fd1 = new FinalDemo(new Demo());
  26.         }

  27. }

复制代码
希望对你有帮助
回复 使用道具 举报
class FinalDemo
{
         final int x =0;                               //这里初始化
         final Demo f = new Demo();          //这里初始化
         FinalDemo(int i)
         {
                 x = i;
                 System.out.print(x);
         }
         FinalDemo(Demo f)
         {
                 f = f;
         }

        public static void main(String[] args)
         {
                 FinalDemo fd = new FinalDemo(5);
                 FinalDemo fd1 = new FinalDemo(new Demo());
         }

}
回复 使用道具 举报
直到你的对象实例化出来  你的变量始终没有赋值。你将x = i;两个都是变量。对于f你可以先final Demo f = 0;
这样你的程序就能运行了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马