Вопрос по non-static, static-methods, static, java – Разница между статическими методами и методами экземпляров

71

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

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

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

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

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".

Ваш Ответ

10   ответов
2

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

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

1

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

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

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

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

0

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.

-2

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

Нет, это неверно Только переменные копируются.
1

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

Myclass.get();

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

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

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

4

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

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

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

4
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

124

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

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

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

MyClass.staticMethod();//Simply refers to the class's static code

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

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

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

Большое спасибо за примеры кода, они выглядят знакомо, так что теперь я понимаю Panthy
да, "не меняйся" & GT; & GT; я имел в виду не может быть создан экземпляр !!
@ user2416728 Ваш комментарий очень запутан. Статические поляcan быть изменен, но их область действия является глобальной для их среды выполнения. Следовательно, любой код, имеющий доступ к указанному полю, имеет доступ к тем же данным. Это не эквивалентно тому, что эти данные остаются постоянными (если не используется модификатор 'final').
@Rohan Еще один хороший способ взглянуть на это - что-нибудьstatic(класс, метод или поле) на самом деле не принадлежит ни к чему, он просто висит в классе для организационных целей.
кроме того, статические поля используются в качестве объектов данных (тот, который содержит данные и, следовательно, не может измениться, но вы можете манипулировать данными внутри него.). Статические методы можно вызывать только для статических полей, и отныне они сохраняют одно и то же представление о том, чтобы оставаться постоянным или не изменять или не экземпляр !!
14

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

for example:

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

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

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

Похожие вопросы