Différence entre les variables statiques et finales en Java
Ce tutoriel montre les différences entre les mots-clés static
et final
. Discutons des différences dans un format tabulaire et des exemples de travail.
static |
final |
---|---|
L’initialisation d’une variable statique n’est pas nécessaire lors de la déclaration. | Il est nécessaire d’initialiser une variable finale lors de sa déclaration. |
Les variables statiques peuvent être réinitialisées | Les variables finales ne peuvent pas être réinitialisées. |
Il est utilisé avec des classes statiques imbriquées, des variables, des méthodes et des blocs. | Il est utilisé avec la classe, les méthodes et les variables. |
Les méthodes statiques ne peuvent être appelées que par d’autres méthodes statiques. | Les méthodes finales ne peuvent pas être remplacées par des sous-classes. |
Variables statiques en Java
Lorsque nous créons une variable statique ou une méthode, elle est attachée à la classe et non à l’objet. La variable ou la méthode partagera la même référence pour l’ensemble du programme.
Le programme suivant possède une classe DummyClass
contenant une variable statique num
et une méthode statique appelée dummyMethod()
. Pour accéder à ces deux membres depuis une autre classe, on ne peut pas créer un objet de la DummyClass
car ils sont statiques.
Nous les appelons directement en utilisant le nom de la classe.
Exemple:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.num = 5;
System.out.println("Static variable value: " + DummyClass.num);
DummyClass.dummyMethod();
}
}
class DummyClass {
public static int num = 0;
public static void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
Production:
Static variable value : 5 Inside Static Dummy Method
Classe imbriquée utilisant le mot-clé static
sans référence à la classe externe. Nous pouvons créer une classe interne à l’intérieur d’une classe en utilisant le mot-clé static
.
Dans l’exemple ci-dessous, nous avons une classe DummyClass
, et à l’intérieur de celle-ci, nous créons une classe statique appelée InnerClass
, et dans cette classe, nous créons une méthode dummyMethod()
.
Maintenant dans la classe ExampleClass3
, nous obtenons la InnerClass
en utilisant DummyClass.InnerClass
et créons un objet de la classe DummyClass
et appelons la fonction dummyMethod()
.
Exemple:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.InnerClass dummyClassObj = new DummyClass.InnerClass();
dummyClassObj.dummyMethod();
}
}
class DummyClass {
static class InnerClass {
void dummyMethod() {
System.out.println("Inside Static Dummy Method Of The Inner Static Class");
}
}
}
Production:
Inside Static Dummy Method Of The Inner Static Class
Variables finales en Java
Une variable finale ne peut pas être modifiée une fois qu’elle est initialisée. L’exemple montre que si nous créons une variable finale puis essayons de la réinitialiser, nous obtenons une erreur dans la sortie.
public class ExampleClass3 {
public static void main(String[] args) {
final int num = 0;
num = 1;
}
}
Production:
java : cannot assign a value to final variable num
Une autre classe ne peut prolonger une classe final
. L’utilisation du mot-clé final
lors de la création d’une classe empêche la classe d’être héritée par une autre classe.
Exemple:
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass().dummyMethod();
}
}
final class DummyClass {
public void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod2() {
System.out.println("Inside Static Dummy Method 2");
}
}
Production:
java : cannot inherit from final com.tutorial.DummyClass
On ne peut pas redéfinir une méthode final
dans une sous-classe. Comme une classe finale, si une fonction utilise le mot-clé final
, elle ne peut pas être surchargée par ses sous-classes.
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass2().dummyMethod();
}
}
class DummyClass {
public final void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod() {
System.out.println("Inside Overridden Dummy Method");
}
}
Production:
java : dummyMethod() in com.tutorial.DummyClass2 cannot override
dummyMethod() in com.tutorial.DummyClass overridden method is final
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn