我知道静态方法或变量属于一个类,而不是一个对象。很清楚如何使用变量,例如计算对象的数量。但是方法?它们 99% 是静态的。显然我不明白。
下面是一个例子:有一种方法可以检查一个对象是否存在于数据库中,或者一个写入数据库的方法。我可以将它们设为静态和非静态,它们的工作方式相同。使它们成为非静态的有什么意义?要编写额外的代码,创建一个对象,然后调用该对象的方法?
我有 100% 的这种方法——那些是静态的。我什至想不出一个非静态的方法。
请解释为什么要发明非静态方法,我将不胜感激现实生活中的非静态方法示例。
现在您以程序化风格编写程序。一般来说,这是可以接受的。
但是这个问题被标记为java。而java是一种面向对象的语言。因此,使用了 OOP 范式。
其实这是不同层次的抽象,适用于不同的任务。OOP 有更广泛的任务需要解决,但过程方法有时用于数学计算,尽管使用这种方法维护和扩展功能更加困难。
有关这两种方法的更多信息:
https://stackoverflow.com/questions/60116769/what-is-the-difference-between-object-oriented-programming-and-procedural-progra
以下是需要非静态方法的原因:
静态方法用于访问此类的所有对象共有的静态字段。
通过这种方式,一个对象可以与另一个对象区分开来,即使它们是从同一个类创建的。
此外,静态方法不能使用多态性。
从安全的角度来看,可以从任何上下文调用静态方法,因此它们是不安全的。
多线程时,静态方法需要同步,因为它们违反了线程安全原则。
例如,考虑class
java.lang.Object,它没有静态方法。这些是 OOP 的基础,即对象。最简单的例子是 POJO。通过创建 10 个不同的对象,我不能调用静态,因为数据因对象而异。
一个更清晰的例子:根据用户的选择,我们创建一个 Database 对象。数据库本身只是一个接口(或抽象类),用户选择 MySQL 或 PostgreSQL。
在代码中,我们不会为每个数据库规定解决方案。代码将如下所示:
静态方法不允许这样做。就个人而言,我只在 util 类中使用静态方法。
如果您不深入研究项目的 OOP 结构,静态方法实际上可能看起来更方便。但是,总的来说,它们只是有不同的目的。
在您的数据库示例中,可以使用 Singleton。