扫描仪没有被声明,但为什么?!还有,它说我不能打印全局变量“line”?但为什么?

时间:2017-04-26 20:59:56

标签: java

import java.io.FileReader;
import java.util.Scanner;

public class file_reading 
{
    Scanner scanner;

    try 
    {
        FileReader reader = new FileReader("toread.txt");
        scanner = new Scanner(reader);
    } catch (Exception e) {
        System.err.print("hello incorrect");
    }

    String line = scanner.nextLine();

    public static void main(String[] args)
    {
        System.out.println(line);
    }
}

2 个答案:

答案 0 :(得分:2)

你在这里遇到一些错误,首先是你在方法之外尝试非法的尝试,你必须有方法并且在他的块内({}之间)你会写代码。
您无法打印行的原因可能是因为您从静态方法(main)调用非静态变量

答案 1 :(得分:2)

您必须将所有代码放在方法中。除了Scanner的声明。

您可以像这样在main方法中声明它。然后它只在这个方法中可见。

 Scanner scanner;

或者您在main方法之外将其定义为静态成员。

 static Scanner scanner;

整个班级都可以使用它。

你必须把

String line = scanner.nextLine();
System.out.println(line);
在你的try / catch-block中

。否则,编译器会假定“scanner”可能尚未初始化,因为您只在此块内部初始化它,但想在外部使用它。并且你会得到一个警告,“line”是未知的,因为你在try / catch中也实例化了这一点,这使得大括号外的所有代码都无法访问它。

import java.io.FileReader;
import java.util.Scanner;

public class file_reading 
{

    public static void main(String[] args)
    {
      Scanner scanner;

      try 
      {
         FileReader reader = new FileReader("toread.txt");
         scanner = new Scanner(reader);

         String line = scanner.nextLine();
         System.out.println(line);

      } catch (Exception e) {
         System.err.print("hello incorrect");
      }
    }
}