java - 共享使用的静态方法与实例方法

标签 java static methods instance

这是我试图确定的......

我有一个实用程序类,可以将行附加到文本文件中。 这必须被许多其他类使用,例如 一个通用的日志文件。

在我的第一个实现中,我拥有所有的类 想要使用它创建一个无引用实例,例如

new Logger(logline,logname);

构造函数创建一个 PrintWriter,附加行 并关闭文件。

这似乎很浪费,因为创建了一个新实例 附加的每一行。

另一种方法是使用静态方法,称为“writeln” 在这个公共(public)类(class)中,因为我已经了解静态 方法和数据一遍又一遍地重复使用相同的内存......但是

此静态方法创建 PrintWriter 的实例 完成它的工作,所以这是否意味着一个新实例 的 PrintWriter 是为每一行创建的,比如#1?

无论如何,(我对 Java 比较陌生)有吗? 众所周知的、经批准的这样做的方式,或者我们是否 只需创建即可,然后让垃圾收集器 跟在我们后面清理吗?

谢谢

最佳答案

明智的答案是您应该使用“严肃的”日志记录包,例如 Commons Logging .

但是,要回答您的问题,在这种情况下您应该使用静态方法(除非您想在代码中维护日志记录类实例,在这种情况下您应该遵循本线程中的其他答案)。此外,您应该有一个初始化为 Map<String, PrintWriter> 的静态字段。 。 (您不必使用 String 作为键:如果您想要有限数量的日志记录目标类型,请使用枚举。)

然后,当您的方法发现映射中尚不存在的键时,它会创建 PrintWriter并把它贴在 map 上。您可能想使用 ConcurrentHashMap作为支持映射类型,因此它是线程安全的。

您还需要提供一种关闭日志记录目标的方法(这也将从 map 中清除关联的条目)。

祝你好运!

关于java - 共享使用的静态方法与实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784226/

相关文章:

java - 可以将相同的有状态 session bean 实例注入(inject)到多个其他 session bean 中吗?

php - 如何创建全局配置文件?

java - 需要覆盖非抽象类的特定方法

java - 当 ArrayList 位于对象内部时访问 ArrayList 方法

javascript - 从对象 : object. 中调用函数 function()

java - 从 J2SE 5.0 学习 Java SE 6 有多难?

java - 如何播放存储在 java 项目中的 mp3 音频?

java - 使用 HTTP 请求下载文件的一部分

c++ - 静态结构 - 定义、对象、成员

java - 如何在静态上下文中等待线程?