web-dev-qa-db-fra.com

Différence entre les méthodes statiques et les méthodes d'instance

Je viens de lire le texte qui m'a été donné dans mon manuel et je ne suis pas vraiment sûr de comprendre ce qu'il dit. En gros, cela me dit que les méthodes statiques ou les méthodes de classe incluent le mot clé "modificateur" statique. Mais je ne sais pas vraiment ce que cela signifie?

Quelqu'un pourrait-il m'expliquer en termes très simples ce que sont les méthodes statiques ou de classe?

Aussi, pourrais-je avoir une explication simple sur les méthodes d'instance?

Voici ce qu'ils me donnent dans le manuel:

La présence ou l’absence du modificateur statique a des implications pratiques importantes. Une méthode de classe publique peut être invoquée et exécutée dès que Java traite la définition de la classe à laquelle elle appartient. Ce n'est pas le cas pour une méthode d'instance. Avant qu'une méthode d'instance publique puisse être invoquée et exécutée, une instance de la classe à laquelle elle appartient doit être créée. Pour utiliser une méthode de classe publique, vous avez simplement besoin de la classe. Par contre, avant de pouvoir utiliser une méthode d'instance publique, vous devez avoir une instance de la classe.

La manière dont une méthode statique est invoquée dans la définition d'une autre méthode varie selon que les deux méthodes appartiennent ou non à la même classe. Dans l'exemple ci-dessus, factorielle et principale sont les deux méthodes de la classe MainClass. En conséquence, l’invocation de factoriel dans la définition de main fait simplement référence au nom de la méthode, "factorial".

68
Panthy

Le paradigme de base en Java est que vous écrivez des classes et que ces classes sont instanciées. Les objets instanciés (une instance d'une classe) sont associés à des attributs (variables membres) qui affectent leur comportement; lorsque l'instance a sa méthode exécutée, il fera référence à ces variables.

Cependant, tous les objets d'un type particulier peuvent avoir un comportement qui ne dépend pas du tout de variables membres; ces méthodes sont mieux rendues statiques. En étant statique, aucune instance de la classe n'est requise pour exécuter la méthode.

Vous pouvez le faire pour exécuter une méthode statique:

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

Mais pour exécuter une méthode non statique, vous devez faire ceci:

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

À un niveau plus profond, lorsque le compilateur assemble une classe, il contient plusieurs pointeurs sur des méthodes. Lorsque ces méthodes sont exécutées, elles suivent les pointeurs et exécutent le code à l'extrémité distante. Si une classe est instanciée, l'objet créé contient un pointeur sur la "table de méthodes virtuelles", qui pointe vers les méthodes à appeler pour cette classe particulière dans la hiérarchie d'héritage. Toutefois, si la méthode est statique, aucune "table de méthode virtuelle" n'est nécessaire: tous les appels de cette méthode sont placés exactement au même endroit en mémoire pour exécuter exactement le même code. Pour cette raison, dans les systèmes hautes performances, il est préférable d'utiliser une méthode statique si vous ne comptez pas sur des variables d'instance.

123
Nathaniel Ford

Les méthodes et les variables qui ne sont pas déclarées statiques sont appelées méthodes d'instance et variables d'instance. Pour faire référence à des méthodes d'instance et à des variables, vous devez instancier la classe. Tout d'abord, vous devez créer un objet de cette classe. lequel est dedans (.)

par exemple:

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

pour les méthodes non statiques, vous devez instancier la classe.

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

Méthodes statiques, les variables appartiennent à la classe entière, pas seulement à une instance d'objet. Une méthode statique, variable est associée à la classe dans son ensemble plutôt qu'à des occurrences spécifiques d'une classe. Chaque objet partagera une copie commune des méthodes statiques, variables. Il n’existe qu’une copie par classe, quel que soit le nombre d’objets créés.

7
Paulius Matulionis

Méthodes d'instance => invoquées sur une instance spécifique d'une classe spécifique. Method veut savoir sur quelle classe il a été appelé. La façon dont cela se passe est un paramètre invisible appelé «ceci». À l'intérieur de 'ceci' nous avons des membres de la classe d'instance déjà définis avec des valeurs. 'This' n'est pas une variable. C'est une valeur, vous ne pouvez pas la changer et la valeur est une référence au destinataire de l'appel . Ex: Vous appelez réparateurs (méthode de l'instance) pour réparer votre téléviseur (programme réel). Il vient avec des outils (paramètre 'this'). Il vient avec des outils spécifiques nécessaires pour réparer la télévision et il peut également régler d'autres problèmes.

