【问题标题】:Instantiation and declaration separate实例化和声明分开
【发布时间】:2014-01-26 05:57:31
【问题描述】:

我的问题是关于 Java 中的声明和赋值规则。 在编写字段时,我们可以一起声明和赋值,但不能单独进行。

例如:

class TestClass1 {
    private int a = 1;
    private int b ;
     b= 1;
    private int sum;

    public int getA() {
        return a;
    }

    public int getB() {
        return b;
    }

    public int getSum() {
        sum = a + b;
        return sum;
    }

}

public class TestClass {
    public static void main(String[] args) {
        TestClass1 testClass1 = new TestClass1();

        System.out.println("total =" + testClass1.getSum());
    }    

}    

这里排队:

private int a = 1; 

我们可以将 a 声明为私有 int 并为其赋值 1。但在以下情况下:

private int b ;
b= 1; 

Eclipse 不允许这种情况发生并引发错误。请解释一下这背后的逻辑。

【问题讨论】:

  • 是的,不能,这是Java的基本语法,声明时成员字段可以是initialized,任何语句都应该在方法或静态块中!
  • 除了它是没有意义的(在原语的情况下)?因为这就是语言的设计方式。见:docs.oracle.com/javase/tutorial/java/javaOO/initial.html

标签: java declaration assign


【解决方案1】:

在类内但在函数外的代码纯粹是声明。它不会被“执行”。它只是声明一个类包含哪些字段。

您可以使用简写 private int a = 1; 的原因只是 Java 语言允许的语法糖。实际上,a = 1 部分是作为构造函数的一部分执行的。只是在变量声明旁边更容易读写。

Java 语言创建者允许这样做是件好事。并非所有语言都允许这样做,以 C++ 为例,但并不总是允许这样做。

【讨论】:

  • Cubicle Dragon :- 那么我是否应该接受它作为一种做法,在类内部而不是函数外部声明值?始终注意我应该有一个构造函数,它将所有声明都包含在其中?发送
【解决方案2】:

您必须将b=1; 放入方法中或将其放入构造函数中。

你得到这个错误是因为你不能做除了声明之外的任何事情(private int a= 1; ) 在班级级别。

【讨论】:

  • 那是一条评论,他在问那个语法错误的原因。
  • 大家好,正如我提到的,我知道这个问题。我知道 b=1 应该在声明时或在方法/构造函数中分配。我在问解释?因为如果声明是方法之外的概率,那么即使是 private int a = 1 ;应该是个问题。
【解决方案3】:

这只是 Java 中的语法问题。在您展示的示例中,您尝试在类的成员声明部分中影响 b 的值。 Java 的语法不允许这样做。如果您的属性是静态的,则只能在声明属性、方法体或静态块中时执行此操作,例如:

private static int b;
static {
    b = 1;
}

【讨论】:

  • 你不能在静态块中初始化非静态元素!
  • 真的!为此事道歉。已编辑。
  • 将属性设置为静态并不能解决问题,因为 OP 要求非静态属性的解决方案。解决方案是从初始化块中删除 static
【解决方案4】:

这只是一个语法问题。你可以这样做:

private int b ;

{  // <- Initialization block
  b= 1;
}

What is an initialization block?

【讨论】:

    【解决方案5】:

    您无法直接在课堂上编写逻辑。你应该把它移到构造函数中。

    Java 只允许在类内和任何方法外声明。像int b = 1; 这样的声明会在你初始化一个新对象时被执行。

    【讨论】:

    • 但是为什么呢?这就是他要问的。
    • Java 只允许在类内和任何方法外声明。像 int b = 1; 这样的声明将在您初始化新对象时执行。
    • 在你的答案中加入评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2010-10-07
    • 1970-01-01
    • 2014-02-26
    • 2015-12-23
    相关资源
    最近更新 更多