Подтвердить что ты не робот

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

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

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

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

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

Существуют важные практические последствия наличия или отсутствия статического модификатора. Метод public class может быть вызван и выполнен, как только Java обрабатывает определение класса, к которому он принадлежит. Это не относится к методу экземпляра. Перед вызовом и выполнением метода публичного экземпляра должен быть создан экземпляр класса, к которому он принадлежит. Чтобы использовать метод открытого класса, вам просто нужен класс. С другой стороны, прежде чем вы сможете использовать метод открытого экземпляра, вы должны иметь экземпляр класса.

Способ, которым статический метод вызывается в определении другого метода, зависит от того, принадлежат ли оба метода к одному классу или нет. В приведенном выше примере факториал и main - оба метода класса MainClass. В результате, вызов факториала в определении main просто ссылается на имя метода, "факториал".

4b9b3361

Ответ 1

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

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

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

MyObject.staticMethod();//Simply refers to the class static code

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

MyObject obj = new MyObject();//Create an instance
obj.nonstaticMethod();//Refer to the instance class code

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

Ответ 2

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

, например:

Person.staticMethod();           //accessing static method.

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

Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.

Ответ 3

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

Ответ 4

Методы экземпляра = > вызывается в конкретном экземпляре определенного класса. Метод хочет знать, в каком классе он был вызван. То, как это происходит, есть невидимый параметр, называемый 'this'. Внутри 'this' у нас есть члены класса экземпляра, уже установленные со значениями. 'this' не является переменной. Это значение, вы не можете его изменить, и это значение относится к получателю вызова. Пример: Вы вызываете ремонтников (метод экземпляра), чтобы исправить ваш телевизор (фактическая программа). Он поставляется с инструментами (параметр 'this'). Он поставляется с определенными инструментами, необходимыми для установки телевизора, и он также может исправить другие вещи.

В статических методах = > нет такой вещи, как 'this'. Пример: Тот же ремонтник (статический метод). Когда вы его вызываете, вы должны указать, какой ремонтник должен позвонить (например, электрик). И он придет и исправит ваш телевизор. Но у него нет инструментов для исправления других вещей (параметр 'this' отсутствует).

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

Ответ 5

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

  • Метод экземпляра - это методы, которые требуют создания объекта его класса до его вызова. Статические методы - это методы в Java, которые можно вызывать без создания объекта класса.

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

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

  • Статические методы могут быть вызваны с помощью ссылки на класс. Экземпляры или нестатические методы вызывается с помощью ссылки на объект.

  • Статические методы напрямую влияют на методы экземпляра экземпляра и переменные экземпляра. Метод Instance может напрямую обращаться к статическим переменным и статическим методам.

Ссылка: geeksforgeeks

Ответ 6

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

Myclass.get();

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

Myclass x = new Myclass();
x.get();

Ответ 7

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

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

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

Полезные функции - хороший пример статических методов. i.e math.pow(), эта функция не изменит состояние для разных значений. Это статично.

Ответ 8

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

Ответ 9

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

Это означает, что всякий раз, когда создается экземпляр или объект (с использованием нового 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() вернет сумму данных, переданных определенным объектом. Но статический метод может использоваться для получения суммы из любого класса, не являющегося независимым, если какой-либо конкретный экземпляр или объект. Следовательно, для общих методов, которые требуют только аргументы для работы, можно сделать статическими, чтобы сохранить все СУХИЕ.