我可以使用类的方法而不实例化这个类吗?

Rom*_*man 23 java oop methods class instantiation

我有一个有几个方法的类,这些方法中没有构造函数.

所以,我想知道是否可以在没有创建类实例的情况下调用类的方法.

例如,我可以这样做:

NameOfClass.doMethod(x1,x2,...,xn)
Run Code Online (Sandbox Code Playgroud)

总的来说,我不明白为什么它不可能.我只是调用一个函数来做某事(或返回一些值).如果可能,如果方法为类的私有变量设置值,将会发生什么.我怎样才能达到这个值?以同样的方式?

NameOfClass.nameOfVariable
Run Code Online (Sandbox Code Playgroud)

Yon*_*oni 27

它被称为静态变量和静态方法.试试吧,看看它编译.


µBi*_*Bio 12

如果方法是静态的,是的.

但是您将无法访问非静态成员.


pmr*_*pmr 6

正如许多人所指出的:只有在方法是静态的情况下才有可能.也许一些OOP背景是有序的:一个方法应该总是属于一个类.那么在没有类实例的情况下调用方法有什么用呢?在完美的OO世界中,没有任何理由这样做.许多与静态方法有关的用例都在谈论为您的类分配某种身份.虽然这在编程领域是完全合理的,但在面向对象设计方面并不十分有说服力.

当我们在一个不完美的世界中编程时,通常会有一个用于"自由函数"的用例(例如Java或C++实现sort()的方式).由于Java没有直接支持自由函数类,只使用静态"方法"来表达那些语义,并且类包装器提供了一个"命名空间".您如何看待这种解决方法,如果您将其视为语言设计中的一个缺陷,那么IMO就是一个意见问题.


小智 5

1)是的,您可以使用类的方法,而无需通过使用关键字"静态"创建该类的实例或对象.

2)如果您将方法声明为"静态",则可以通过以下方式调用此方法:

                *ClassName.MethodName()* 
Run Code Online (Sandbox Code Playgroud)

3)例如

class Hello {

   public static void print()
   {

     System.out.println("HelloStatic");
   }  

}


class MainMethod {
    public static void main(String args[])
    {
       // calling static method
       Hello.print();
    } 
}  
Run Code Online (Sandbox Code Playgroud)

4)上述程序的输出为:HelloStatic