贴下如下代码:
package test;
interface aa{
public static int EASY=3;
void dd(int x);
}
public class test implements aa{

  public static void main(String[] args) {
  int x=5+EASY;//正常
  new test().dd(++x);
}
  public void dd(int x) {
// TODO Auto-generated method stub
x+=aa.EASY+++x;//报错,要去掉final
System.out.println(x);
}
  }在主函数引用接口常量正常,为什么在普通方法调用不行,叫我去掉final,某些基础知识点忘记了,忘高手解答!

解决方案 »

  1.   

    x+=aa.EASY+++x;
    等价于
    x+=(aa.EASY++)+x;
      

  2.   

    你这样的代码风格不好,要写得明白一点。
    比如这个“x+=aa.EASY+++x;”
    你要记着,不管是否是一个人开发的软件,看你代码最多的人,总归是你自己。
    x = x + aa.EASY + (++x);//这里我也不知道写得是否正确,不过我习惯这么写。
    不知道你啥意思,我自己写得也不好。
    好的代码是让自己几个月后再看,不需要解释都能一眼看出写的啥东西。
    ……
    ……
    ……
    写程序不是去考试,许多中国人脑子太僵化,非要给自己增加难度,也给别人增加难度。
    比如,明明学计算机语言,非夹杂许多高深的数学题,其实不是那么回事,很多数学题根本就没什么用。
    ……
      

  3.   

    new test().dd(++x);
    再比如这一句,你写的啥东西啊。
    ……
    ……
    ……
    我看了半天,不知道你想表达啥,累死人了,不能写得简单明了一点吗?
      

  4.   

    再比如:dd(++x);
    如果写成
    dd(x);
    x++;
    是不是更好一点呢?
    非要给自己增加复杂度。
      

  5.   

    没看懂楼主是说哪句错了- -public void dd(int x) {
     是说这里加了final报错么
      

  6.   

    1楼和2楼已经给出了问题解答,编译器会报错是因为按你的写法aa.EASY+++x,编译器会认为你在对aa.EASY++,这样试图改变常量,所以就会报错,如果你打上括号就没事了。
      

  7.   

    在interface接口中:
    对数据进行隐式修饰:public static final
    对方法进行隐式修饰:public abstract
      

  8.   

    aa.EASY++改变了常量的值,所以要去掉final才行。