gpt4 book ai didi

java - java 的类常量和文件导入

转载 作者:太空宇宙 更新时间:2023-11-04 14:19:45 25 4
gpt4 key购买 nike

我几乎尝试使用类常量来声明为文件,但出现错误。

import java.awt.*;
import java.util.*;
import java.io.*;

public class BabyNames {
public static final Scanner NAME=new Scanner(new File("names.txt")); //specifically this part
public static final int YEAR=1900; //generates the error
public static final int LS=11;
public static final int WIDTH=50;
public static void main(String[] args) throws FileNotFoundException{
intro();
personName();
graph();
}

// Error contained:
// BabyNames.java:6: error: unreported exception FileNotFoundException; must be caught or
// declared to be thrown
// public static final Scanner NAME=new Scanner(new File("names.txt"));
^
//1 error

这不是程序的全部,但我认为其余的不是必需的。抱歉,如果我第一次提问的方式很奇怪。非常感谢。

最佳答案

从技术上讲,您可以使用静态初始值设定项 block 来设置静态最终 Scanner 变量。在初始化 block 内,您可以使用 try/catch:

public static final Scanner NAME; 

static {
// Be sure scanner is initialized even in the case of an exception
Scanner scanner = null;

try {
new Scanner(new File("names.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
NAME = scanner;
}

但是:将像 Scanner 这样的类的实例保存为静态常量是不好的风格。扫描仪是一种单向对象。您将要使用文件内容,仅此而已。将这样的对象保存为常量是没有意义的,如果它是公共(public)的,则更不用说。静态变量将在类加载后立即初始化,并且与程序一样长。在大多数情况下,这不是您想要的。

更好的方法是使其成为实例变量并在构造函数中初始化它。并将其设为类(class)私有(private)。您可以将文件名保存为常量并创建构造函数来接受任何文件名。 intro()personName()graph() 方法也可以成为实例方法。

public class BabyNames {
public static final String NAMES_FILE_NAME = "names.txt";

public static final int YEAR=1900;
public static final int LS=11;
public static final int WIDTH=50;

private final Scanner name;

public BabyNames(String fileName) throws FileNotFoundException {
name = new Scanner(new File(fileName));

}

public static void main(String[] args) throws FileNotFoundException {
BabyNames babyNames = new BabyNames(NAMES_FILE_NAME);
babyNames.intro();
babyNames.personName();
babyNames.graph();
}

public void graph() {
// ...
}

public void personName() {
// ...
}

public void intro() {
// ...
}

// ...
}

因此,Scanner 变量只有 BabyNames 类知道,并且与特定的 BabyNames 实例一样长。这更加模块化,更好维护并且更容易测试。例如。您可以编写单元测试并使用测试文件初始化您的类。

关于java - java 的类常量和文件导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com