Как вызвать метод в Java? - PullRequest
8 голосов
/ 15 сентября 2010

Как вызвать метод, который находится в другого класса того же пакета в Java?То, что я знаю, используя объект, мы можем вызвать метод из другого класса.Есть ли другой способ вызвать метод другого класса?

Ответы [ 8 ]

11 голосов
/ 15 сентября 2010

Создайте экземпляр класса B:

B b=new B();
b.method();

или определите статический метод в классе B:

class B
{
 static void staticMethod();
}

и вызовите его так:

B.staticMethod();
4 голосов
/ 15 сентября 2010

Методы: методы объекта или методы класса .

Методы объекта: применяется к объекту.Вы должны использовать экземпляр:

instance.method(args...);

Методы класса: он применяется к классу.У него нет неявного экземпляра.Вы должны использовать сам класс.Это больше похоже на процедурное программирование.

ClassWithStaticMethod.method(args...);

Отражение

Благодаря отражению у вас есть API для программного доступа к методам, будь то методы объектов или классов.1022 * Методы экземпляра: methodRef.invoke(instance, args...); Методы класса: methodRef.invoke(null, args...);

3 голосов
/ 15 сентября 2010

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

public class Foo {
   public static String Bar() {
      return "bla";
   }
}

В этом случае вы можете вызвать его с помощьюFoo.Bar().

2 голосов
/ 11 марта 2015

Из Записок Фреда Шварца (фредозавра) :

Существует два типа методов.

  • Методы экземпляра связаны с объектом и используют переменные экземпляра этого объекта.Это значение по умолчанию.

  • Статические методы не используют переменные экземпляра какого-либо объекта класса, в котором они определены. Если вы определяете метод как статический, выкомпилятор получит грубое сообщение, если вы попытаетесь получить доступ к любым переменным экземпляра.Вы можете получить доступ к статическим переменным, но за исключением констант, это необычно.Статические методы обычно берут все данные из параметров и вычисляют что-то из этих параметров без ссылки на переменные.Это типично для методов, которые делают какие-то общие вычисления.Хорошим примером этого являются многие служебные методы в предопределенном классе Math.

Квалификация статического вызова

Из-за пределов определяющего класса метод экземпляра имеет видвызывается с префиксом объекта, который затем передается в качестве неявного параметра методу экземпляра, например, inputTF.setText("");

Статический метод вызывается с префиксом имени класса, например, Math.max(i,j);,Любопытно, что он также может быть квалифицирован с объектом, который будет игнорироваться, но будет использоваться класс объекта.

Пример

Вот типичный статический метод:

class MyUtils {
    . . .
    //================================================= mean
    public static double mean(int[] p) {
        int sum = 0;  // sum of all the elements
        for (int i=0; i<p.length; i++) {
            sum += p[i];
        }
        return ((double)sum) / p.length;
    }//endmethod mean
    . . .
}

Единственные данные, которые этот метод использует или изменяет, - это параметры (или, конечно, локальные переменные).

Зачем объявлять метод static

Вышеуказанный метод mean() будет работать так же хорошо, если он не будет объявлен как статический, если он вызывается из того же класса.Если вызывается извне класса, и он не был объявлен как статический, он должен быть квалифицирован (бесполезно) с объектом.Даже при использовании в классе есть веские причины определять метод как статический, когда он может быть.

  • Документация. Любой, кто видит, что метод статический, знает, как его вызывать (см. Ниже).Точно так же любой программист, изучающий код, будет знать, что статический метод не может взаимодействовать с переменными экземпляра, что облегчает чтение и отладку.
  • Эффективность. Компилятор обычно генерирует немного более эффективный код, поскольку в метод не нужно передавать неявный параметр объекта.

Вызов статических методов

Существует два случая.

Вызывается из одного класса

Просто напишите имя статического метода.Например:

// Called from inside the MyUtils class
double avgAtt = mean(attendance);

Вызывается извне класса

Если метод (статический или экземпляр) вызывается из другого класса, перед именем метода должно быть указано что-тоуказать класс, где метод определен.Например, методы, это объект, к которому метод получит доступ.Для статических методов должно быть указано имя класса.Например:

// Called from outside the MyUtils class.
double avgAtt = MyUtils.mean(attendance); 

Если перед ним указан объект, значение объекта будет проигнорировано и будет использован класс объекта.

Доступ к статическим переменным

Кроме того, метод static не может получить доступ к переменным экземпляра, он может получить доступ к static переменным.Обычное использование статических переменных - определение «констант».Примеры из библиотеки Java: Math.PI или Color.RED.Они квалифицированы по имени класса, так что вы знаете, что они static.Любой метод, static или нет, может получить доступ к static переменным.Переменные экземпляра могут быть доступны только методами экземпляра.

Альтернативный вызов

Немного странным и не рекомендуемым является то, что объект класса может использоваться вместо имени класса для доступа к статическим методам.Это плохо, потому что создается впечатление, что в объекте используются переменные экземпляра, но это не так.

1 голос
/ 15 сентября 2010

Вы можете создать статический метод или использовать другой класс в качестве члена вашего класса, вызывая функцию в конструкторе.

public class aClass {
      private SomeOtherClass oc;
      public class aClass( SomeOtherClass otherClass) {
         oc = otherClass;
      }

      public callOtherClassMethod() {
         oc.otherClassMethod();
       }
    }
1 голос
/ 15 сентября 2010

Если это статический метод, вы можете вызвать его, используя имя класса вместо объекта.

0 голосов
/ 17 января 2018

вызывая метод

public class a 
{
    void sum(int i,int k)
    {
        System.out.println("THe sum of the number="+(i+k));
    }
}
class b
{
    public static void main(String[] args)
    {
        a vc=new a();
        vc.sum(10 , 20);
    }
}
0 голосов
/ 10 января 2015

Сделайте это в этом формате:

classmehodisin.methodname();

Например:

MyClass1.clearscreen();

Я надеюсь, что это помогло. Примечание:Метод должен быть статическим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...