static vs. final java, beide sind bekannte Zugriffsmodifikatoren in Java, die unterschiedliche Funktionen haben (für unterschiedliche Aufgaben verwendet werden).
- static: Das Schlüsselwort static kann auf Instanzvariablen und Methoden angewendet werden, nicht aber auf Klassen. Wenn es angewendet wird, können Variablen und Methoden ohne die Hilfe eines Objekts aufgerufen werden. Wenn eine Methode oder Variable ohne Objekt aufgerufen wird, wird die Kapselung nicht aufrechterhalten. Das heißt, bei statischen Variablen und Methoden gibt es keine Kapselung.
- final: Das Schlüsselwort final kann auf alle Konstrukte – Variablen, Methoden und Klassen – angewendet werden. Wenn es angewandt wird, verhält sich final sehr unterschiedlich mit jeweils unterschiedlichen Funktionalitäten.
Lassen Sie uns static vs. final java programmatisch erkunden.
I) Verwendung des Schlüsselworts static
Generell benötigt eine Instanzvariable oder Methode ein Objekt zum Aufruf. Aber statische Variablen und Methoden benötigen kein Objekt. Beachten Sie den folgenden Code:
public class Employee{ int age = 45; // non-static variable static double salary = 8877.66; // static variable public static void display() // static method { System.out.println("Hello World"); } public static void main(String args) { // System.out.println(age); // raises error, it is non-static and requires object System.out.println(salary); // works fine as salary is static, object not required display(); // works fine as display() is static, object not required }}
Im obigen Code ist age nicht statisch und erfordert ein Objekt zum Aufruf. Beachten Sie, dass die Methode main(), deren Gehalt statisch ist, kein Objekt erfordert. Ähnlich verhält es sich mit der statischen Methode display(). Sie wird ohne ein Objekt aufgerufen.
II) Verwendung des final-Schlüsselworts
Wie bereits erwähnt, kann das final-Schlüsselwort an drei Stellen angewendet werden – Variablen, Methoden und Klassen. Wenn es angewendet wird, verhält es sich unterschiedlich.
- Eine finale Variable kann nicht neu zugewiesen werden.
- Eine finale Methode kann nicht überschrieben werden.
- Eine finale Klasse kann nicht vererbt werden.
Aber eines haben alle drei gemeinsam, „final bedeutet, dass etwas nicht getan werden kann“.
a) final bei Variablen
Eine finale Variable funktioniert wie eine Konstante von C/C++. Das heißt, eine final-Variable kann nicht neu zugewiesen werden. Java unterstützt das const-Schlüsselwort nicht und verwendet stattdessen das final-Schlüsselwort.
public class Bank{ public static void main(String args) { int rupees = 500; // non-final can be reassigned System.out.println("rupees before reassigned: " + rupees); rupees = 600; // non-final System.out.println("rupees after reassigned: " + rupees); final double $rate = 61.5; // final cannot be reassigned System.out.println("$ Rate is Rs." + $rate); // $rate = 62.8; // raises error }}
Die Variable rupees ist nicht final und wird daher mit einem neuen Wert von 600 neu zugewiesen. $rate ist final und kann daher nicht neu zugewiesen werden.
b) final bei Methoden
Wenn die Oberklasse der Unterklasse nicht erlaubt, die Methode zu überschreiben, deklariert sie sie einfach als final. Die finalen Methoden der Oberklasse können von der Unterklasse nicht überschrieben werden.
class Manager{ public final void doSomeThing() // observe final { System.out.println("Do it right now"); }}public class Worker extends Manager{ public static void main(String args) { Worker w1 = new Worker(); w1.doSomeThing(); }}
In der Oberklasse Manager wird doSomeThing() als final deklariert. Die Unterklasse Worker darf sie nicht überschreiben. Wenn man es einmal versucht, wird ein Kompilierungsfehler ausgelöst. Wenn die Oberklasse nicht-finale Methoden hat (im Code nicht gezeigt), kann die Unterklasse nach Belieben überschreiben.
c) final mit Klassen
Der Programmierer möchte vielleicht nicht, dass eine Klasse von anderen Klassen geerbt wird, weil er den Zugriff durch Komposition und nicht durch Vererbung ermöglichen möchte.
final class Fruit // observe, final class{ String nature = "Seedless";}public class Mango // extends Fruit raises compilation error{ public static void main(String args) { Fruit f1 = new Fruit(); System.out.println("Fruit type is " + f1.nature); }}
Im obigen Code ist Fruit als final deklariert und kann daher von Mango nicht erweitert werden. Wie kann es dann die Methoden der Klasse Fruit nutzen? Ganz einfach, indem es ein Objekt der Klasse Fruit erzeugt und die Methoden der Klasse Fruit aufruft. Dies wird als Komposition bezeichnet.
Was ist Komposition in Java?
Das Erzeugen eines Objekts einer anderen Klasse in unserer Klasse und das Aufrufen von Variablen und Methoden der anderen Klasse wird als Komposition bezeichnet (bekannt als has-a-Beziehung, da eine Klasse ein Objekt der anderen Klasse „hat“). Hier gehören Objekt und Methode oder Variable zur selben Klasse. Im Gegensatz dazu gehört bei der Vererbung das Objekt zur Unterklasse und die Variable oder Methode zur Oberklasse.
Alle Java-Unterschiede zu 90 Themen anzeigen