编译器不允许静态方法调用非静态方法。我知道这样做是因为非静态方法通常最终会使用实例变量。
但是拥有一个不使用实例变量的非静态方法是否有意义。如果我们的行为不影响实例状态或不受实例状态的影响,则不应将这种方法标记为静态。
通常,没有。如果该方法不涉及任何实例状态,则没有理由将其绑定到实例。
当然,静态方法不能被继承或覆盖,因此这是您明显希望拥有一个不使用实例状态的实例方法的明显时机。该策略模式就是一个典型的例子。
无论如何,您可能仍将其绑定到实例的另一种情况是,如果这是一个公共API,并且您想象您将来可能希望将该方法绑定到实例状态。在这种情况下,对使用您的API的人的向后兼容性问题可能会使(很难(或不可能))将该静态方法转换为实例方法。
问题内容: 静态变量只有实例(也就是说,它们是类的一部分)。例如:Math.pi 有什么办法可以有多个静态变量实例吗?我听说有一些与Classloader相关的东西吗? 问题答案: 如果发现需要一个静态变量的多个实例,则强烈表明您不应该首先使用静态变量。 是的,如果同一类加载到不同的类加载器中,则该类的每个副本将具有其自己的静态变量。但是,唯一可以静态引用这些静态变量的代码将是由同一类加载器加载的
那么类中有非静态成员有什么意义吗? 如果是,那么使用testData实例的每个线程是否都有这些非静态成员的单独副本?
所以我正在研究一个现有的模拟器软件,其结构基本上是这样的(它有一个静态成员变量包含它自己):
这将打印a.a=50 但是,如果我将更改为,那么我可以如何访问该变量呢?
在编写BookStoreApplication时,使用Book、Tape和CD类创建对象。虽然未完成,但application类应该创建新的BookStoreItems,它们是Book、Tape和CD。它们从BookStoreItems类继承。在这个应用程序类中,我不断得到错误: 我把它改成静态,然后又改成不是静态,但我继续得到这个错误...