
-
"Afmonter"
public static void main(String args[])
.Et af de populære java-interviewspørgsmål for friskere, og meget nemt.
-
public
er 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. -
Void
er metodens returtype. Det betyder, at metoden ikke returnerer nogen værdi. -
main
er navnet på metoden. JVM "kender" det som et indgangspunkt til en applikation (det skal have en bestemt signatur).Main
er 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
main
metoden, 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
immutable
objekt? Kan du opretteimmutable
objekter?Du kan ikke ændre objekter i en
immutable
klasse efter deres oprettelse. Så når først du har oprettet dem, kan du ikke ændre dem. Hvis du forsøger at ændreImmutable
objektet, får du et nyt objekt (klon) og ændrer denne klon under oprettelsen.Et godt eksempel er
String
, det erimmutable
i 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
String
ogStringBuilder
klasserStringBuffer
i Java?Der er en af de førende i top java interview spørgsmål.
Først og fremmest
String
er en uforanderlig klasse. Det betyder, at du ikke kan ændre indholdet, når det først er oprettet. MensStringBuffer
ogStringBuilder
er foranderlige klasser, så du kan ændre dem senere. Hvis vi ændrer indholdet afString
objektet, opretter det en ny streng, derfor ændrer det ikke den originale. DerforStringBuffer
er ydelsen med bedre end medString
.Hovedforskellen mellem
StringBuffer
ogStringBuilder
detsStringBuffer
metoder er synkroniseret, mensStringBuilder
det ikke er det. -
Er der nogen forskel på,
String
at 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 enString
ved 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
private
ellerstatic
metode i Java?Et af java-tricky interviewspørgsmål til rookies. Du kan virkelig ikke tilsidesætte
private
ellerstatic
metode i Java.Du kan ikke tilsidesætte
private
metoderne, 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).Static
metoder kan heller ikke tilsidesættes, fordistatic
metoder er en del af selve klassen og ikke en del af noget objekt i klassen. Selvfølgelig kan du erklære sammestatic
metode med samme signatur i børneklasser, men igen, de vil blive behandlet som nye metoder. -
Forskellen mellem
Abstract Class
ogInterface
Et af de populære java-udvikler-interviewspørgsmål, der er baseret på OOP-principper. Først og fremmest definerer Java
interface
en adfærd ogabstract class
skaber 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
static
variabler og metoder i enabstract
klasse?Ja, det er muligt at deklarere
static
variabler og metoder iabstract
metode. 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 iabstract
klassen, ved at bruge navnet påabstract
klassen. -
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
, ogC
ogC
arverA
ogB
. Nu,A
ogB
klasser har den samme metode, og du kalder det fra et underordnet klasseobjekt... Hvilken?A
s ellerB
s? 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
main
metoder 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,
final
fordi 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,
final
fordi 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 binding
ogdynamic binding
?Det
binding
, der kan løses på kompileringstidspunktet af compiler kaldesstatic
eller tidlig binding.Binding
af allestatic
,private
ogfinal
metoder udføres på kompileringstidspunktet.I
Dynamic binding
compiler 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
try
blok skal vel efterfølges af encatch
blok?Nix. Det er ikke en nødvendighed. Hver
try
blok kan være udencatch
blok. 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
throw
ogthrows
søgeord?Throws
bruges til at erklære en undtagelse, så den fungerer på samme måde som blokkentry-catch
.Throw
nøgleordet bruges til at kaste en undtagelse eksplicit fra en metode eller enhver anden kodeblok.Throw
efterfølges af en forekomst afException
klasse, og kast efterfølges af undtagelsesklassenavne.Throw
bruges i metodeteksten til at kaste en undtagelse.Throws
bruges 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
throw
nøgleord. Du kan erklære flere undtagelser, f.eks.public void method()throws IOException
,SQLException
.
GO TO FULL VERSION