相关疑难解决方法(0)

为什么两个程序有前向引用错误而第三个没有?

以下内容无法编译,给出"非法转发引用"消息:

class StaticInitialisation {

    static
    {
        System.out.println("Test string is: " + testString);
    }

    private static String testString;

    public static void main(String args[]) {
        new StaticInitialisation();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,以下编译:

class InstanceInitialisation1 {

    {
        System.out.println("Test string is: " + this.testString);
    }

    private String testString;

    public static void main(String args[]) {
        new InstanceInitialisation1();
    }
}
Run Code Online (Sandbox Code Playgroud)

但以下内容无法编译,给出"非法转发引用"消息:

class InstanceInitialisation2 {

        private String testString1;

    {
        testString1 = testString2;
    }

    private String testString2;

    public static void main(String args[]) {
        new InstanceInitialisation2();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么StaticInitialisation和InstanceInitialisation2不能编译,而InstanceInitialisation1呢?

java static instance forward

53
推荐指数
1
解决办法
3273
查看次数

为什么变量初始化为赋值表达式[String x =(x = y)]编译?

这是如何编译而没有错误的?根据我的理解,编译器检查变量的类型(在这种情况下String),然后查看右侧表达式的类型是否对应于变量的类型(或者至少是一个子类型,但让我们坚持使用String上课,因为它是最后的).

public class InitClass {
  public static void main(String[] args) {
    String str = (str = "hello");
    System.out.println(str);
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何str = "hello"编译?编译器是否已经知道str应该是类型String

java

19
推荐指数
2
解决办法
628
查看次数

标签 统计

java ×2

forward ×1

instance ×1

static ×1