Вопрос-ответ

What is the difference between a static method and a non-static method?

В чем разница между статическим методом и нестатическим методом?

Смотрите фрагменты кода ниже:

Код 1

public class A {
static int add(int i, int j) {
return(i + j);
}
}

public class B extends A {
public static void main(String args[]) {
short s = 9;
System.out.println(add(s, 6));
}
}

Код 2

public class A {
int add(int i, int j) {
return(i + j);
}
}

public class B extends A {
public static void main(String args[]) {
A a = new A();
short s = 9;
System.out.println(a.add(s, 6));
}
}

В чем разница между этими фрагментами кода? Оба выводятся 15 в качестве ответа.

Переведено автоматически
Ответ 1

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

Пример:

class Foo {
int i;

public Foo(int i) {
this.i = i;
}

public static String method1() {
return "An example string that doesn't depend on i (an instance variable)";
}

public int method2() {
return this.i + 1; // Depends on i
}
}

Вы можете вызывать статические методы следующим образом: Foo.method1(). Если вы попробуете это с method2, это завершится неудачей. Но это сработает: Foo bar = new Foo(1); bar.method2();

Ответ 2

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

MyClass.myMethod();
this.myMethod();
myMethod();

Нестатические методы используются, если вы собираетесь использовать свой метод для создания нескольких копий. Например, если вы хотите загрузить данные о погоде из Бостона, Майами и Лос-Анджелеса, и если вы можете сделать это из своего метода без индивидуальной настройки кода для каждого отдельного местоположения, вы получаете доступ к методу нестатически:

MyClass boston = new MyClassConstructor(); 
boston.myMethod("bostonURL");

MyClass miami = new MyClassConstructor();
miami.myMethod("miamiURL");

MyClass losAngeles = new MyClassConstructor();
losAngeles.myMethod("losAngelesURL");

В приведенном выше примере Java создает три отдельных объекта и ячейки памяти из одного и того же метода, к которым вы можете получить индивидуальный доступ по ссылке "бостон", "майами" или "Лос-Анджелес". Вы не можете получить доступ ни к одному из вышеперечисленных статически, потому что MyClass.myMethod(); это общая ссылка на метод, а не на отдельные объекты, созданные нестатической ссылкой.

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

Ответ 3

Общие сведения

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

ClassName.methodname()

Нестатический: нам нужно создать объект типа

ClassName obj=new ClassName()
obj.methodname();
Ответ 4

Статический метод принадлежит классу, а нестатический метод принадлежит объекту класса. То есть нестатический метод может быть вызван только для объекта класса, к которому он принадлежит. Однако статический метод может вызываться как для класса, так и для объекта класса. Статический метод может обращаться только к статическим членам. Нестатический метод может обращаться как к статическим, так и к нестатическим членам, потому что во время вызова статического метода экземпляр класса может не создаваться (если он вызывается в самом классе). В другом случае нестатический метод может быть вызван только тогда, когда экземпляр класса уже создан. Статический метод является общим для всех экземпляров класса. Это некоторые из основных различий. Я также хотел бы указать на часто игнорируемое различие в этом контексте. Всякий раз, когда метод вызывается в C ++ / Java / C #, неявный аргумент (ссылка 'this') передается вместе с другими параметрами или без них. В случае вызова статического метода ссылка 'this' не передается, поскольку статические методы принадлежат классу и, следовательно, не имеют ссылки 'this'.


Ссылка:Статические методы против нестатических

java