为什么变量在 finally 块中需要是静态的

Why does a variable need to be static in the finally-block

我使用 Eclipse 进行编程,它告诉我是否要输出 "Input String"

Cannot make a static reference to the non-static field Input

为什么finally块中的变量是静态的?

import java.util.Scanner;

public class NameSort {
    String Input;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            System.out.println("Inupt some Text");
            while (sc.hasNextLine()){

                String Input = sc.nextLine();
                System.out.println(Input);
                if (Input.toLowerCase().equals("ende")) {
                    System.exit(0);
                    sc.close();
                }
            }

        } finally {
            if (sc != null)
            sc.close();
            System.out.print(Input);
        }
    }
}

这与 finally 块无关,在 Java 中,您无法从 static 方法访问非静态成员或方法。

如果您想从 main 访问它,您应该将 Input 设为静态。

在 Java 中,您不能 use/call 来自 static 方法的非静态 variable/method。此外,除了以下代码,您的其余代码无用:

import java.util.Scanner;

public class NameSort {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input;
        System.out.println("Inupt some Text");
        while (!(input = sc.nextLine()).equals("ende")) {
            System.out.println(input);
        }
    }
}

样本运行:

Inupt some Text
hello
hello
hi
hi
ende