2015-08-14 3 views
-1

Иногда мы называем className.methodName() без создания объекта для него, я имею в виду, не используя синтаксис className objectName = new constructor(), а затем вызвать в качестве object.methodName()Почему мы не создаем объект для статического метода в java?

  1. Когда использовать className.methodName()?
  2. Когда вызывать метод, используя объект как object.methodName()?

Объяснение вышеуказанных двух случаев с примером будет оценено.

+2

Я предполагаю, что вы имеете в виду метод 'static'. Рассмотрите возможность взглянуть на [Общие сведения о членах класса] (https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) – MadProgrammer

+0

Google «java static methods» – immibis

+0

Вы пытались хотя бы раз искать по Google о вашем вопросе? Если бы вы попробовали это, вы бы сэкономили время, чтобы ввести вопрос. –

ответ

0

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

+2

Статические методы на самом деле * не * вызывают на объектах класса ... – immibis

+0

@immibis - Я хотел сказать, что статические методы загружаются на основе метаданных, полученных из этих объектов – TheLostMind

1

Что вы имеете в виду, это метод static.

Предположим, что у меня есть это:

public class A { 

    public static void foo(){ 
     System.out.println("Hooray! I work!"); 
    } 

} 

Теперь вы можете сделать это где-нибудь еще в любом другом классе:

A.foo(); 

Это происходит потому, что метод является статическим, что означает, что это может быть вызываемый КЛАССОМ. Это означает, что для вызова метода не требуется экземпляр этого класса.

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

A a = new A(); 
a.foo(); 

Но так как метод foo() является статическим, инстанцировании объект A не требуется для того, чтобы запустить метод foo().

2

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

public class Checker { 
     public static Boolean month(int value) { 
      return (value >= 1 && value <= 12); 
     } 
    } 

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

Второй. Когда вы создаете объект, объект хранится в памяти, и вы получаете ссылку на него. Затем объект можно использовать, например, для сохранения в списке. Метод на этом объекте специфичен. Вы можете сохранить данные класса и выполнить определенную операцию с членом этого класса. Например:

List<Animals> animalsList = new ArrayList<>(); 
Animal animal = new Animal("dog"); 
int legs = animal.getCountLegs(); // specific function for object 
animalList.add(animal); //save if you need 
// use list of object 
0

Там ничем не отличается от 1 до 2 точки, потому что в процессе компиляции компилятор делает ClassName.staticMethod() вместо instance.staticMethod().

0

Статические методы в java относятся к классу (а не к экземпляру). Они не используют переменные экземпляра и обычно принимают входные данные из параметров, выполняют действия над ним, а затем возвращают некоторый результат. Методы экземпляров связаны с объектами и, как следует из названия, могут использовать переменные экземпляра.