Подтвердить что ты не робот

Могу ли я использовать методы класса без создания экземпляра этого класса?

У меня есть класс с несколькими методами, и между этими методами нет конструктора.

Итак, мне интересно, можно ли вызвать метод класса без создания экземпляра класса.

Например, я могу сделать что-то вроде этого:

NameOfClass.doMethod(x1,x2,...,xn)

В общем, я не понимаю, почему это должно быть невозможно. Я просто вызываю функцию, которая что-то делает (или возвращает некоторые значения). Если возможно, что произойдет, если метод задает значение для частной переменной класса. Как я могу достичь этого значения? Точно так же?

NameOfClass.nameOfVariable
4b9b3361

Ответ 1

Он называл статические переменные и статические методы . Просто попробуйте и посмотрите, что он компилируется.

Ответ 2

Если методы статичны, да.

Но вы не сможете получить доступ к нестационарным элементам.

Ответ 3

Как указывали многие, это возможно только в том случае, если метод статичен. Возможно, некоторый фон ООП находится в порядке: метод всегда должен принадлежать классу. Итак, каково использование вызова метода без экземпляра класса? В идеальном мире ОО не должно быть никаких оснований для этого. Множество вариантов использования, связанных со статическими методами, говорят о назначении своего класса для определенного типа. Хотя это вполне разумно в мире программирования, это не очень убедительно, когда речь идет о объектно-ориентированном дизайне.

Как мы программируем в несовершенном мире, часто используется прецедент для "свободной функции" (например, Java или С++ реализуют sort()). Поскольку Java не имеет прямой поддержки для классов свободных функций, только для статических "методов" используются выражения для семантики с дополнительным преимуществом оболочки класса, предоставляющей "пространство имен". То, что вы думаете об этом обходном пути, и если вы рассматриваете его как недостаток в оформлении языка, - это ИМО вопрос.

Ответ 4

1) ДА, вы можете использовать методы класса без создания экземпляра или объекта этого класса с помощью ключевого слова "Статический" .. p >

2) Если вы объявите метод как "Статический" , вы можете вызвать этот метод:

                *ClassName.MethodName()* 

3).

class Hello {

   public static void print()
   {

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

}


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

4). Вывод вышеуказанной программы: HelloStatic

Ответ 5

В большинстве языков вы можете сделать это только в том случае, если метод статичен. Статические методы могут изменять только статические переменные.

Ответ 6

У меня есть класс с несколькими методами, и между этими методами нет конструктора.

Если вы явно не определяете конструктор, вы получаете конструктор по умолчанию, предоставляемый компилятором. Поэтому, если эти методы не статичны, попробуйте следующее:

NameOfClass x = new NameOfClass();
x.doMethod(x1,x2,...,xn);

Ответ 7

Метод класса использует в контексте экземпляр; он имеет доступ к переменным-членам экземпляра. Вы понимаете это, потому что вы спрашиваете, что произойдет, если метод обращается к одной из этих переменных.

Вы можете понять, почему это не работает, задавая себе вопрос: "Где данные?" Если у вас нет экземпляра, где переменная экземпляра? Где данные? И ответ заключается в том, что у него нет места и, следовательно, он не работает.

Разница со статической функцией и статическими переменными-членами заключается в том, что вы можете ответить на вопрос о местонахождении данных. Статические переменные доступны независимо от того, существует ли конкретный экземпляр или нет. Особое решение для конкретного экземпляра или класса - это тот, который вы должны сделать, учитывая то, что вы действительно хотите сделать.

Ответ 8

Это будут статические методы.

Ответ 9

У меня есть класс с несколькими методами и нет конструктора среди эти методы.

Вы имеете в виду, что у вас есть что-то вроде:

public class X
{
    public void foo()
    {
    }
}

или вы имеете в виду, что у вас есть что-то вроде:

public class X
{
    private X()
    {
    }

    public void foo()
    {
    }
}

Если это первый способ, да, есть конструктор, и он будет выглядеть следующим образом:

public X()
{
    super();
}

если это второй способ, существует, вероятно, такой метод, как:

public static X createInstance()
{
    return (new X());
}

Если вы действительно имеете в виду, что классы имеют методы, которые делают вещи, не создавая экземпляр, тогда да, вы можете просто сделать все методы и переменные статичными (обычно это не очень хорошая идея, но для некоторых вещей это идеально).

Ответ 10

Так как qre является статическим методом и не имеет доступа к экземплярам окружающего класса, вы должны сначала создать экземпляр, а затем получить доступ к нему. Например:

public class Foo {
   private int bar;

   public static void qre() {
      Foo foo = new Foo();
      foo.bar = 5;
      System.out.println("next bar: " + (++5));
   }
}

Ответ 11

В правильной инкапсуляции вы не должны "видеть", что происходит при instanciation. Чтобы полагаться на класс, отсутствие конструктора нарушает эту форму. Разработанный класс my имеет в виду добавить официальную инициализацию состояния в конструктор позже. Ваш "контракт" с классом заключается только в том, что вы можете использовать методы, как они в настоящее время разрабатываются.

Если вы хотите использовать функциональность этого метода без накладных расходов класса, возможно, вам лучше всего включить этот метод в ваш существующий "клиентский" класс (конечно, это просто "копировать и вставлять" кодирование и считается анти-шаблон программного обеспечения.