
-
"Demontera"
public static void main(String args[])
.En av de populära java-intervjufrågorna för nybörjare, och mycket enkel.
-
public
är en åtkomstmodifierare. Vi använder den för att specificera åtkomsten till denna metod. Här är modifieraren "public", så alla klasser har tillgång till denna metod. -
static
. Detta Java-nyckelord innebär att vi använder den här metoden utan att skapa ett nytt objekt i en klass. -
Void
är metodens returtyp. Det betyder att metoden inte returnerar något värde. -
main
är namnet på metoden. JVM "känner" det som en ingångspunkt till en applikation (den bör ha en speciell signatur).Main
är en metod där huvudexekveringen sker. -
String args[]
. Detta är parametern som skickas till huvudmetoden. Här har vi argumenten av String-typ som din Java-applikation accepterar när du kör den. Du kan skriva dem på terminalen.
-
-
Vad är skillnaden mellan
equals()
och==
?==
För det första är " " en operatör medan detequals()
är en metod. Vi använder==
operator för referensjämförelse (eller adressjämförelse) ochequals()
metod för innehållsjämförelse. Det betyder att==
man kontrollerar om båda objekten pekar på samma minnesplats samtidigt somequals()
man jämför värden i objekten. -
Kan vi köra ett program utan
main()
metod?Många grundläggande java-intervjufrågor är verkligen enkla. Som den här. Så kort svar är: ja, det kan vi. Till exempel kan vi göra det med statiskt block.
Du kan använda statiskt block för att initiera den statiska datamedlemmen. Den exekveras före
main
metoden, vid tidpunkten för klassladdning.class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }
Utgången är:
static block is invoked Now main method
Hur är det med total huvudmetodsfrånvaro? Om du försöker köra en vanlig klass utan huvudmetoden alls, fick du nästa felmeddelande: Huvudmetoden hittades inte i klassen Test, vänligen definiera huvudmetoden som: public static void main (String [] args) eller en JavaFX-applikation klass måste utöka javafx.application.Application. Själva felet säger att om detta är en JavaFX-applikation och klassen ärvs från javafx.application.Application, så är det möjligt.
-
Vad är
immutable
objekt? Kan du skapaimmutable
objekt?Du kan inte ändra objekt i en
immutable
klass efter att de har skapats. Så när du väl har skapat dem kan du inte ändra dem. Om du försöker ändraImmutable
objekt får du ett nytt objekt (klon) och ändrar denna klon medan du skapar.Ett bra exempel är ,
String
det ärimmutable
i Java. Det betyder att du inte kan ändra själva objektet, men du kan ändra referensen till objektet. -
Hur många objekt skapas i följande kod?
En av java tekniska intervjufrågor som ersätter #4.
String s1="Hello"; String s2="Hello"; String s3="Hello";
Svaret är "bara en" eftersom Java har en strängpool. När vi skapar ett String-objekt med operatorn new() skapar det ett nytt objekt i heap-minnet. Om vi använder String literal syntax, som i vårt exempel, kan det returnera ett befintligt objekt från String-poolen, om det redan finns.
-
Hur många objekt skapas i följande kod?
String s = new String("Hello");
Det finns 2 objekt. En är i strängkonstant pool (om den inte redan finns) och den andra är i högen.
-
Vad är skillnaden mellan och klasser i Java
String
?StringBuilder
StringBuffer
Det finns en av de ledande i de vanligaste java-intervjufrågorna.
Först av allt
String
är en oföränderlig klass. Det betyder att du inte kan ändra dess innehåll när det väl har skapats. MedanStringBuffer
ochStringBuilder
är föränderliga klasser, så att du kan ändra dem senare. Om vi ändrar innehållet iString
objektet skapar det en ny sträng och ändrar därför inte den ursprungliga. Det är därför prestandan medStringBuffer
är bättre än medString
.Den största skillnaden mellan
StringBuffer
ochStringBuilder
dessStringBuffer
metoder är synkroniserade medansStringBuilder
inte är det. -
Finns det någon skillnad på
String
att det skapades med hjälp av literal och mednew()
operator?Det finns. Om vi skapar en sträng med
new()
operatorn, visas den i högen och i strängpoolen (om den inte redan finns). Om du skapar enString
med hjälp av en bokstavlig, skapas den i strängpoolen (om den inte redan finns). En strängbassäng är ett lagringsområde i högen, som lagrar strängbokstavar. -
Kan du åsidosätta
private
ellerstatic
metod i Java?En av java-knepiga intervjufrågor för nybörjare. Du kan verkligen inte åsidosätta
private
ellerstatic
metod i Java.Du kan inte åsidosätta
private
metoderna eftersom omfattningen av specificeraren för privat åtkomst endast är inom klassen. När du ska åsidosätta något ska vi ha föräldra- och barnklass. Om metoden för superklass ärprivate
, kan barnklass inte använda den, och metoderna i barnklass kommer att behandlas som nya metoder (inte åsidosätts).Static
metoder kan inte heller åsidosättas, eftersomstatic
metoder är en del av klassen själv och inte en del av något objekt i klassen. Visst kan du deklarera sammastatic
metod med samma signatur i barnklasser, men återigen kommer de att behandlas som nya metoder. -
Skillnaden mellan
Abstract Class
ochInterface
En av de populära intervjufrågorna för Java-utvecklare som har med OOP-principerna att göra. Först av allt, i Java
interface
definierar ett beteende ochabstract class
skapar hierarki.Abstrakt klass Gränssnitt Det är möjligt att ha en metodkropp (icke-abstrakta metoder) i abstrakt klass Gränssnitt kan bara ha abstrakta metoder. I Java 8 eller senare blev det möjligt att definiera standardmetoder och implementera dem direkt i gränssnittet. Gränssnitt i Java 8 kan också ha statiska metoder. Instansvariabler kan vara i abstrakt klass Ett gränssnitt kan inte ha instansvariabler. Konstruktörer är tillåtna Gränssnittet kan inte ha någon konstruktor. Statiska metoder är tillåtna Statiska metoder är inte tillåtna Klass kan bara ha en abstrakt förälder Ett gränssnitt kan implementera olika klasser Den abstrakta klassen kan tillhandahålla implementeringen av gränssnittet. Gränssnittet kan inte tillhandahålla implementeringen av den abstrakta klassen. En abstrakt klass tillåts utöka den andra Java-klassen och implementera flera Java-gränssnitt. Ett gränssnitt får endast utöka det andra Java-gränssnittet. En abstrakt Java-klass kan ha privata och skyddade klassmedlemmar Medlemmar av ett Java-gränssnitt är offentliga som standard -
Kan vi deklarera
static
variabler och metoder i enabstract
klass?Ja, det är möjligt att deklarera
static
variabler och metoder iabstract
metod. Det finns inget krav på att göra ett objekt för att komma åt det statiska sammanhanget. Så vi får komma åt det statiska sammanhanget som deklareras inuti klassen genom att använda klassensabstract
namn .abstract
-
Vilka typer av minnesområden tilldelas av JVM?
Klassområde lagrar perklassstrukturer, till exempel körtidskonstantpool, fält, metoddata och all kod för metoder.
Heap är ett runtime-dataområde där minne allokeras till objekten.
Stack lagrar ramar. Den innehåller lokala variabler och delresultat och deltar i metodanrop och retur. Varje tråd har en privat JVM-stack, skapad samtidigt som tråden. En ny ram skapas varje gång en metod anropas. En ram förstörs när dess metodanrop är klar.
Programräknareregistret innehåller en adress till den Java-virtuella maskininstruktion som för närvarande körs.
Native Method Stack innehåller alla inbyggda metoder som används i applikationen.
-
Varför är multipelarv inte tillåtet i java?
Det skulle vara riktigt komplicerat. Föreställ dig tre klasser
A
,B
, ochC
ochC
ärverA
ochB
. Nu,A
ochB
klasser har samma metod och du anropar det från ett underordnat klassobjekt... Vilken?A
s ellerB
s? Här har vi oklarhet.om du försöker ärva två klasser gör Java kompileringstidsfel.
-
Kan vi överbelasta
main()
metoden?Visst, vi får ha många
main
metoder i ett Java-program genom att använda metodöverbelastning. Testa! -
Kan vi deklarera en konstruktör som
final
?Nej. En konstruktör kan inte deklareras som en
final
eftersom den inte kan ärvas. Så det är meningslöst att deklarera konstruktörer somfinal
. Men om du försöker göra det, ger Java-kompilatorn dig ett fel. -
Kan vi deklarera ett gränssnitt som
final
?Nej, vi kan inte göra det här. Ett gränssnitt kan inte bero
final
på att gränssnittet ska implementeras av någon klass enligt dess definition. Därför är det ingen mening att skapa ett gränssnittfinal
. Men om du försöker göra det kommer kompilatorn att visa ett fel. -
Vad är skillnaden mellan
static binding
ochdynamic binding
?Det
binding
som kan lösas vid kompilering av kompilatorn kallasstatic
eller tidig bindning.Binding
av allastatic
,private
ochfinal
metoder görs vid kompilering.I
Dynamic binding
kompilatorn kan inte välja en metod som ska anropas. Åsidosättande är ett perfekt exempel pådynamic binding
. I åsidosättande har både förälder- och barnklasser samma metod.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(); } }
-
Hur skapar man en skrivskyddad klass i Java?
Du kan göra det genom att göra alla klassens fält privata. Den skrivskyddade klassen har endast getter-metoder som returnerar klassens privata egendom till metoden
main
. Du kan inte ändra den här egenskapen, anledningen är avsaknaden av sättermetoden.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
Hur skapar man en skrivbara klass i Java?
Återigen bör du göra alla klassens fält
private
. Nu ska din skrivbara klass bara ha setter-metoder och inga getters. Därför kan vi inte läsa klassens egenskaper.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
Varje
try
block måste väl följas av ettcatch
block?Nej. Det är inte en nödvändighet. Varje
try
block kan vara utancatch
block. Det kan följas av antingen ett catchblock eller ett finalblock eller till och med utan dem alls.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...
Ytterligare ett exempel: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: Tidigare kunde Java 8-metoder i gränssnitt endast ha varit abstrakta. I Java 8 eller senare blev det möjligt att definiera standardmetoder och implementera dem direkt i gränssnittet. -
Vad är skillnaden mellan
throw
ochthrows
nyckelord?Throws
används för att deklarera ett undantag, så det fungerar på samma sätt somtry-catch
blocket.Throw
nyckelord används för att skapa ett undantag uttryckligen från en metod eller något annat kodblock.Throw
följs av en instans avException
klass och kast följs av undantagsklassnamn.Throw
används i metodkroppen för att kasta ett undantag.Throws
används i en metodsignatur för att deklarera de undantag som kan förekomma i de satser som finns i metoden.Det är tillåtet att kasta ett undantag i taget men du kan hantera flera undantag genom att deklarera dem med
throw
nyckelord. Du kan deklarera flera undantag, t.ex.public void method()throws IOException
,SQLException
.
GO TO FULL VERSION