Java 重用对象的最佳方法

Java 重用对象的最佳方法,java,oop,Java,Oop,我一直在浏览我的一些类,似乎每次我需要一个新的输入时,我都会制作一个新的扫描仪(如果类没有扫描仪的话)。有什么方法可以在多个类之间重用扫描仪或任何其他对象吗?可以将其放入实用程序类或类似于单例的对象。可以将其放入实用程序类或类似于单例的对象。单例模式是一种方法。另一个是实现类似Java字符串内部化的东西。您可以维护一组静态的现有扫描仪,并且仅当扫描仪不在该扫描仪集中时才创建一个新的扫描仪。单例模式是一种方法。另一个是实现类似Java字符串内部化的东西。您可以维护一组静态的现有扫描仪,并且仅当扫描

我一直在浏览我的一些类,似乎每次我需要一个新的输入时,我都会制作一个新的扫描仪(如果类没有扫描仪的话)。有什么方法可以在多个类之间重用扫描仪或任何其他对象吗?

可以将其放入实用程序类或类似于单例的对象。

可以将其放入实用程序类或类似于单例的对象。

单例模式是一种方法。另一个是实现类似Java字符串内部化的东西。您可以维护一组静态的现有扫描仪,并且仅当扫描仪不在该扫描仪集中时才创建一个新的扫描仪。

单例模式是一种方法。另一个是实现类似Java字符串内部化的东西。您可以维护一组静态的现有扫描仪,并且仅当扫描仪不在该扫描仪集中时才创建一个新的扫描仪。

创建多个扫描仪不一定是问题,除非您希望它们访问同一文件。 一个选项是创建一个包含静态扫描程序或使用单例的util类

单件是这样制作的:

class Singleton 
Singleton singleton 
private Singleton(){
//constructon
}

public synchronised singleton getsingleton(){
   if (singleton==null)
       singleton=new Singleton()
 return singleton 
}
你的另一个选择是这样做

class utils {
     public static scanner scan
}
可以使用

utils.scan 
而不是您的普通变量名

但是请记住,2台扫描仪的性能与1台不同。例如,假设我们有一个文件扫描器,它在一个文件的中间,现在另一个对象读取下一个单词,如果您拆分为两个扫描器,那么原始文件将读取同一个单词,但如果您有一个扫描器,它将不会。例如 2扫描器A和B都读取为文本“这是一个示例”创建的内容


因此,请记住,单个扫描仪的行为与两个扫描仪的行为不同,如果您尝试执行类似多重读取的操作,这一点尤其值得注意。因此,如果只是尝试保存这些变量名,您可能不想这样做

创建多个扫描仪不一定是个问题,除非您希望它们访问同一个文件。 一个选项是创建一个包含静态扫描程序或使用单例的util类

单件是这样制作的:

class Singleton 
Singleton singleton 
private Singleton(){
//constructon
}

public synchronised singleton getsingleton(){
   if (singleton==null)
       singleton=new Singleton()
 return singleton 
}
你的另一个选择是这样做

class utils {
     public static scanner scan
}
可以使用

utils.scan 
而不是您的普通变量名

但是请记住,2台扫描仪的性能与1台不同。例如,假设我们有一个文件扫描器,它在一个文件的中间,现在另一个对象读取下一个单词,如果您拆分为两个扫描器,那么原始文件将读取同一个单词,但如果您有一个扫描器,它将不会。例如 2扫描器A和B都读取为文本“这是一个示例”创建的内容


因此,请记住,单个扫描仪的行为与两个扫描仪的行为不同,如果您尝试执行类似多重读取的操作,这一点尤其值得注意。因此,如果只是尝试保存这些变量名,您可能不想这样做

过早优化是件坏事(tm)。 单身人士也是如此

您担心的性能问题往往不是您的程序陷入困境的问题。 因此,只需创建扫描器并享受可读代码

如果遇到性能问题,请分析代码。如果事实证明扫描仪是性能瓶颈,那么您的应用程序所做的只是创建和丢弃扫描仪,那么是时候开始考虑在代码的特定部分重用它们了


或者更可能的是,用更低级的对象替换它们,如BufferedReader和Pattern and Matcher。

过早优化是一件坏事(tm)。 单身人士也是如此

您担心的性能问题往往不是您的程序陷入困境的问题。 因此,只需创建扫描器并享受可读代码

如果遇到性能问题,请分析代码。如果事实证明扫描仪是性能瓶颈,那么您的应用程序所做的只是创建和丢弃扫描仪,那么是时候开始考虑在代码的特定部分重用它们了


或者更可能的情况是,将它们替换为更低级的对象,如BufferedReader和Pattern and Matcher。

创建新的扫描仪会导致问题吗?不会,但这就像有100个具有相同值的变量。对象与变量不同。创建稍后丢弃的临时对象通常不是问题。(编辑:两个都不是临时变量,真的)创建新的扫描程序会导致问题吗?不会,但这就像有一百个具有相同值的变量。对象与变量不同。创建稍后丢弃的临时对象通常不是问题。(编辑:两者都不是临时变量,真的)我喜欢这样的警告,即不应在同一输入流上放置多个扫描仪。您的单例示例代码不是线程安全的,而且很难实现线程安全。看你是对的,我把它做成了tread save,因为它只是一个getter,没有调用任何其他方法。我们可以使它同步,而不会使它变得更加资源密集。我喜欢这样的警告,即你不应该在同一个输入流上放置多个扫描仪。您的单例示例代码不是线程安全的,而且很难实现线程安全。看你是对的,我把它做成了tread save,因为它只是一个单一的getter,不需要调用任何其他方法。我们可以使它同步,而不需要增加太多的资源。过早优化是万恶之源DonaldKnuthPremature优化是万恶之源DonaldKnuth