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


88

J'étais en train de lire le texte qui m'était donné dans mon manuel et je ne suis pas vraiment sûr de comprendre ce qu'il dit. Cela me dit essentiellement que les méthodes statiques ou les méthodes de classe incluent le mot-clé "modificateur" static. Mais je ne sais pas vraiment ce que ça veut dire?

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

Aussi, pourrais-je obtenir une explication simple sur ce que sont les méthodes d'instance?

Voici ce qu'ils me donnent dans le manuel:

Il y a des implications pratiques importantes de la présence ou de l'absence du modificateur statique. Une méthode de classe publique peut être appelé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 appelée et exécutée, une instance doit être créée de la classe à laquelle elle appartient. Pour utiliser une méthode de classe publique, vous avez juste besoin de la classe. D'autre part, 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 appelé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, factorial et main sont 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".

Réponses:


161

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) ont des attributs qui leur sont associés (variables membres) qui affectent leur comportement; lorsque l'instance aura sa méthode exécutée, elle se référera à ces variables.

Cependant, tous les objets d'un type particulier peuvent avoir un comportement qui ne dépend pas du tout des variables membres; il vaut mieux rendre ces méthodes 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 vers des méthodes. Lorsque ces méthodes sont exécutées, elle suit les pointeurs et exécute le code à l'extrémité distante. Si une classe est instanciée, l'objet créé contient un pointeur vers la "table des méthodes virtuelles", qui pointe vers les méthodes à appeler pour cette classe particulière dans la hiérarchie d'héritage. Cependant, si la méthode est statique, aucune "table de méthode virtuelle" n'est nécessaire: tous les appels à cette méthode vont 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 dépendez pas des variables d'instance.


2
merci beaucoup pour les exemples de code qu'ils semblent familiers alors je comprends maintenant
Panthy

4
@Rohan Une autre bonne façon de voir les choses est que quoi que ce soit static(une classe, une méthode ou un champ) n'appartient vraiment à rien, il traîne juste dans la classe à des fins d'organisation.
gobernador

1
en outre, les champs statiques sont utilisés comme objets de données (un qui contient les données et donc ne peut pas changer mais vous pouvez manipuler les données à l'intérieur.). Les méthodes statiques ne peuvent être appelées que sur des champs statiques et portent désormais la même notion de rester constant ou de ne pas changer ou ne pas instancier !!
user2416728

1
@ user2416728 Votre commentaire est très confus. Les champs statiques peuvent être modifiés, mais leur portée est globale par rapport à leur environnement d'exécution. Par conséquent, tout code ayant accès audit champ a accès aux mêmes données. Cela n'équivaut pas à ce que les données restent constantes (sauf si un modificateur «final» est utilisé).
Nathaniel Ford

2
aye, "ne pas changer" >> je voulais dire ne peut pas être instancié !!
user2416728

19

Les méthodes et les variables qui ne sont pas déclarées comme statiques sont appelées méthodes d'instance et variables d'instance. Pour faire référence aux méthodes et aux variables d'instance, vous devez d'abord instancier la classe, ce qui signifie que vous devez d'abord créer un objet de cette classe.Pour les statiques, vous n'avez pas besoin d'instancier la classe, vous pouvez accéder aux méthodes et aux variables avec le nom de la classe en utilisant le signe de période lequel est dedans (.)

par exemple:

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

pour une méthode non statique, vous devez instancier la classe.

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

8

Méthodes statiques, les variables appartiennent à toute la classe, pas seulement à une instance d'objet. Méthode statique, variable est associée à la classe dans son ensemble plutôt qu'à des instances spécifiques d'une classe. Chaque objet partagera une copie commune des méthodes statiques, des variables. Il n'y a qu'une seule copie par classe, quel que soit le nombre d'objets créés à partir de celle-ci.


8

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 être appelé. 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 qui existera comme une seule copie pour une classe. Mais 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 d'une référence de classe. Les méthodes d'instance ou non statiques sont appelées à l'aide d'une 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

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

Dans les méthodes statiques => il n'y a pas de «ceci». Ex: le même réparateur (méthode statique). Lorsque vous l'appelez, vous devez spécifier quel réparateur appeler (comme un électricien). Et il viendra réparer votre téléviseur uniquement. Mais, il n'a pas d'outils pour corriger d'autres choses (il n'y a pas de paramètre «this»).

Les méthodes statiques sont généralement utiles pour les opérations qui ne nécessitent aucune donnée d'une instance de la classe (à partir de «this») et peuvent exécuter leur objectif en utilisant uniquement leurs arguments.


2

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 les méthodes statiques signifient que tous les objets auront la même copie, donc il n'y a pas besoin d'un objet. par exemple:

Myclass.get();

Dans la méthode d'instance, chaque objet aura un comportement différent et devra donc appeler la méthode en utilisant l'instance d'objet. par exemple:

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

1

Si l'état d'une méthode n'est pas censé être changé ou qu'elle n'utilisera aucune variable d'instance.

Vous voulez appeler la méthode sans instance.

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

Les fonctions utilitaires sont un bon exemple de méthodes statiques. ie math.pow (), cette fonction ne va pas changer l'état pour différentes valeurs. C'est donc statique.


1

En bref, les méthodes statiques et les variables statiques sont au niveau de la classe alors que les méthodes d'instance 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 (en utilisant new ClassName ()) est créé, cet objet conservera sa propre copie des variables 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 de quelque chose de commun à utiliser par chaque objet créé, rendez-le statique. Si vous avez besoin d'une méthode qui n'aura pas besoin de données spécifiques à un objet pour fonctionner, rendez-la statique. La méthode statique ne fonctionnera qu'avec une variable statique ou retournera 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 () comme:

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 n'importe quelle classe non indépendante de toute instance ou objet spécifique. Par conséquent, pour les méthodes génériques qui n'ont besoin que d'arguments pour fonctionner, elles peuvent être rendues statiques pour que tout reste SEC.


0

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 directement aux variables statiques et aux méthodes statiques.

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

  4. Les méthodes statiques ne peuvent pas accéder directement aux méthodes d'instance et aux variables d'instance. Ils doivent utiliser la référence à l'objet. Et la méthode statique ne peut pas utiliser ce mot-clé car il n'y a pas d'instance à laquelle faire référence.


-2

Le modificateur statique placé devant une fonction implique qu'une seule copie de cette fonction existe. Si le modificateur statique n'est pas placé devant la fonction, une nouvelle copie de cette fonction est effectuée avec chaque objet ou instance de cette classe. :) Il en va de même pour les variables.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.