-
"Afmonter"
public static void main(String args[]).Et af de populære java-interviewspørgsmål for friskere, og meget nemt.
-
publicer en adgangsmodifikator. Vi bruger den til at angive adgangen til denne metode. Her er modifikator "offentlig", så enhver klasse har adgang til denne metode. -
static. Dette Java nøgleord betyder, at vi bruger denne metode uden at oprette et nyt objekt i en klasse. -
Voider metodens returtype. Det betyder, at metoden ikke returnerer nogen værdi. -
mainer navnet på metoden. JVM "kender" det som et indgangspunkt til en applikation (det skal have en bestemt signatur).Mainer en metode, hvor hovedudførelsen finder sted. -
String args[]. Dette er parameteren, der overføres til hovedmetoden. Her har vi argumenterne af typen String, som din Java-applikation accepterer, når du kører den. Du kan skrive dem på terminalen.
-
-
Hvad er forskellen mellem
equals()og==?For det første er "
==" en operator, mens detequals()er en metode. Vi bruger==operator til referencesammenligning (eller adressesammenligning) ogequals()metode til indholdssammenligning. Det betyder, at det==kontrollerer, om begge objekter peger på den samme hukommelsesplacering, mensequals()man sammenligner værdier i objekterne. -
Kan vi udføre et program uden
main()metode?Mange grundlæggende java-interviewspørgsmål er virkelig nemme. Som denne. Så det korte svar er: ja, det kan vi. For eksempel kan vi gøre det ved hjælp af statisk blok.
Du kan bruge statisk blok til at initialisere det statiske datamedlem. Den udføres før
mainmetoden, på tidspunktet for klassens indlæsning.class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }Udgangen er:
static block is invoked Now main method Hvad med totalt hovedmetodefravær? Hvis du forsøger at køre en almindelig klasse uden hovedmetoden overhovedet, fik du den næste fejl: Hovedmetode ikke fundet i klassetest, definer venligst hovedmetoden som: public static void main (String [] args) eller en JavaFX-applikation klasse skal udvide javafx.application.Application. Selve fejlen siger, at hvis dette er en JavaFX-applikation, og klassen er nedarvet fra javafx.application.Application, så er det muligt.
-
Hvad er
immutableobjekt? Kan du opretteimmutableobjekter?Du kan ikke ændre objekter i en
immutableklasse efter deres oprettelse. Så når først du har oprettet dem, kan du ikke ændre dem. Hvis du forsøger at ændreImmutableobjektet, får du et nyt objekt (klon) og ændrer denne klon under oprettelsen.Et godt eksempel er
String, det erimmutablei Java. Det betyder, at du ikke kan ændre selve objektet, men du kan ændre referencen til objektet. -
Hvor mange objekter oprettes i følgende kode?
Et af java tekniske interviewspørgsmål, der erstatter #4.
String s1="Hello"; String s2="Hello"; String s3="Hello";Svaret er "kun én", fordi Java har en String Pool. Når vi opretter et String-objekt ved hjælp af new()-operatoren, opretter det et nyt objekt i heap-hukommelsen. Hvis vi bruger String literal syntaks, som i vores eksempel, kan det returnere et eksisterende objekt fra String-puljen, hvis det allerede eksisterer.
-
Hvor mange objekter oprettes i følgende kode?
String s = new String("Hello");Der er 2 objekter. Den ene er i streng konstant pool (hvis den ikke allerede er til stede), og den anden er i dyngen.
-
Hvad er forskellen mellem
StringogStringBuilderklasserStringBufferi Java?Der er en af de førende i top java interview spørgsmål.
Først og fremmest
Stringer en uforanderlig klasse. Det betyder, at du ikke kan ændre indholdet, når det først er oprettet. MensStringBufferogStringBuilderer foranderlige klasser, så du kan ændre dem senere. Hvis vi ændrer indholdet afStringobjektet, opretter det en ny streng, derfor ændrer det ikke den originale. DerforStringBufferer ydelsen med bedre end medString.Hovedforskellen mellem
StringBufferogStringBuilderdetsStringBuffermetoder er synkroniseret, mensStringBuilderdet ikke er det. -
Er der nogen forskel på,
Stringat det blev oprettet ved hjælp af bogstavelig og mednew()operator?Der er. Hvis vi opretter en streng med
new()operatoren, vises den i heapen og i strengpuljen (hvis den ikke allerede er til stede). Hvis du opretter enStringved hjælp af en literal, oprettes den i strengpuljen (hvis den ikke allerede er til stede). En strengbassin er et opbevaringsområde inden i dyngen, som opbevarer strengliteraler. -
Kan du tilsidesætte
privateellerstaticmetode i Java?Et af java-tricky interviewspørgsmål til rookies. Du kan virkelig ikke tilsidesætte
privateellerstaticmetode i Java.Du kan ikke tilsidesætte
privatemetoderne, fordi omfanget af den private adgangsspecifikation kun er inden for klassen. Når du skal tilsidesætte noget, bør vi have forældre- og børneklasse. Hvis metode for superklasse erprivate, kan børneklasse ikke bruge den, og metoderne i børneklasse vil blive behandlet som nye metoder (ikke tilsidesat).Staticmetoder kan heller ikke tilsidesættes, fordistaticmetoder er en del af selve klassen og ikke en del af noget objekt i klassen. Selvfølgelig kan du erklære sammestaticmetode med samme signatur i børneklasser, men igen, de vil blive behandlet som nye metoder. -
Forskellen mellem
Abstract ClassogInterfaceEt af de populære java-udvikler-interviewspørgsmål, der er baseret på OOP-principper. Først og fremmest definerer Java
interfaceen adfærd ogabstract classskaber hierarki.Abstrakt klasse Interface Det er muligt at have et metodelegeme (ikke-abstrakte metoder) i abstrakt klasse Interface kan kun have abstrakte metoder. I Java 8 eller nyere blev det muligt at definere standardmetoder og implementere dem direkte i grænsefladen. Også grænseflader i Java 8 kunne have statiske metoder. Forekomstvariabler kan være i abstrakt klasse En grænseflade kan ikke have instansvariabler. Konstruktører er tilladt Interfacet kan ikke have nogen konstruktør. Statiske metoder er tilladt Statiske metoder er ikke tilladt Klassen kan kun have én abstrakt forælder En grænseflade kan implementere forskellige klasser Den abstrakte klasse kan levere implementeringen af grænsefladen. Interfacet kan ikke levere implementeringen af den abstrakte klasse. En abstrakt klasse har lov til at udvide den anden Java-klasse og implementere flere Java-grænseflader. En grænseflade må kun udvide den anden Java-grænseflade. En abstrakt Java-klasse kan have private og beskyttede klassemedlemmer Medlemmer af en Java-grænseflade er som standard offentlige -
Kan vi erklære
staticvariabler og metoder i enabstractklasse?Ja, det er muligt at deklarere
staticvariabler og metoder iabstractmetode. Der er intet krav om at lave et objekt for at få adgang til den statiske kontekst. Så vi har lov til at få adgang til den statiske kontekst, der er erklæret inde iabstractklassen, ved at bruge navnet påabstractklassen. -
Hvilke typer hukommelsesområder tildeles af JVM?
Klasseområde gemmer perklasse-strukturer, f.eks. runtime-konstantpulje, felter, metodedata og al koden til metoder.
Heap er et runtime-dataområde, hvor hukommelse er allokeret til objekterne.
Stack gemmer rammer. Den indeholder lokale variabler og delresultater og deltager i metodekald og returnering. Hver tråd har en privat JVM-stack, der er oprettet på samme tid som tråden. En ny ramme oprettes hver gang en metode påkaldes. En ramme ødelægges, når dens metodekald er fuldført.
Programtællerregister indeholder en adresse på den Java-virtuelle maskine-instruktion, der i øjeblikket udføres.
Native Method Stack indeholder alle de native metoder, der bruges i applikationen.
-
Hvorfor er multipel nedarvning ikke tilladt i java?
Det ville være rigtig kompliceret. Forestil dig tre klasser
A,B, ogCogCarverAogB. Nu,AogBklasser har den samme metode, og du kalder det fra et underordnet klasseobjekt... Hvilken?As ellerBs? Her har vi uklarhed.hvis du forsøger at arve to klasser, giver Java kompileringstidsfejl.
-
Kan vi overbelaste
main()metoden?Selvfølgelig har vi lov til at have mange
mainmetoder i et Java-program ved at bruge metodeoverbelastning. Prøve det! -
Kan vi erklære en konstruktør som
final?Nix. En konstruktør kan ikke erklæres som en,
finalfordi den ikke kan nedarves. Så det er meningsløst at erklære konstruktører somfinal. Men hvis du prøver at gøre det, giver Java-compileren dig en fejl. -
Kan vi erklære en grænseflade som
final?Nej, det kan vi ikke. En grænseflade kan ikke være,
finalfordi grænsefladen skal implementeres af en eller anden klasse i henhold til dens definition. Derfor er der ingen mening at lave en grænsefladefinal. Men hvis du prøver at gøre det, vil compileren vise en fejl. -
Hvad er forskellen mellem
static bindingogdynamic binding?Det
binding, der kan løses på kompileringstidspunktet af compiler kaldesstaticeller tidlig binding.Bindingaf allestatic,privateogfinalmetoder udføres på kompileringstidspunktet.I
Dynamic bindingcompiler kan ikke vælge en metode, der skal kaldes. Tilsidesættelse er et perfekt eksempel pådynamic binding. Ved tilsidesættelse har både forældre- og børneklasser samme metode.Static Binding class Cat{ private void talk() {System.out.println("cat is mewing..."); } public static void main(String args[]){ Cat cat=new Cat(); cat.talk(); } } Dynamic Binding class Animal{ void talk(){ System.out.println("animal is talking..."); } } class Cat extends Animal{ void talk(){ System.out.println("cat is talking..."); } public static void main(String args[]){ Animal animal=new Cat(); animal.talk(); } } -
Hvordan opretter man en skrivebeskyttet klasse i Java?
Du kan gøre det ved at gøre alle klassens felter private. Den skrivebeskyttede klasse har kun getter-metoder, som returnerer klassens private ejendom til metoden
main. Du er ikke i stand til at ændre denne egenskab, grunden er manglen på seters-metoden.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } } -
Hvordan opretter man en skrivebeskyttet klasse i Java?
Igen skal du lave alle klassens felter
private. Nu skal din skrivebeskyttede klasse kun have seter-metoder og ingen getters. Derfor kan vi ikke aflæse klassens egenskaber.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } } -
Hver
tryblok skal vel efterfølges af encatchblok?Nix. Det er ikke en nødvendighed. Hver
tryblok kan være udencatchblok. Det kunne efterfølges af enten en catchblock eller en endelig blok eller endda uden dem overhovedet.public class Main{ public static void main(String []args){ try{ int variable = 1; System.out.println(variable/0); } finally { System.out.println("the other part of the program..."); } } }Produktion:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
Endnu et eksempel:class Main { public static void main(String[] args) throws IOException { try(InputStreamReader inputStreamReader = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(inputStreamReader)){ System.out.println("test"); } } }Produktion:
test
PS: Før Java 8-metoder i grænseflader kunne kun have været abstrakte. I Java 8 eller nyere blev det muligt at definere standardmetoder og implementere dem direkte i grænsefladen. -
Hvad er forskellen mellem
throwogthrowssøgeord?Throwsbruges til at erklære en undtagelse, så den fungerer på samme måde som blokkentry-catch.Thrownøgleordet bruges til at kaste en undtagelse eksplicit fra en metode eller enhver anden kodeblok.Throwefterfølges af en forekomst afExceptionklasse, og kast efterfølges af undtagelsesklassenavne.Throwbruges i metodeteksten til at kaste en undtagelse.Throwsbruges i en metodesignatur til at erklære de undtagelser, der kan forekomme i de udsagn, der findes i metoden.Det er tilladt at kaste en undtagelse ad gangen, men du kan håndtere flere undtagelser ved at erklære dem ved hjælp af
thrownøgleord. Du kan erklære flere undtagelser, f.eks.public void method()throws IOException,SQLException.
GO TO FULL VERSION