Разница между статическими методами и методами экземпляров
==========================================================

Я просто перечитывал текст, данный мне в моем учебнике, и я не совсем уверен, что понимаю, о чем он говорит. Это в основном говорит мне, что статические методы или методы класса включают в себя «модификатор» ключевое слово статическое. Но я действительно не знаю, что это значит?

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

Кроме того, могу ли я получить простое объяснение, что такое методы экземпляра?

Вот что они дают мне в учебнике:

There are important practical implications of the presence or absence of the static modifier. A public class method may be invoked and executed as soon as Java processes the definition of the class to which it belongs. That is not the case for an instance method. Before a public instance method may be invoked and executed, an instance must be created of the class to which it belongs. To use a public class method, you just need the class. On the other hand, before you can use a public instance method you must have an instance of the class.

The manner in which a static method is invoked within the definition of another method varies according to whether or not the two methods belong to the same class. In the example above, factorial and main are both methods of the MainClass class. As a result, the invocation of factorial in the definition of main simply references the method name, "factorial".

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

Однако все объекты определенного типа могут иметь поведение, которое вообще не зависит от переменных-членов; эти методы лучше всего сделать статичными. Будучи статическим, экземпляр класса не требуется для запуска метода.

Вы можете сделать это для выполнения статического метода:

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

На более глубоком уровне, когда компилятор объединяет класс, он содержит несколько указателей на методы. Когда эти методы выполняются, он следует указателям и выполняет код на дальнем конце. Если создается экземпляр класса, созданный объект содержит указатель на «таблицу виртуальных методов», который указывает на методы, которые должны быть вызваны для этого конкретного класса в иерархии наследования. Однако, если метод является статическим, нет «таблицы виртуальных методов». необходимо: все вызовы этого метода отправляются в одно и то же место в памяти, чтобы выполнить один и тот же код. По этой причине в высокопроизводительных системах лучше использовать статический метод, если вы не зависите от переменных экземпляра.



 которые не объявлены как статические, называются методами экземпляра и переменными экземпляра. Чтобы сослаться на методы и переменные экземпляра, вы должны сначала создать экземпляр класса. Это означает, что вы должны сначала создать объект этого класса. Для статических данных вам не нужно создавать экземпляр класса. Вы можете обращаться к методам и переменным с именем класса, используя знак точки который в (.)

**for example:**

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



**Instance method vs Static method**

Instance method can access the instance methods and instance
variables directly.

Instance method can access static variables and static methods
 directly.

Static methods can access the static variables and static methods
 directly.

Static methods can’t access instance methods and instance variables
 directly. They must use reference to object. And static method can’t
 use this keyword as there is no instance for ‘this’ to refer to.



ьзовать какие-либо переменные экземпляра.

Вы хотите вызвать метод без экземпляра.

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

Служебные функции являются хорошим примером статических методов. т.е. math.pow (), эта функция не собирается изменять состояние для разных значений. Так что это статично.



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



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

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

В приведенном выше примере, когда вы вызываете add () как:

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



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

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



 помещенный перед функцией, подразумевает, что существует только одна копия этой функции. Если модификатор static не помещен перед функцией, то для каждого объекта или экземпляра этого класса создается новая копия этой функции. :)
То же самое в случае с переменными.



**Instance methods** = & GT; вызывается на конкретном экземпляре определенного класса.. Как это происходит, есть невидимый параметр, называемый «это». Внутри «это» у нас есть члены класса экземпляра, уже установленные со значениями. & APOS; Это & APOS; не является переменной Это значение, вы не можете его изменить, и это значение является ссылкой на получателя вызова.
**Ex:** Вы вызываете ремонтников (метод экземпляра), чтобы починить телевизор (актуальная программа). Он поставляется с инструментами («этот» параметр). Он поставляется с определенными инструментами, необходимыми для ремонта телевизора, и он может исправить другие вещи.

В**static methods** = & GT; не существует такого понятия, как «это».
**Ex:** Тот же ремонтник (статический метод). Когда вы звоните ему, вы должны указать, к какому ремонтнику обращаться (например, к электрику). И он придет и починит только ваш телевизор. Но у него нет инструментов для исправления других вещей (нет «этого» параметра).

**Static methods** обычно полезны для операций, для которых не требуются какие-либо данные из экземпляра класса (из «this») и могут выполнять свое предназначение исключительно с использованием своих аргументов.



Difference between Static methods and Instance methods

 created before it can be called. Static methods are the methods in Java that can be called without creating an object of class.

Static method is declared with static keyword. Instance method is not with static keyword.

Static method means which will exist as a single copy for a class. But instance methods exist as multiple copies depending on the number of instances created for that class. 

Static methods can be invoked by using class reference. Instance or non static methods are invoked by using object reference. 

Static methods can’t access instance methods and instance variables directly. Instance method can access static variables and static methods directly.

Ссылка :[geeksforgeeks](http://www.geeksforgeeks.org/static-methods-vs-instance-methods-java/)