статический метод основ Java - PullRequest
1 голос
/ 29 августа 2009

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

Ответы [ 9 ]

11 голосов
/ 29 августа 2009

абсолютно, это цель статических методов:

class ClassName {

     public static void staticMethod() {

     }
}

Чтобы вызвать статический метод, вы должны импортировать класс:

import ClassName;
// ...
ClassName.staticMethod();

или с использованием статического импорта (Java 5 или выше):

import static ClassName.staticMethod;
// ...
staticMethod();
2 голосов
/ 29 августа 2009

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

import java.util.Calendar;
public class MyClass 
{
    // the static method Calendar.getInstance() is used to create 
    // [Calendar]s--note that [Calendar]'s constructor is private
    private Calendar now = Calendar.getInstance();
}

Если вы имеете в виду, «возможно ли автоматически вызывать определенный статический метод перед инициализацией первого объекта?», См. Ниже:

public class MyClass
{
    // the static block is garanteed to be executed before the
    // first [MyClass] object is created.
    static {
        MyClass.init();
    }

    private static void init() {
        // do something ...
    }
}
2 голосов
/ 29 августа 2009

Да, именно для этого предназначены статические методы.

ClassName.staticMethodName();
1 голос
/ 29 августа 2009

Статические методы означают для вызова без создания экземпляра класса.

1 голос
/ 29 августа 2009

Да, поскольку статические методы не могут получить доступ к переменным экземпляра, поэтому все, что нужно сделать JVM - это запустить код.

0 голосов
/ 04 июля 2016

Да, это определенно возможно. Например, рассмотрим следующий пример ...

class test {
    public static void main(String arg[]) {
        System.out.println("hello");
    }
 }

... если затем мы запустим его, он выполнится, мы никогда не создали экземпляр теста класса. Короче говоря, оператор public static void main(String arg[]) означает выполнение метода main без создания экземпляра класса test.

0 голосов
/ 29 августа 2009

На самом деле существует множество «служебных классов», таких как Math, Collections, Arrays и System, которые представляют собой классы, которые не могут быть созданы, но вся цель которых состоит в предоставлении статических методы для людей.

0 голосов
/ 29 августа 2009

Вы можете не только сделать это, но и сделать это.

0 голосов
/ 29 августа 2009

Да, вы можете получить к нему доступ, написав ClassName.methodName перед созданием любого экземпляра.

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