设计实现代码:静态还是动态?

Designing implementation code: static or dynamic?

在为我的 Classes 设计测试或实现代码时,我喜欢将代码拆分为方法以提高可读性和功能性。然而,鉴于 main() 是静态的,这使得从静态方法到非静态方法来回传递数据和控制变得很痛苦。

我想做的是将 main() 留空并调用一个方法调用我的实际实现 Class(代码是非静态的), 在我的实现中制作所有内容Classprivate static

两者都有问题吗?我倾向于制作所有内容 private static

您可以尝试像下面这样调用非静态方法:

public static void main(..) {
   ..
   MyClass clazz = new ...;//create object
   clazz.myMethod();//call method on object itself rather than making all methods static.
}

making everything in my implementation Class private static

这与 OOP 方式相矛盾,如果您的项目只需要 functionsprocedures 并且不依赖对象和消息,它清楚地表明,在面向对象编程方面,您的设计中有些地方是非常错误的。

在 OOP 设计中使用静态方法是不好的,因为它不允许您覆盖它们并使用重要的 dynamic dispatch 属性,并且它会大大降低代码的可重用性。

你的思维方式似乎是命令式语言程序员(C?),如果你真的想成为更好的java程序员,你应该使用更好的OOP设计。确保 类 可以相互交互并以有组织的方式相互发送消息(调用 方法 )。

尝试查看 OOP 教程,尝试思考如何使您的项目更加面向对象。一开始它可能很难并且看起来多余,但是一旦你习惯了它 - 你将能够解锁 java 最重要的方面之一 - 作为 OOP 语言,你不会 "program C in java".

我理解你对混淆的疑虑,我过去使用这种模式来完全避免静态方法并减少所用语言功能的复杂性

public class Main {
    public static void main(String[] args) {
        new Main().m(args);    
    }
}

但在 Java 中,静态方法是一个重要的设计元素 (Java: when to use static methods)。您会在 API 中找到静态方法。所以你也应该按预期使用它们。