0

有没有办法在不实例化其类java的情况下调用公共非静态变量或方法...

4

6 回答 6

9

在 Java 中,没有办法调用非静态变量,即没有instance.

这是有原因的,从了解实例和类成员

当从同一个类蓝图创建多个对象时,它们每个都有自己不同的实例变量副本。

静态方法属于类而不属于特定的instance

于 2013-10-30T08:12:58.183 回答
2

不,因为它违背了静态的目的

于 2013-10-30T08:17:35.830 回答
2

不,在没有实例的情况下调用实例变量是没有意义的。

于 2013-10-30T08:27:53.220 回答
1

不是那不可能,您不能在不创建实例的情况下调用非静态方法。但是如果您不想创建实例并想直接调用,则将这些方法设为静态

于 2013-10-30T08:13:54.783 回答
1

要回答你的问题,不,你不能。Java 并非旨在让您这样做。

但是,我认为更重要的是要问: 你为什么觉得你需要这样做?

如果您无法控制此类(即,它是一个库类),并且您觉得有必要这样做,那么您可能错误地使用了该库。

如果您可以修改该类,请将其设为静态。

于 2013-10-30T15:23:35.597 回答
1

您需要一个对象来调用非静态方法,但它不必是定义该方法的类的对象 - 它也可以是该类的子类的对象。

如果很难将手放在该类的对象上,这将很有用 - 例如,如果它的构造函数具有难以获取且不能为空的参数,或者如果您需要从另一个方法创建对象自己很难得到的东西。在这些情况下,您可以使用自己的类扩展该类,该类具有更简单的构造函数,创建该子类的对象并自己调用它。

请记住,这种方法是骇人听闻和危险的,并且它违反了 OOP 的核心原则。您的子类跳过了它扩展的类的常规构造,并且由于该构造非常复杂(如果不是,您将直接实例化它)您可以相当肯定原始构造过程很重要,并且一些 -如果不是大多数 - 该对象的大部分功能将无法正常工作:如果幸运,则抛出异常,如果您不那么幸运,它可能会产生不良结果甚至损坏其他对象。即使您需要使用此 hack 正确运行的方法,将来对该类的更改也可能会使该方法依赖于正确的构造,这将破坏您的代码。

所以 -使用风险自负!

public class MyNewClass extends ClassWithNonStaticMethod{
    public MyNewClass(){
        //Not doing proper construction
    }
}

//somewhere in your code:
new MyNewClass().nonStaticMethod();
于 2013-10-30T08:27:03.827 回答