错误: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它可以工作。 为什么呢?

 i = 900; 

这是Java中的一个语句,它可以在Constructor或方法或初始化块中。

在您的情况下,您可以在max()方法内移动它

当我重新声明数据类型,同时将值设置为“i”,如int i = 900它可以工作。 为什么呢?

在这里,您在相同的时间,相同的行中声明并将值赋给变量。

在此处查看更多详细信息, 此处有关于java语句,表达式

声明

陈述大致相当于自然语言中的句子。 声明形成一个完整的执行单元。 通过使用分号(;)终止表达式,可以将以下类型的表达式转换为语句。

  • 作业表达
  • 任何使用++或 –
  • 方法调用
  • 对象创建表达式

Hava看看Java:预期的标识符 :

 i = 900; 

是任何其他声明。 你不能在任何地方写声明。 它必须在方法/构造函数体中。 声明中的初始化变量称为定义,并且是此规则的例外。

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

如果你想初始化静态变量,你可以做2个(理智的)方法:在你声明它的地方初始化变量:

 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(); } } 

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

j可以转换为局部变量 。

 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(); } } 

您可能想要做的是:

 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子句。