Я просто читал текст, данный мне в моем учебнике, и не совсем уверен, что понимаю, о чем он говорит. По сути, он говорит мне, что статические методы или методы класса включают ключевое слово «модификатор» static. Но я действительно не знаю, что это значит?
Может ли кто-нибудь объяснить мне действительно простыми словами, что такое статические или классовые методы?
Кроме того, могу ли я получить простое объяснение того, что такое методы экземпляра?
Вот что мне дают в учебнике:
Наличие или отсутствие модификатора static имеет важные практические последствия. Метод открытого класса может быть вызван и выполнен, как только Java обработает определение класса, которому он принадлежит. Это не относится к методу экземпляра. Прежде чем метод общедоступного экземпляра может быть вызван и выполнен, необходимо создать экземпляр того класса, к которому он принадлежит. Чтобы использовать метод открытого класса, вам просто нужен класс. С другой стороны, прежде чем вы сможете использовать метод общедоступного экземпляра, у вас должен быть экземпляр класса.
Способ, которым статический метод вызывается в определении другого метода, зависит от того, принадлежат ли два метода к одному и тому же классу. В приведенном выше примере factorial и main являются методами класса MainClass. В результате вызов factorial в определении main просто ссылается на имя метода «factorial».
источник
static
(класс, метод или поле) на самом деле ни к чему не принадлежит, оно просто висит в классе для организационных целей.Методы и переменные, которые не объявлены как статические, известны как методы экземпляра и переменные экземпляра. Чтобы ссылаться на методы и переменные экземпляра, вы должны сначала создать экземпляр класса, что означает, что вы должны сначала создать объект этого класса. Для статического вам не нужно создавать экземпляр класса u может получить доступ к методам и переменным с именем класса, используя знак точки который в (.)
например:
Person.staticMethod(); //accessing static method.
для нестатического метода вы должны создать экземпляр класса.
Person person1 = new Person(); //instantiating person1.nonStaticMethod(); //accessing non-static method.
источник
Статические методы, переменные принадлежат всему классу, а не только экземпляру объекта. Статический метод, переменная связана с классом в целом, а не с конкретными экземплярами класса. Каждый объект будет иметь общую копию статических методов, переменных. Для каждого класса существует только одна копия, независимо от того, сколько объектов из него создано.
источник
Разница между статическими методами и методами экземпляра
Метод экземпляра - это методы, которые требуют создания объекта его класса перед его вызовом. Статические методы - это методы в Java, которые можно вызывать без создания объекта класса.
Статический метод объявлен с помощью ключевого слова static. Метод экземпляра не имеет статического ключевого слова.
Статический метод означает, что он будет существовать как единственная копия для класса. Но методы экземпляров существуют в виде нескольких копий в зависимости от количества экземпляров, созданных для этого класса.
Статические методы можно вызывать, используя ссылку на класс. Экземплярные или нестатические методы вызываются с помощью ссылки на объект.
Статические методы не могут напрямую обращаться к методам экземпляра и переменным экземпляра. Метод экземпляра может напрямую обращаться к статическим переменным и статическим методам.
Ссылка: geeksforgeeks
источник
Методы экземпляра => вызываются для конкретного экземпляра определенного класса. Метод хочет знать, для какого класса он был вызван. Как это происходит, есть невидимый параметр, называемый «это». Внутри this у нас есть члены класса экземпляра, уже установленные со значениями. «Это» не переменная. Это значение, вы не можете его изменить, и это значение относится к получателю вызова. Пример: вы вызываете ремонтников (метод экземпляра), чтобы починить ваш телевизор (актуальную программу). Он идет с инструментами (параметр «это»). У него есть специальные инструменты, необходимые для ремонта телевизора, и он может исправить и другие вещи.
В статических методах => нет такого понятия, как «это». Пример: Тот же ремонтник (статический метод). При звонке ему необходимо указать, к какому мастеру обращаться (например, к электрику). И он только придет и починит твой телевизор. Но у него нет инструментов для исправления других вещей (нет параметра this).
Статические методы обычно полезны для операций, которые не требуют каких-либо данных от экземпляра класса (от this) и могут выполнять свое прямое назначение, используя только свои аргументы.
источник
Поведение объекта зависит от переменных и методов этого класса. Когда мы создаем класс, мы создаем для него объект. Для статических методов они не требуются, поскольку статические методы означают, что все объекты будут иметь одну и ту же копию, поэтому в объекте нет необходимости. например:
В методе экземпляра каждый объект будет иметь разное поведение, поэтому они должны вызывать метод, используя экземпляр объекта. например:
Myclass x = new Myclass(); x.get();
источник
Если состояние метода не предполагается изменять или он не будет использовать какие-либо переменные экземпляра.
Вы хотите вызвать метод без экземпляра.
Если он работает только с предоставленными ему аргументами.
Служебные функции - хороший пример статических методов. т.е. math.pow (), эта функция не будет изменять состояние для разных значений. Так что это статично.
источник
Короче говоря, статические методы и статические переменные - это уровень класса, тогда как методы экземпляра и переменные экземпляра - это уровень экземпляра или объекта.
Это означает, что всякий раз, когда создается экземпляр или объект (с использованием new ClassName ()), этот объект будет сохранять свою собственную копию переменных instace. Если у вас есть пять разных объектов одного класса, у вас будет пять разных копий переменных экземпляра. Но статические переменные и методы будут одинаковыми для всех этих пяти объектов. Если вам нужно что-то общее для использования каждым созданным объектом, сделайте его статическим. Если вам нужен метод, для работы которого не требуются данные, специфичные для объекта, сделайте его статическим. Статический метод будет работать только со статической переменной или будет возвращать данные на основе переданных аргументов.
class A { int a; int b; public void setParameters(int a, int b){ this.a = a; this.b = b; } public int add(){ return this.a + this.b; } public static returnSum(int s1, int s2){ return (s1 + s2); } }
В приведенном выше примере, когда вы вызываете add () как:
A objA = new A(); objA.setParameters(1,2); //since it is instance method, call it using object objA.add(); // returns 3 B objB = new B(); objB.setParameters(3,2); objB.add(); // returns 5 //calling static method // since it is a class level method, you can call it using class itself A.returnSum(4,6); //returns 10 class B{ int s=8; int t = 8; public addition(int s,int t){ A.returnSum(s,t);//returns 16 } }
В первом классе add () вернет сумму данных, переданных конкретным объектом. Но статический метод можно использовать для получения суммы из любого класса, не зависимого от какого-либо конкретного экземпляра или объекта. Следовательно, общие методы, которым для работы нужны только аргументы, можно сделать статическими, чтобы все было СУХИМ.
источник
Метод экземпляра против статического метода
Метод экземпляра может напрямую обращаться к методам экземпляра и переменным экземпляра.
Метод экземпляра может напрямую обращаться к статическим переменным и статическим методам.
Статические методы могут напрямую обращаться к статическим переменным и статическим методам.
Статические методы не могут напрямую обращаться к методам экземпляра и переменным экземпляра. Они должны использовать ссылку на объект. И статический метод не может использовать это ключевое слово, поскольку нет экземпляра, на который можно было бы ссылаться.
источник
При размещении модификатора static перед функцией подразумевается, что существует только одна копия этой функции. Если модификатор static не помещается перед функцией, то для каждого объекта или экземпляра этого класса создается новая копия этой функции. :) То же самое и с переменными.
источник