不行的,因为final int f;已经赋了默认得值0了,final 的变量当然不能赋值两次。
所以方法级的final变量是可以先定义后赋值的。但是全类final变量就不可以了。

解决方案 »

  1.   

    sorry,搞错了,原来是全类的final变量必须在调用构造方法前初始化,并且不会自动赋默认得值。
      

  2.   

    因为申明成final的变量如果不在申明的时候初始化就必须在构造函数里初始化,而你这里的point(int a,int b)
    {
    x=a;
    y=b;
    }
    并没有对f进行初始化,所以会报错,
      

  3.   

    可以的,没问题。你程序的错误因为你在 point(int a,int b) 这个构造函数中没有给 f 赋值,因为 final 的变量是不会有初值的,所以一定要你赋值才行。
    把 f=1; 加到里面,就能过了。
      

  4.   

    当然可以了,你的代码提示有错是因为另一个构造函数没有为f赋值.应该这样写:
    point(int a,int b)
    {
        this();
        x=a;
        y=b;
    }
      

  5.   

    final声明的常量可以在构造方法中赋初值!!!!
    不过你这样肯定不行,我手头上没编译器,你试试这样如何class point
    {
    int x,y;
    final int f;

    point()
    {
    f=60;
    System.out.println("LOADing");
    }
    public static void main(String [] args)
    {
    point pt = new point();
    System.out.println(pt.f);
    }
    }如果没错误的话,我再帮你分析原因:>
      

  6.   

    如果不用那个构造函数,也要赋初值呀,以下代码不行,为什么?
    class point
    {
    int x,y;
    final int f;
    point(int a,int b)
    {
    x=a;
    y=b;
    }
    point()
    {
    this(10,20);
    f=60;
    System.out.println("LOADing");
    }
    public static void main(String [] args)
    {
    point pt = new point();
    System.out.println(pt.f);
    }
    }
      

  7.   

    哦,真的是啊。faint,我刚才试的时候在构造方法里的一个try块里给f赋值,所以不行。哎。
      

  8.   

    final声明的常量,可以在构造方法中赋初值,但你的程序是这个方法错在下面
    方法中没有给f赋初值,在程序编译的时候系统会进行检查的,所以即使没有
    调用这个构造方法,也通过不了编译。point(int a,int b)
    {
      x=a;
      y=b;
    }
      

  9.   

    whyxx(永远成不了高手) 已经说得够清楚的了
      

  10.   

    meatcsdn(起起) ,没有违反只能赋一次的约定,因为每个对象只实例化一次。
      

  11.   

    class point {
    int x,y;
    final int f;
    point(int a,int b){ // A处
    x=a;
    y=b;
        f=1.0F;
    }
    point(){ /// B处
    f=60F;
    System.out.println("LOADing");
    }  //... 其他重载的构造方法 public static void main(String [] args)
    {
    point pt1 = new point(); // 仅调用 B处 的构造方法
        point pt2 = new point(1,2); // 仅调用 A处 的构造方法,所以不为 变量f 赋初值则编译时会报错
    System.out.println(pt.f);
    }
    }
      

  12.   

    class point {
      int x,y;
      final int f;
      point(int a,int b){ // A处
        x=a;
        y=b;  
        f=1.0F;
      }
      point(){ /// B处
        f=60F;
        System.out.println("LOADing");
      }  //... 其他重载的构造方法  public static void main(String [] args)
      {
        point pt1 = new point(); // 仅调用 B处 的构造方法
        point pt2 = new point(1,2); // 仅调用 A处 的构造方法,所以不为 变量f 赋初值则编译时会报错
        System.out.println(pt1.f);
      }
    }
      

  13.   

    是不是说尽量不要构造函数中使用this()调用其它构造函数,这样只要再每个构造函数中都为常量赋一下初值就可以了,那还费这事做什么,只要在定义这个常量的时候就赋个初值不就行了吗