Разница между статическими методами и методами экземпляра
Я просто перечитывал текст, данный мне в учебнике, и я не совсем уверен, что понимаю, что он говорит. Это в основном говорит мне, что статические методы или методы класса включают ключевое слово" modifier " static. Но я не знаю, что это значит?
может кто-нибудь объяснить мне в очень простых терминах, что такое статические или классовые методы?
кроме того, могу ли я получить простое объяснение того, какие методы экземпляра?
Это они дают мне в учебнике:
есть важные практические последствия наличия или отсутствия модификатора static. Метод открытого класса может быть вызван и выполнен, как только Java обрабатывает определение класса, к которому он принадлежит. Это не относится к методу экземпляра. Перед вызовом и выполнением метода открытого экземпляра необходимо создать экземпляр класса, к которому он принадлежит. Чтобы использовать метод public class, вам просто нужно класс. С другой стороны, перед использованием метода public instance необходимо иметь экземпляр класса.
способ, которым статический метод вызывается в определении другого метода, зависит от того, принадлежат ли эти два метода к одному классу. В приведенном выше примере factorial и main являются методами класса MainClass. В результате вызов факториала в определении main просто ссылается на имя метода, "факторный."
10 ответов
основная парадигма в Java заключается в том, что вы пишете классы и что эти классы создаются. Экземпляры объектов (экземпляр класса) имеют связанные с ними атрибуты (переменные-члены), которые влияют на их поведение; когда экземпляр имеет свой метод, он будет ссылаться на эти переменные.
однако все объекты определенного типа могут иметь поведение, которое вообще не зависит от переменных-членов; эти методы лучше всего сделать статическими. Будучи статичным, нет экземпляр класса необходим для запуска метода.
Вы можете сделать это, чтобы выполнить статический метод:
MyObject.staticMethod();//Simply refers to the class's static code
но чтобы выполнить нестатический метод, вы должны сделать следующее:
MyObject obj = new MyObject();//Create an instance
obj.nonstaticMethod();//Refer to the instance's class's code
на более глубоком уровне, когда компилятор объединяет класс, он содержит несколько указателей на методы. Когда эти методы выполняются, он следует указателям и выполняет код в дальнем конце. Если экземпляр класса создан, созданный объект содержит указатель на " виртуальный таблица метод", который указывает на методы, вызываемые для этого конкретного класса в иерархии наследования. Однако, если метод статичен," таблица виртуальных методов " не требуется: все вызовы этого метода идут в одно и то же место в памяти для выполнения одного и того же кода. По этой причине, в высокопроизводительных системах лучше использовать статический метод, если вы не зависит от переменных экземпляра.
методы и переменные, которые не объявлены как static известны как методы экземпляра и переменные экземпляра. Чтобы ссылаться на методы и переменные экземпляра, необходимо сначала создать экземпляр класса, то есть сначала создать объект этого класса.Для статического вам не нужно создавать экземпляр класса u может получить доступ к методам и переменным с именем класса, используя знак периода, который находится в (.)
например:
Person.staticMethod(); //accessing static method.
для нестатического метода необходимо создать экземпляр класса.
Person person1 = new Person(); //instantiating
person1.nonStaticMethod(); //accessing non-static method.
статические методы, переменные принадлежат всему классу, а не только экземпляр объекта. Статический метод, переменная связана с классом в целом, а не с конкретными экземплярами класса. Каждый объект будет иметь общую копию статических методов, переменных. Существует только одна копия на класс, независимо от того, сколько объектов создается из него.
методы экземпляра => вызывается на конкретном экземпляре определенного класса. Метод хочет знать, на какой класс он был вызван. То, как это происходит, есть невидимый параметр, называемый "это". Внутри "этого" у нас есть члены класса экземпляра, уже установленные со значениями. "Это" - не переменная. Это значение, вы не можете его изменить, и значение является ссылкой на получателя вызова. Ex: вы вызываете ремонтников(метод экземпляра), чтобы исправить ваш телевизор(программа). Он поставляется с инструментами (этот параметр). Он поставляется с конкретными инструментами, необходимыми для ремонта телевизора, и он может исправить и другие вещи.
на статические методы => нет такой вещи, как "это". Ex: тот же ремонтник (статический метод). Когда вы звоните ему, вы должны указать, какому ремонтнику позвонить (например, электрику). И он придет и починит только твой телевизор. Но у него нет инструментов для исправления других вещей (нет параметра "this").
статический методы обычно полезны для операций, которые не требуют каких-либо данных из экземпляра класса (из 'this') и могут выполнять свою целевую задачу исключительно с помощью своих аргументов.
разница между статическими методами и методами экземпляра
метод экземпляра-это методы, которые требуют создания объекта своего класса перед его вызовом. Статические методы в Java, который может быть вызван без создания объекта класса.
статический метод объявлен с ключевым словом static. Метод экземпляра не имеет ключевого слова static.
статический метод означает, что он будет существовать как одна копия для класса. Но существуют методы экземпляра в нескольких экземплярах в зависимости от количества экземпляров, созданных для этого класса.
статические методы могут быть вызваны с помощью ссылки на класс. Экземпляра или статические методы вызываются с помощью ссылки на объект.
статические методы не могут напрямую обращаться к методам экземпляра и переменным экземпляра. Метод экземпляра может обращаться к статическим переменным и статическим методам непосредственно.
ссылки : geeksforgeeks
Если состояние метода не должно быть изменено или он не будет использовать какие-либо переменные экземпляра.
вы хотите вызвать метод без экземпляра.
Если он работает только с аргументами, предоставленными ему.
функции утилиты являются хорошим примером статических методов. Я. e математика.pow (), эта функция не собирается изменять состояние для разных значений. Поэтому он статичен.
поведение объекта зависит от переменных и методов данного класса. Когда мы создаем класс, мы создаем для него объект. Для статических методов мы не требуем их, поскольку статические методы означают, что все объекты будут иметь одинаковую копию, поэтому нет необходимости в объекте. е.г:
Myclass.get();
в методе экземпляра каждый объект будет иметь разное поведение, поэтому они должны вызвать метод, используя экземпляр объекта. е.г:
Myclass x = new Myclass();
x.get();
короче, статические методы и статические переменные класса, где, как методы экземпляра и переменных экземпляра экземпляр или объект.
это означает, что всякий раз, когда создается экземпляр или объект (используя 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 () возвращает сумму данных, переданных определенным объектом. Но статический метод можно использовать для получения суммы из любого класса, не независимого, если какой-либо конкретный экземпляр или объект. Следовательно, для общих методов, которым нужны только аргументы для работы, можно сделать статическими, чтобы сохранить все сухим.
метод экземпляра vs статический метод
метод экземпляра может получить доступ к методам экземпляра и экземпляра переменные напрямую.
метод экземпляра может получить доступ к статическим переменным и статическим методами непосредственно.
статические методы могут получить доступ к статическим переменным и статическим методами непосредственно.
статические методы не могут получить доступ к методам экземпляра и переменных экземпляра непосредственно. Они должны использовать ссылку на объект. И статический метод не может используйте это ключевое слово, поскольку нет экземпляра для ссылки на "это".
статический модификатор при размещении перед функцией подразумевает, что существует только одна копия этой функции. Если модификатор static не ставится перед функцией, то с каждым объектом или экземпляром класса новая копия этой функции. :) То же самое относится и к переменным.