нет обычной "функции" в Java? - PullRequest
5 голосов
/ 09 января 2010

в php вы можете объявить функцию в глобальной области видимости с помощью функции.

это не возможно в Java? похоже, что каждая функция в классе как метод. так что все в ООП в Java? нет процедурного кода?

Ответы [ 10 ]

18 голосов
/ 09 января 2010

Ближайшая вещь, которую вы можете иметь к «плавающей» функции, - это статическая функция, которую вы можете вызывать как квалифицированную по имени класса, например,

public class Foo {
   public static void bar(){}
}

... в другом месте

Foo.bar();

Вы можете добавить к этому немного синтаксического сахара, чтобы он выглядел так, как вы думаете:

import static Foo.bar;

... в другом месте

bar();
3 голосов
/ 09 января 2010

В продолжение того, что говорят все остальные, если у вас много таких функций, обычно их группируют в классы, которые полны только статических методов, часто называемых «служебными классами». Первый пример, который приходит на ум, это java.lang.Math , но есть множество других. Любой класс с «Util» в названии может следовать этому шаблону.

3 голосов
/ 09 января 2010

Вы можете сделать метод статическим, вызывая его без создания объекта

public class MyClass{
   public static void m(){
      ...
   }
}


MyClass.m();
3 голосов
/ 09 января 2010

О, да, ОО, действительно . Вы можете кодировать псевдо-процедурные вещи в статическом методе.

3 голосов
/ 09 января 2010

Это верно, процедурный код отсутствует, все является объектом, определенным классом (за исключением нескольких примитивных типов данных). Однако вы можете использовать статические методы:

public class MyClass {
    public static void callMe() {
        System.out.println("HEY");
    }
}

public class MyOtherClass {
    public void someMethod() {
        MyClass.callMe();
    }
}

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

3 голосов
/ 09 января 2010

Да. Но вы можете определить статические методы, которые в конечном итоге могут действовать как методы, содержащиеся в классе, но вызываться без создания экземпляра класса. То есть, если вы определяете метод bar как static в классе Foo, он может быть вызван как Foo.bar().

1 голос
/ 09 января 2010

Да, это правильно. Java строго ООП.

0 голосов
/ 09 января 2010

Да, вы можете создавать статические функции, например, методы, но тогда вам придется жестко кодировать вызовы к ним. Чтобы выбрать обратный вызов во время выполнения, вы должны создать интерфейс (не указатель функции, процедурный тип или делегат), а затем создать фиктивный класс (хотя, возможно, анонимный) для его «реализации». Наслаждайся работой!

Или наслаждайтесь юмористическим сытизом: http://steve -yegge.blogspot.com / 2006/03 / выполнение-в-царстве-оф-nouns.html

0 голосов
/ 09 января 2010

В мире Java все функции должны быть объявлены внутри класса, несмотря ни на что. Добро пожаловать в мир OO =)

0 голосов
/ 09 января 2010

Не хорошо джайв хорошо, ООП. Вы все еще можете определить публичный статический метод и вызывать его из любого места, как уже упоминали другие.

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