
-
"Demonter"
public static void main(String args[])
.Et av de populære java-intervjuspørsmålene for ferskere, og veldig enkelt.
-
public
er en tilgangsmodifikator. Vi bruker den til å spesifisere tilgangen til denne metoden. Her er modifikator "offentlig", så enhver klasse har tilgang til denne metoden. -
static
. Dette Java-nøkkelordet betyr at vi bruker denne metoden uten å lage et nytt objekt i en klasse. -
Void
er returtypen til metoden. Det betyr at metoden ikke returnerer noen verdi. -
main
er navnet på metoden. JVM "kjenner" det som et inngangspunkt til en applikasjon (den bør ha en spesiell signatur).Main
er en metode hvor hovedutførelsen skjer. -
String args[]
. Dette er parameteren som sendes til hovedmetoden. Her har vi argumentene av strengtype som Java-applikasjonen din godtar når du kjører den. Du kan skrive dem på terminalen.
-
-
Hva er forskjellen mellom
equals()
og==
?For det første er "
==
" en operatør mens detequals()
er en metode. Vi bruker==
operatør for referansesammenligning (eller adressesammenligning) ogequals()
metode for innholdssammenligning. Det betyr at==
sjekker om begge objektene peker til samme minneplassering mensequals()
sammenligner verdier i objektene. -
Kan vi kjøre et program uten
main()
metode?Mange grunnleggende intervjuspørsmål i Java er veldig enkle. Som denne. Så kort svar er: ja, det kan vi. For eksempel kan vi gjøre det ved å bruke statisk blokk.
Du kan bruke statisk blokk for å initialisere det statiske datamedlemmet. Den utføres før
main
metoden, på tidspunktet for lasting av klasse.class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }
Utgangen er:
static block is invoked Now main method
Hva med totalt hovedmetodefravær? Hvis du prøver å kjøre en vanlig klasse uten hovedmetoden i det hele tatt, fikk du neste feilmelding: Hovedmetode ikke funnet i klassen Test, vennligst definer hovedmetoden som: public static void main (String [] args) eller en JavaFX-applikasjon klasse må utvide javafx.application.Application. Selve feilen sier at hvis dette er en JavaFX-applikasjon og klassen er arvet fra javafx.application.Application, så er det mulig.
-
Hva er
immutable
objekt? Kan du lageimmutable
objekter?Du kan ikke endre objekter i en
immutable
klasse etter at de er opprettet. Så når du først har opprettet dem, kan du ikke endre dem. Hvis du prøver å endreImmutable
objektet får du et nytt objekt (klone) og endrer denne klonen mens du oppretter.Et godt eksempel er
String
, det erimmutable
i Java. Det betyr at du ikke kan endre selve objektet, men du kan endre referansen til objektet. -
Hvor mange objekter opprettes i følgende kode?
Et av java-tekniske intervjuspørsmål som erstatter #4.
String s1="Hello"; String s2="Hello"; String s3="Hello";
Svaret er "bare én" fordi Java har en strengpool. Når vi lager et String-objekt ved å bruke new()-operatoren, oppretter det et nytt objekt i heap-minnet. Hvis vi bruker String literal syntaks, som i vårt eksempel, kan det returnere et eksisterende objekt fra String pool, hvis det allerede eksisterer.
-
Hvor mange objekter opprettes i følgende kode?
String s = new String("Hello");
Det er 2 objekter. Den ene er i strengkonstant pool (hvis den ikke allerede er til stede) og den andre er i haugen.
-
Hva er forskjellen mellom
String
ogStringBuilder
klasserStringBuffer
i Java?Det er en av lederne i de beste java-intervjuspørsmålene.
Først av alt
String
er en uforanderlig klasse. Det betyr at du ikke kan endre innholdet når det først er opprettet. MensStringBuffer
ogStringBuilder
er foranderlige klasser, slik at du kan endre dem senere. Hvis vi endrer innholdet iString
objektet, oppretter det en ny streng og endrer derfor ikke den opprinnelige. Det er derfor ytelsen medStringBuffer
er bedre enn medString
.Hovedforskjellen mellom
StringBuffer
ogStringBuilder
detsStringBuffer
metoder er synkronisert mensStringBuilder
det ikke er det. -
Er det noen forskjell på
String
at det ble opprettet ved hjelp av bokstavelig og mednew()
operatør?Det er. Hvis vi lager en streng med
new()
operatøren, vises den i heapen og i strengpoolen (hvis den ikke allerede er til stede). Hvis du oppretter enString
ved hjelp av en bokstavelig, opprettes den i strengpoolen (hvis den ikke allerede er til stede). Et strengbasseng er et lagringsområde i haugen, som lagrer strengbokstaver. -
Kan du overstyre
private
ellerstatic
metode i Java?Et av java vanskelige intervjuspørsmål for nybegynnere. Du kan virkelig ikke overstyre
private
ellerstatic
metode i Java.Du kan ikke overstyre
private
metodene fordi omfanget av spesifikasjonen for privat tilgang kun er innenfor klassen. Når du skal overstyre noe bør vi ha foreldre- og barneklasse. Hvis metode for superklasse erprivate
, kan barneklassen ikke bruke den, og metodene i barneklassen vil bli behandlet som nye metoder (ikke overstyrt).Static
Metoder kan heller ikke overstyres, fordistatic
metoder er en del av selve klassen, og ikke en del av noe objekt i klassen. Klart du kan deklarere sammestatic
metode med samme signatur i barneklasser, men igjen, de vil bli behandlet som nye metoder. -
Forskjellen mellom
Abstract Class
ogInterface
Et av de populære intervjuspørsmålene for Java-utviklere som har sammenheng med OOP-prinsippene. Først av alt, i Java
interface
definerer en atferd ogabstract class
skaper hierarki.Abstrakt klasse Grensesnitt Det er mulig å ha en metodekropp (ikke-abstrakte metoder) i abstrakt klasse Grensesnitt kan bare ha abstrakte metoder. I Java 8 eller nyere ble det mulig å definere standardmetoder og implementere dem direkte i grensesnittet. Grensesnitt i Java 8 kan også ha statiske metoder. Forekomstvariabler kan være i abstrakt klasse Et grensesnitt kan ikke ha forekomstvariabler. Konstruktører er tillatt Grensesnittet kan ikke ha noen konstruktør. Statiske metoder er tillatt Statiske metoder er ikke tillatt Klassen kan bare ha én abstrakt forelder Ett grensesnitt kan implementere forskjellige klasser Den abstrakte klassen kan gi implementeringen av grensesnittet. Grensesnittet kan ikke gi implementering av abstraktklassen. En abstrakt klasse har lov til å utvide den andre Java-klassen og implementere flere Java-grensesnitt. Et grensesnitt er kun tillatt å utvide det andre Java-grensesnittet. En abstrakt Java-klasse kan ha private og beskyttede klassemedlemmer Medlemmer av et Java-grensesnitt er offentlige som standard -
Kan vi deklarere
static
variabler og metoder i enabstract
klasse?Ja, det er mulig å deklarere
static
variabler og metoder iabstract
metode. Det er ikke noe krav om å lage et objekt for å få tilgang til den statiske konteksten. Så vi har tilgang til den statiske konteksten som er deklarert inne iabstract
klassen ved å bruke navnet påabstract
klassen. -
Hvilke typer minneområder tildeles av JVM?
Klasseområde lagrer perklassestrukturer, for eksempel kjøretidskonstantpool, felt, metodedata og all koden for metoder.
Heap er et kjøretidsdataområde hvor minne er allokert til objektene.
Stack lagrer rammer. Den inneholder lokale variabler og delresultater, og tar del i metodeanrop og retur. Hver tråd har en privat JVM-stabel, opprettet samtidig med tråden. En ny ramme opprettes hver gang en metode påkalles. En ramme blir ødelagt når metodeanropet er fullført.
Program Counter Register inneholder en adresse til den virtuelle Java-maskininstruksjonen som kjøres for øyeblikket.
Native Method Stack inneholder alle de native metodene som brukes i applikasjonen.
-
Hvorfor er multippel arv ikke tillatt i java?
Det ville vært veldig komplisert. Tenk deg tre klasser
A
,B
, ogC
ogC
arverA
ogB
. Nå,A
ogB
klasser har samme metode, og du kaller det fra et underordnet klasseobjekt... Hvilken?A
s ellerB
s? Her har vi tvetydighet.hvis du prøver å arve to klasser, gjengir Java kompileringstidsfeil.
-
Kan vi overbelaste
main()
metoden?Jada, vi har lov til å ha mange
main
metoder i et Java-program ved å bruke metodeoverbelastning. Prøv det! -
Kan vi erklære en konstruktør som
final
?Nei. En konstruktør kan ikke deklareres som en
final
fordi den ikke kan arves. Så det er meningsløst å erklære konstruktører somfinal
. Men hvis du prøver å gjøre det, gir Java-kompilatoren deg en feil. -
Kan vi erklære et grensesnitt som
final
?Nei, vi kan ikke gjøre dette. Et grensesnitt kan ikke være
final
fordi grensesnittet skal implementeres av en klasse i henhold til dens definisjon. Derfor er det ingen mening å lage et grensesnittfinal
. Men hvis du prøver å gjøre det, vil kompilatoren vise en feil. -
Hva er forskjellen mellom
static binding
ogdynamic binding
?Det
binding
som kan løses på kompileringstidspunktet av kompilatoren kallesstatic
eller tidlig binding.Binding
av allestatic
,private
ogfinal
metodene gjøres ved kompilering.I
Dynamic binding
kompilator kan ikke velge en metode som skal kalles. Overstyring er et perfekt eksempel pådynamic binding
. Ved overstyring har både foreldre- og barneklasser 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 lage en skrivebeskyttet klasse i Java?
Du kan gjøre det ved å gjøre alle klassens felt private. Den skrivebeskyttede klassen har bare getter-metoder som returnerer den private egenskapen til klassen til metoden
main
. Du kan ikke endre denne egenskapen, årsaken er mangelen på setters-metoden.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
Hvordan lage en skrivebeskyttet klasse i Java?
Igjen, du bør lage alle klassens felt
private
. Nå skal skrivebeskyttet klasse kun ha setter-metoder og ingen gettere. Derfor kan vi ikke lese egenskapene til klassen.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
Hver
try
blokk må vel følges av encatch
blokk?Nei. Det er ikke en nødvendighet. Hver
try
blokk kan være utencatch
blokk. Den kan bli etterfulgt av enten en catchblock eller en endelig blokk eller til og med uten dem i det hele tatt.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..."); } } }
Produksjon:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
Et eksempel til: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"); } } }
Produksjon:
test
PS: Før Java 8-metoder i grensesnitt kunne bare vært abstrakte. I Java 8 eller nyere ble det mulig å definere standardmetoder og implementere dem direkte i grensesnittet. -
Hva er forskjellen mellom
throw
ogthrows
søkeord?Throws
brukes til å erklære et unntak, så det fungerer på samme måte som blokkentry-catch
.Throw
nøkkelord brukes til å kaste et unntak eksplisitt fra en metode eller en annen kodeblokk.Throw
etterfølges av en forekomst avException
klasse og kast etterfølges av unntaksklassenavn.Throw
brukes i metodekroppen for å kaste et unntak.Throws
brukes i en metodesignatur for å deklarere unntakene som kan forekomme i setningene i metoden.Det er tillatt å kaste ett unntak om gangen, men du kan håndtere flere unntak ved å deklarere dem ved å bruke
throw
nøkkelord. Du kan erklære flere unntak, f.eks.public void method()throws IOException
,SQLException
.
GO TO FULL VERSION