有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

实例变量错误:Java中需要标识符

我是一个新的Java学习者。我学习了一些Java核心概念。运行以下代码时,我得到了预期的标识符错误:

class Sekar {
  public static int i,j,k;
  i = 900;
  static void max()
  {
    j = 100;
    if(i>j)
    {
      k=i;
    }
    else {
      k=j;
    }
    System.out.println("The maxmimum vale between"+i+"and"+j+"is :"+k);
  }               
  public static void main(String[] args) {
     max();       
  }
}

编译代码时,出现以下错误:

error: identifier expected
  i    =  900;
     ^
  1. 有人能解释为什么这里会发生这种错误吗
  2. 当我在谷歌上搜索标识符预期错误时,我发现当声明变量时没有数据类型,就会发生这个错误,但我声明对于我所有的变量I,j,k
  3. 当我再次声明数据类型,同时将值设置为“I”时,就像int i = 900一样,它可以工作。为什么会这样

共 (3) 个答案

  1. # 1 楼答案

    看看Java: Identifier expected

    i = 900;
    

    这是一种陈述。你不能在任何地方写陈述。它必须在方法/构造函数主体中。在声明中初始化变量称为definition,这是该规则的例外

    http://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

    如果要初始化静态变量,可以采用两种(正常)方式: 在声明变量的地方初始化变量:

    class Sekar {
      public static int i = 900, j,k;
    
      static void max()
      {
        j = 100;
        if(i>j)
        {
          k=i;
        }
        else {
          k=j;
        }
        System.out.println("The maxmimum vale between"+i+"and"+j+"is :"+k);
      }               
      public static void main(String[] args) {
         max();       
      }
    }
    

    或者在静态构造函数中执行:

    class Sekar {
      public static int i, j,k;
    
      static {
        i = 900;
      }
    
      static void max()
      {
        j = 100;
        if(i>j)
        {
          k=i;
        }
        else {
          k=j;
        }
        System.out.println("The maxmimum vale between"+i+"and"+j+"is :"+k);
      }               
      public static void main(String[] args) {
         max();       
      }
    }
    

    另外,如果你想定义一个constant,我建议使用final关键字

    j可以转换为local variable

    class Sekar {
      public static final int I = 900;
    
      static void max()
      {
        int k;
        int j = 100;
        if(I>j)
        {
          k=I;
        }
        else {
          k=j;
        }
        System.out.println("The maxmimum vale between"+I+"and"+j+"is :"+k);
      }               
      public static void main(String[] args) {
         max();       
      }
    }
    
  2. # 2 楼答案

    i = 900;
    

    这是Java中的一条语句,可以在构造函数、方法或初始化块中

    在您的情况下,可以将其移动到max()方法中

    When I re declare the data type again while setting value to "i" like int i = 900 it works. Why does it?

    在这里,您在同一时间、同一行中声明变量并将其赋值

    查看here了解更多详细信息,以及here有关java语句、表达式的信息

    Statements

    Statements are roughly equivalent to sentences in natural languages. A statement forms a complete unit of execution. The following types of expressions can be made into a statement by terminating the expression with a semicolon (;).

    • Assignment expressions
    • Any use of ++ or
    • Method invocations
    • Object creation expressions
  3. # 3 楼答案

    你可能想做的是:

    class Sekar {
        public static int i=900,j=100,k;
        static void max()
        {
            if(i>j)
            {
                k=i;
            }
            else {
                k=j;
            }
            System.out.println("The maxmimum vale between"+i+"and"+j+"is :"+k);
        }
        public static void main(String[] args) {
            max();
        }
    }    
    

    不过,我不鼓励您在这种情况下使用静态字段。我建议您在方法中使用ijk参数。在你做的时候给他们起个描述性的名字

    还要注意k没有显式初始化,因此默认设置为0,因此else子句永远不会到达