Java程序放;空";在文本文件中而不是我的字符串中
编辑:我理解现在的问题是什么。我正在创建一个新的类实例,它重置了类中变量的值。对于任何想知道可以使用“static”作为变量值的人,在类的所有实例中保持不变 示例:Java程序放;空";在文本文件中而不是我的字符串中,java,file,null,Java,File,Null,编辑:我理解现在的问题是什么。我正在创建一个新的类实例,它重置了类中变量的值。对于任何想知道可以使用“static”作为变量值的人,在类的所有实例中保持不变 示例:公共静态int示例=10 我试图将字符串添加到文本文件中,但是当我添加字符串时,它会在文件中放置“null”,而不是我的字符串。字符串是“listName” 类,其中my a值设置为字符串: public class NewList { private String listName; public void newList()
公共静态int示例=10代码>
我试图将字符串添加到文本文件中,但是当我添加字符串时,它会在文件中放置“null”,而不是我的字符串。字符串是“listName”
类,其中my a值设置为字符串:
public class NewList {
private String listName;
public void newList() {
System.out.println("NEW LIST");
System.out.print("List Name: ");
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
setListName(scanner.next());
System.out.println(listName);
ListsWriter listsWriterObject = new ListsWriter();
listsWriterObject.listsWriter();
}
public String getListName() {
return listName;
}
public void setListName(String listName) {
this.listName = listName;
}
将字符串添加到文本文件中的类:
public class ListsWriter {
public void listsWriter() {
NewList newListObject = new NewList();
File lists = new File("lists.txt");
try{
PrintWriter pw = new PrintWriter(new FileWriter(lists, true));
pw.append(newListObject.getListName() + "\n");
pw.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}好的!所以我修改了您的代码,您可以使用它:)
NewList.java
public class NewList {
private String listName;
public void newList() {
System.out.println("NEW LIST");
System.out.print("List Name: ");
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
listName = scanner.next();
System.out.println(listName);
ListsWriter listsWriterObject = new ListsWriter();
listsWriterObject.listsWriter(listName);
}
public static void main(String[] args) {
new NewList().newList();
}
}
ListsWriter.java
public class ListsWriter {
public void listsWriter(String listName) {
File lists = new File("lists.txt");
try{
PrintWriter pw = new PrintWriter(new FileWriter(lists, true));
pw.append(listName + "\n");
pw.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
看看代码的执行顺序。从扫描器
开始,将名称保存在变量私有字符串列表名称中代码>。此变量属于您当前所在的类NewList
的实例。需要注意的是,如果您创建了NewList
的其他实例,那么它们都将有自己的listName
变量
接下来创建ListsWriter
,并调用其方法。在这里,您尝试使用newListObject.getListName()
读取列表名称,但使用的是NewList newListObject=newnewlist()代码>之前。这将创建NewList
的新实例。它有自己的listName
变量,它与另一个实例的变量不同!因此它是null
如果需要其他实例的名称,则需要将该实例的值或引用传递给ListsWriter
对象
您可以通过使用ListsWriter
的构造函数来实现这一点,该构造函数接受String
作为参数(或对NewList
对象的引用)。或者将参数添加到方法listsWriter
例如:
public void listsWriter(String listName){
您刚刚创建了newListObject
,您想知道为什么字段listName
为空?!?如果您想要非空值,您不认为需要先调用setListName()
不是构造函数,而是您从未调用过的方法。我们知道它不是构造函数,因为:(1)它指定了返回类型-herevoid
,(2)它与包含它的类没有相同的名称,Java是区分大小写的,因此NewList
!=NewList
在构造后调用该方法。不要错误地将所有业务逻辑都放在构造函数中。其他人似乎相信您认为方法NewList()
是一个构造函数,在执行newnewlist()时自动调用
。我无法让自己相信这一点,因为该方法会提示输入列表名称:
,如果您认为该方法是一个构造函数,为什么没有这样的提示不会自动告诉您该方法没有被执行?很抱歉,这似乎不符合逻辑。如果您希望文件中的名称来自提示,那么nd运行的代码并没有提示您,为什么您对文件中的名称为空感到惊讶???我并没有试图将其设置为构造函数。我对java有点陌生,所以我真的不知道该怎么做才能解决这个问题。谢谢!我想我理解为什么它以前不起作用,这已经解决了它。