I Java är en konstruktor inte tillåten att vara abstrakt, slutgiltig, statisk, infödd eller strictfp. Så det finns ingen statisk konstruktör i Java .
En statisk konstruktor som används för att initiera statisk data betyder att den angivna uppgiften endast kommer att köras en gång genom hela programmet. Vanligtvis anropas en statisk konstruktor automatiskt när den första instansen genereras, eller så hänvisas till någon statisk medlem. Den statiska konstruktorn deklareras explicit genom att använda ett statiskt nyckelord. Den statiska konstruktorn är dock inte tillåten i Java.
Viktig
Några nyckelfunktioner hos den statiska konstruktorn är följande:
- Det kommer inte att ta parametrar eller åtkomstmodifierare.
- En specifik klass kan bara ha en statisk konstruktor.
- Det tillåter inte arv eller överbelastning.
- Den anropas automatiskt, kan inte anropas direkt eller explicit.
- Om värdet på statiska fält inte initieras, initieras det till standardvärden.
Låt oss förstå varför den statiska konstruktorn inte är tillåten i Java:
Vad händer om vi deklarerar en statisk konstruktör?
En statisk konstruktor är inte tillåten i Java programmering . Det är olagligt och mot Java-standarderna att använda en statisk konstruktor. Så, Java-programmet kommer inte att kompileras och ger ett kompileringsfel.
Låt oss förstå det med ett exempel. Tänk på exemplet nedan:
maskinskrivet datum
StaticConstructorDemo.java:
public class StaticConstructorDemo { //Declaring a static constructor public static StaticConstructorDemo() { System.out.println('Static Constructor of the class'); } public static void main(String args[]) { // Creating a constructor object to invoke it StaticConstructorDemo obj = new StaticConstructorDemo(); } }
Produktion:
Exception in thread 'main' java.lang.Error: Unresolved compilation problem: Illegal modifier for the constructor in type StaticConstructorDemo; only public, protected & private are permitted. at StaticConstructorDemo.(StaticConstructorDemo.java:4) at StaticConstructorDemo.main(StaticConstructorDemo.java:13)
Från exemplet ovan kan vi se att det ger ett undantag ' Olaglig modifierare för konstruktortypen '. Och det står klart och tydligt offentlig, skyddad , & privat är tillåtna.
Varför stöder inte Java en statisk konstruktör?
När vi markerar något med ett statiskt nyckelord, tillhör det endast klass, till exempel statisk metod, statisk variabel, etc. Statiska metoder kan inte ärvas från sina underklasser eftersom de tillhör klassen där de är deklarerade. På samma sätt kan vi inte använda en statisk variabel i dess underklasser.
När det gäller en konstruktor är en konstruktor ett återanvändbart kodblock, vilket innebär att vi kan anropa det från dess underklasser under skapandet av objekten. Men när vi deklarerar det som statiskt kan det inte användas av andra underklasser än de deklarerande klasserna. Så det är olagligt att förklara en konstruktör som statisk. Det kommer alltså att bryta mot hela motivet för arvskonceptet.
Om vi deklarerar en konstruktor som statisk, kan den inte nås av dess underklasser och kommer endast att tillhöra en klassnivå. Programmet kommer inte att kompileras och genererar ett kompileringsfel.
java lambda uttryck
Låt oss förstå det med ett exempel:
hur många mission impossible-filmer finns det
StaticConstructorExample.java:
public class StaticConstructorExample { public StaticConstructorExample() { /*Constructor of this class*/ System.out.println('In StaticConstructorExample Class'); } }
StaticConstructorChild.java:
public class StaticConstructorChild extends StaticConstructorExample { public StaticConstructorChild() { System.out.println('In StaticConstructorChild class'); } public void display() { System.out.println('Method of StaticConstructorChild class'); } public static void main(String args[]) { StaticConstructorChild obj = new StaticConstructorChild(); obj.display(); } }
Produktion:
In StaticConstructorExample Class In StaticConstructorChild class Method of StaticConstructorChild class
Från exemplet ovan kan vi märka att när det underordnade klassobjektet skapas, anropar det först den överordnade klasskonstruktorn, sedan dess egen klasskonstruktor. Det händer eftersom det nya nyckelordet skapar objektet och anropar sedan konstruktorn för att initiera värdena. Varje underordnad klass har en super()-konstruktor som den första satsen som ärver egenskaperna från den överordnade klassen.
Detta är anledningen till att vi inte kan skapa en statisk konstruktor i Java.
Slutsats:
Konstruktörerna i Java kan inte vara statiska eftersom om konstruktörerna är markerade som statiska kan de inte anropas från barnklassen; alltså kommer inte barnklassens objekt att skapas. Programmet kommer inte att kompileras och ger ett kompileringsfel.