“new”关键字在Java中实际上做了什么,我应该避免创建新对象吗?更新了答案以反映编辑后的问题问题更新后
我不久前注册了,尽管自从我开始学习计算机编程以来,我一直在充分利用这个网站,我一直在自学并考虑我的一点爱好。
我确实查找了类似的问题,但实际上我找不到我正在寻找的答案。现在,请注意,在Java(这是我建议开始使用的语言)中,根据需要声明和实例化变量被认为是良好的编程实践,请考虑以下行:
class MyClass {
void myMethod() {
AnotherClass myObject = new AnotherClass();
myObject.doStuff();
}
}
现在,假设我在运行程序时调用myMethod(),比如说,在运行我的程序时调用10次,这是如何工作的?是否每次都会创建新对象?是否每次都重新分配 myObject 变量?编译器是否跳过了类似代码的内容,因为它看到对象已经创建,并且变量 myObject 已分配给此类对象?简而言之:只有当我计划只调用该方法一次时,我是否应该编写这样的代码?我知道。。。我问了这么愚蠢的问题,这让我感到羞耻,但请给我一个机会!提前致谢!
---------------------------编辑-----------------------------
那么现在我应该在得到新答案后编辑这篇文章吗?顺便说一句...天哪,这很快,非常感谢!哇,这让我感到困惑,很多,我想这是由于我一直在自学的事实......无论如何,每次都为变量创建一个对象不是没用吗?我的意思是,如果我想在整个程序中使用myObject变量,我不应该一劳永逸地声明它吗?也许在另一种方法中,我只调用一次?因为据我所知,每次我调用一个新对象都在创建,从而覆盖myObject自己的属性(即变量),或者我只是在胡说八道?new AnotherClass
myObject
myMethod()
---------------------------编辑-----------------------------
在从一些我现在不记得的网站上阅读此代码后,我的怀疑来了:
public class DataBase {
private static String buf, retString = "\n";
private static File file = new File("test.txt");
public static void readText(JTextArea area) {
try {
FileReader fr = new FileReader (file);
BufferedReader br = new BufferedReader(fr);
while ((buf = br.readLine()) != null) {
area.append(buf);
area.append(retString);
}
br.close();
fr.close();
}
catch (IOException e) {
System.out.println("Exception: " + e);
}
}
public static void writeText(JTextArea area) {
try {
FileWriter fw = new FileWriter (file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(area.getText());
bw.close();
fw.close();
}
catch (IOException e) {
System.out.println("Exception: " + e);
}
}
}
我的意思是,为什么不在类的顶部声明FileWriter,FileReader,BufferedReader和BufferedWriter,就像它们对其他变量所做的那样?为什么不在构造函数中初始化它们呢?为什么每次调用方法时都这样做,而不是使用相同的实例变量?