Dans méthodes statiques => il n'y a rien de tel que 'this'. Ex: Le même réparateur (méthode statique). Lorsque vous l'appelez, vous devez spécifier le réparateur à appeler (comme un électricien). Et il viendra réparer votre téléviseur seulement. Mais, il n'a pas d'outils pour résoudre d'autres problèmes (il n'y a pas de paramètre 'this'). 

Les méthodes statiques sont généralement utiles pour les opérations ne nécessitant aucune donnée d'une instance de la classe (à partir de 'this') et pouvant remplir leur fonction à l'aide de leurs arguments uniquement.

4
Eldiyar Talantbek

Différence entre les méthodes statiques et les méthodes d'instance

  1. Les méthodes d'instance sont des méthodes qui nécessitent la création d'un objet de sa classe avant de pouvoir l'appeler. Les méthodes statiques sont les méthodes en Java qui peuvent être appelées sans créer d'objet de classe.

  2. La méthode statique est déclarée avec le mot clé static. La méthode d'instance n'est pas avec un mot clé statique.

  3. Méthode statique signifie qu'il existe une seule copie pour une classe. Cependant, les méthodes d'instance existent sous forme de copies multiples en fonction du nombre d'instances créées pour cette classe. 

  4. Les méthodes statiques peuvent être appelées à l'aide de la référence de classe. Les méthodes d'instance ou non statiques sont appelées à l'aide de la référence d'objet. 

  5. Les méthodes statiques ne peuvent pas accéder directement aux méthodes d’instance et aux variables d’instance. La méthode d'instance peut accéder directement aux variables statiques et aux méthodes statiques.

Référence: geeksforgeeks

4
rashedcs

En bref, les méthodes statiques et les variables statiques sont au niveau de la classe, tandis que les méthodes et les variables d'instance sont au niveau de l'instance ou de l'objet.

Cela signifie que chaque fois qu'une instance ou un objet (à l'aide de new ClassName ()) est créé, cet objet conserve sa propre copie des variables d'instace. Si vous avez cinq objets différents de la même classe, vous aurez cinq copies différentes des variables d'instance. Mais les variables et méthodes statiques seront les mêmes pour ces cinq objets. Si vous avez besoin que quelque chose de commun soit utilisé par chaque objet créé, rendez-le statique. Si vous avez besoin d'une méthode qui n'a pas besoin de données spécifiques à un objet pour fonctionner, rendez-la statique. La méthode statique ne fonctionnera qu'avec des variables statiques ou renverra des données sur la base des arguments passés.

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);
    }
}

Dans l'exemple ci-dessus, lorsque vous appelez add () en tant que:

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
    }
}

En première classe, add () retournera la somme des données passées par un objet spécifique. Mais la méthode statique peut être utilisée pour obtenir la somme de toute classe non indépendante s'il s'agit d'une instance ou d'un objet spécifique. Par conséquent, les méthodes génériques ne nécessitant que des arguments peuvent être statiques afin de les conserver toutes au sec.

2
Prakash

Le comportement d'un objet dépend des variables et des méthodes de cette classe. Lorsque nous créons une classe, nous créons un objet pour elle. Pour les méthodes statiques, nous n'en avons pas besoin, car tous les objets auront la même copie, il n'est donc pas nécessaire de disposer d'un objet.

Myclass.get();

Dans la méthode d'instance, chaque objet aura un comportement différent et doit donc appeler la méthode à l'aide de l'instance d'objet .

Myclass x = new Myclass();
x.get();
1
Vishal Patil

Si l'état d'une méthode n'est pas censé être modifié ou si aucune variable d'instance ne sera utilisée.

Vous voulez appeler une méthode sans instance.

Si cela ne fonctionne que sur les arguments qui lui sont fournis.

Les fonctions utilitaires sont une bonne instance des méthodes statiques. c'est-à-dire math.pow (), cette fonction ne changera pas l'état pour des valeurs différentes. Donc, c'est statique.

1
Suketu

Méthode d'instance vs Méthode statique

  1. La méthode d'instance peut accéder directement aux méthodes d'instance et aux variables d'instance

  2. La méthode d'instance peut accéder aux variables statiques et aux méthodes statiques directement.

  3. Les méthodes statiques peuvent accéder aux variables statiques et aux méthodes statiques directement.

  4. Les méthodes statiques ne peuvent pas accéder aux méthodes d’instance ni aux variables d’instance directement. Ils doivent utiliser une référence à un objet. Et la méthode statique ne peut pas utilisez ce mot-clé, car il n’ya pas d’instance à laquelle il est fait référence.

0
param