Lessons available in both languages
Java Backend · Interview Prep

Core Java interview questions & answers

184+ real Core Java interview questions with model answers, plus free lessons to learn the concepts. Prepare in English & Hinglish, then practise with an AI mock interview.

16 topics · 184+ questions

Hirenix kaise padhata hai

Ek chapter. 90 minute.
Interview ke liye taiyaar.

Har concept ek real-world problem se — jaisa production code mein aata hai, waisa. Ratna nahi padta, samajh aa jaata hai. Har question ka model answer diya hai: interviewer ko exactly kya bolna hai, aur kyun. Phir usi chapter ka AI mock interview.

  • 📖Concept, 5 min meinJargon nahi — seedhi baat
  • 🛠️Real-world problemJaisa production code mein aata hai
  • 💬Model answerInterview mein kya bolna hai
  • 🧠FlashcardsRevision 10 min mein
  • 🤖AI mock interviewFollow-up bhi poochta hai
  • 📊Weak topicsKahan phans rahe ho, pata chale
Ye chapter shuru karo — free🌐 English🇮🇳 Hinglish
A student learning an interview concept on Hirenix at home
Video playlistsyllabus ke hisaab se18h+
Hirenix chapterinterview ke hisaab se90 min

Farq content ka nahi, filter ka hai — sirf wahi jo production mein actually use hota hai aur interview mein actually poocha jaata hai. Kitaabi topics jo industry mein kahin nahi chalte, wo yahan nahi milenge.

Lessons available in both languages

What you’ll learn

  • Java kya hai? JVM, JRE, JDK
  • Java program ka dhaancha
  • Data types aur variablesFree account
  • Operators aur control flowFree account
  • Strings aur String poolFree account
  • ArraysFree account
  • Wrapper classes aur autoboxingFree account
  • static aur finalFree account
  • Memory: heap vs stackFree account
  • Garbage collectionFree account
  • Pass by valueFree account
  • Modern Java (11 / 17)Free account
  • RecapFree account
  • Project: Student Report Card
  • Project: Text AnalyzerFree account
  • Project: Console ATMFree account

Java kya hai? JVM, JRE, JDK

Aap ek recipe ek baar likhte hain, apni handwriting mein. Us recipe ko kisi ek khaas cook ko dene ke bajaye, aap use ek standard recipe card mein badal dete hain — aisa format jo duniya ki har professional kitchen pehle se padhna jaanti hai. Delhi, Dubai, Toronto: har sheher mein apna ek cook hai jo wahi card uthata hai aur us kitchen ke jo bhi stove, gas aur bartan hain unse dish bana deta hai. Naye sheher ke liye aap recipe dobara nahi likhte. Bas wahan ek cook chahiye.

Java theek isi soch par bana hai.

  • Aapki .java file recipe hai — aapki likhi hui, insaanon ke padhne ke liye.
  • javac use bytecode mein badalta hai, yaani ek .class file. Yahi standard recipe card hai. Ye na English hai, aur na hi aapke laptop ka machine code. Ye ek beech ki language hai jise ek khaas program padhna jaanta hai.
  • JVM (Java Virtual Machine) hi cook hai. Windows, macOS aur Linux ke liye alag-alag JVM bani hui hai — lekin wo sab wahi ek bytecode padhti hain.

Production mein yahi wajah hai ki developer ke Windows laptop pe bani .jar file seedha Linux server pe copy hoti hai aur bas chal jaati hai. Koi use Linux ke liye dobara compile nahi karta. Bytecode badla hi nahi; sirf cook badla. Is property ka ek naam hai jo interviewer aapse sunna chahta hai: WORA — Write Once, Run Anywhere.

Aur analogy mein ek trade-off chhupa hua hai: dish seedha kitchen nahi banati, wo ek cook ke through jaati hai. Yahi extra layer wajah thi ki Java ko historically C++ se dheema kaha jaata tha — aur isi wajah se agli cheez exist karti hai.

Teen naam jo log gadd-madd karte hain: JVM, JRE, JDK

Ye teen alag-alag competing cheezein nahi hain. Ye teen dabbe hain, ek doosre ke andar.

Ye kya hai Andar kya hai Kisko chahiye
JVM Wo engine jo bytecode chalata hai Sirf runtime engine Ise akela koi install nahi karta
JRE Java Runtime Environment JVM + standard libraries (String, Math, collections…) Wo machine jise sirf Java app chalani hai — ek server
JDK Java Development Kit JRE + development tools (javac, javap, jar, debugger) Jo Java likhta hai — yaani aap

Ek line mein yaad rakhiye: JDK ke andar JRE hai, aur JRE ke andar JVM hai.

Ek sawaal jo interviewers ko bahut pasand hai: aapke server pe sirf JRE hai — kya wo aapki app chala sakta hai? Haan. Chala sakta hai, lekin compile nahi kar sakta, kyunki javac JDK mein rehta hai. Ye ek jawab hi sabit kar deta hai ki aapko layering samajh aati hai, teen definitions ratt-ne se kaam nahi chala.

JIT — pehle kuch second slow kyun, phir tez kyun

Agar JVM har bytecode instruction ko har baar ek-ek karke padh kar interpret karti, to Java sach mein dheema hota. Wo aisa karti nahi hai. JVM dekhti rehti hai ki kaunse methods baar-baar chal rahe hain — jinhe "hot" kehte hain — aur JIT (Just-In-Time) compiler unhe program chalte-chalte asli native machine code mein compile kar deta hai. Uske baad JVM unhe interpret karna band kar deti hai aur seedha compiled version call karti hai.

Wapas kitchen pe: cook dekhta hai ki wahi dish sau baar order ho rahi hai, to wo use pehle se prep kar leta hai. Pehli plate sabse zyada waqt leti hai; do sauvin plate tez aati hai.

Ye asli aur dikhne wala effect hai, koi trivia nahi. Restart ke baad Java service sach mein pehle kuch second dheemi rehti hai, phir settle ho jaati hai. Aage jab koi backend engineer bole ki JVM ko "warm up" chahiye, to matlab yahi hota hai.

ClassLoader — jab tak zaroorat na ho, kuch load hota hi nahi

JVM startup pe aapki poori application memory mein load nahi karti. ClassLoader kisi .class file ko tab laata hai jab us class ko pehli baar actually reference kiya jaata hai — us storeroom keeper ki tarah jo ingredient tabhi nikalta hai jab recipe pehli baar uska naam leti hai.

Ye jaanna is liye kaam ka hai kyunki isse wo startup failure samajh aati hai jo har beginner ko milti hai. Agar koi class missing hai, to aapko compile time pe pata nahi chalta — pata us exact lamhe pe chalta hai jab program pehli baar use chhoota hai, ClassNotFoundException ya NoClassDefFoundError ki shakl mein. Code to theek compile hua tha; bas jab cook ne martaban uthaya to storeroom khaali tha.

🌍 Real-world example: Aap apna college project Windows laptop pe banate hain aur ek .jar file de dete hain. Aapka teammate use Mac pe chalata hai aur company wahi file Linux server pe deploy kar deti hai. Kuch dobara compile nahi hua, code ki ek line nahi badli. Teen alag machine, teen alag JVM, ek hi bytecode file.

💡 bytecode = .class file ke andar ke intermediate instructions — na insaani language, na aapke CPU ka machine code. 💡 JVM = wo program jo bytecode padh kar chalata hai; har operating system ke liye iska alag build hota hai. 💡 JRE = JVM + standard Java libraries. Java app chalane ke liye kaafi, compile karne ke liye nahi. 💡 JDK = JRE + development tools jaise javac. Developer yahi install karta hai. 💡 JIT = JVM ke andar ka compiler jo baar-baar chalne wale bytecode ko program chalte waqt native machine code mein badal deta hai. 💡 ClassLoader = JVM ka wo hissa jo kisi class ko pehli baar reference hone par memory mein load karta hai. 💡 WORA = Write Once, Run Anywhere — wo property jiski wajah se ek compiled file har us OS pe chalti hai jispe JVM hai.

Standard definition (interview me bolo): Java is a compiled and interpreted language: source code is compiled by javac into platform-independent bytecode, which is executed by the JVM, a platform-specific runtime that also uses a JIT compiler to convert hot bytecode into native machine code at runtime.

public class Hello {
    public static void main(String[] args) {
        int total = 2 + 3;
        System.out.println("Total: " + total);
    }
}

Java program ka dhaancha

Ek badi office building sochiye. Ek courier company ke liye parcel lekar aata hai. Wo courier corridor me ghoom kar darwaze nahi kholta, aur kisi bhi employee ko naam se nahi jaanta. Building me sirf ek reception desk hai — fixed jagah par, fixed naam ke saath, sadak se aane wale har banda uspe pahunch sakta hai, aur use building khud chalati hai, koi ek employee nahi jo us din ho bhi sakta hai aur nahi bhi. Parcel wahin diya jaata hai. Bahar ki duniya aur building ke beech bas yahi ek agreement hai.

Jab aap java Anatomy type karte hain, to JVM wahi courier hai. Usne abhi aapki class load ki hai aur uske baare me kuch nahi jaanta. Use ek darwaza chahiye — tay naam aur tay shakl ke saath:

public static void main(String[] args)

Is agreement ka ek bhi shabd toda, aur aapka program shuru hi nahi hoga.

shabd matlab kya hai JVM ko kyun chahiye
public class ke bahar se call ho sake JVM aapki class ke bahar hai
static class ka hai, object ka nahi startup ke waqt aapki class ka koi object hai hi nahi
void kuch return nahi karta JVM ko return value se koi kaam nahi; exit code System.exit(int) se jaata hai
main tay kiya hua naam JVM bilkul yahi naam dhoondhta hai
String[] args command-line arguments ka array bahar se input andar aane ka rasta

Asli wazan static shabd me hai. Koi normal instance method call karne ke liye pehle object chahiye: new Anatomy().run(). Lekin jis pal program shuru hota hai, abhi tak kuch chala hi nahi — to wo object banaya kisne? Agar main ko object chahiye hota, to program ko shuru hone ke liye pehle se chal raha hona padta. static is chakkar ko todta hai: static method class ka apna hota hai, aur class kisi bhi object se pehle load ho jaati hai.

Production me, String[] args hi wo cheez hai jisse ek hi jar alag-alag environment me alag behave karta hai — java -jar report.jar 2026 sales 2026 ka sales report chala deta hai, code ki ek line chhue bina. Isi wajah se Spring Boot application me bhi ek simple main rehta hai: JVM sirf wahi darwaza use karega, isliye SpringApplication.run(...) bas uske andar ki pehli line hoti hai.

🌍 Real-world example: java Anatomy.java Waquar Hirenix — main ke andar args.length 2 hai, args[0] "Waquar" hai aur args[1] "Hirenix" hai. Program ka apna naam array me nahi hota. Agar aap C se aaye hain to yahi cheez bhoolni hai: yahan args[0] pehla asli argument hai.

💡 Entry point = wo akela method jise JVM aapka program shuru karne ke liye call karta hai. 💡 Command-line argument = class name ke baad type ki gayi value, jo args me text ban kar aati hai. 💡 Overloading = ek hi naam ke do method, lekin parameter list alag. 💡 Single-file source mode = seedha java Anatomy.java chalana (Java 11+); JDK use memory me compile karta hai, disk par koi .class file nahi banti.

Asal me tootta kya hai — JDK 17 par measure kiya gaya

Interview isi jagah kuredta hai, aur bahut saara published material yahan galat hai. Pehle javac se compile kijiye, phir chalaiye:

$ java NoStatic
Error: Main method is not static in class NoStatic, please define the main method as:
   public static void main(String[] args)

Ise dhyan se padhiye: ye launcher ka apna message hai jiske baad wo band ho jaata hai, koi NoSuchMethodError throw nahi hua. Purana material aksar NoSuchMethodError batata hai — JDK 17 par aisa nahi hota. Baaki teen tarike se todne par kya milta hai, sab verified:

aapne kya badla JDK 17 kehta hai
private static void main Error: Main method not found in class PrivateMain, ...
public static int main Error: Main method must return a value of type void ...
sirf main(int), String[] nahi Error: Main method not found in class OnlyOverload, ...

⚠️ Ek baareeki jo koi batata hi nahi: source file seedha chalaiye to message alag aur chhota aata hai, kyunki report karne wala tool alag hai — java NoStatic.java par aata hai error: 'main' method is not declared 'public static'. Galti ek, message do — is baat par depend karta hai ki aapne chalaya kaise.

main overload ho sakta hai — bas apne aap chalega nahi

Language ki nazar me main ek aam method hai. Aap uske saath main(int n) likh sakte hain aur Java khushi se compile kar dega. Lekin JVM apne aap sirf main(String[]) ko hi call karta hai; aapka overload tabhi chalega jab aapka apna code use call kare. Jis class me sirf main(int) hai, wo shuru hi nahi hogi. Ye bhi legal hai: public static void main(String... args) — varargs andar se String[] hi hai, aur ye chalta hai.

Ek niyam pehle hi din milta hai: javac ke andar, public class ko usi naam ki file me rehna padta hai. Mismatch.java ke andar public class Different likhne par milta hai error: class Different is public, should be declared in a file named Different.java. Single-file source mode me ye check lagta hi nahi.

Standard definition (interview me bolo): public static void main(String[] args) is the entry point of a Java application — the fixed signature the JVM invokes to start the program: public so it is accessible from outside the class, static so it can be called before any object exists, void because it returns nothing to the JVM, and String[] args to receive command-line arguments.

public class Anatomy {
    public static void main(String[] args) {
        System.out.println("args.length = " + args.length);
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "] = " + args[i]);
        }
        main(42);
        System.out.println("back in main(String[])");
    }

    static void main(int n) {
        System.out.println("overloaded main(int) ran, n = " + n);
    }
}

Project: Student Report Card

Is chapter me aap sabse pehle yahi banayenge, aur ye jaan-boojh kar wahi program hai jo har Indian college assignment maangti hai — student marksheet. Farak sirf itna hai ki aap ise us tarah banayenge jaise iska sach me review hota: marks ka 2D array, chhote method jo ek-ek kaam karein, aur aise column jo data kuch bhi ho, seedhe rahein.

Yahan aapki apni class, koi collection ya interface kuch nahi chahiye. Wo Chapter 2 aur 3 hain. Chahiye bas wahi jo pichhle baarah topic ne diya: array, loop, String formatting, static final constants, aur methods.

Aap bana kya rahe hain

STUDENT         Maths    Physics  Chemistry    English         CS   TOTAL     AVG  GRADE
----------------------------------------------------------------------------------------
Waquar             88         76         91         65         95     415   83.00      A
Aisha              72         68         59         81         77     357   71.40      B
Rohit              45        30*         52         61         48     236   47.20      D
Priya              96         92         89         94         98     469   93.80     A+
----------------------------------------------------------------------------------------
SUBJ AVG         75.3       66.5       72.8       75.3       79.5
* = below pass mark of 33

Code se pehle ye output padhiye. Chaar cheezein dekhiye jo shuruati version me aksar nahi hoti: column format specifier se seedhe hain, space gin kar nahi; fail wala mark usi jagah * se nishaan kiya gaya hai; footer me har subject ka average hai, jiske liye row nahi column chalni padti hai; aur separator line theek table jitni chaudi hai, kyunki uski chaudai unhi constants se nikali gayi hai.

Step 1 — Data, aur wo 2D array kyun hai

String[] names = {"Waquar", "Aisha", "Rohit", "Priya"};
int[][] marks  = {
    {88, 76, 91, 65, 95},
    {72, 68, 59, 81, 77},
    {45, 30, 52, 61, 48},
    {96, 92, 89, 94, 98},
};

marks[i] student i ki row hai, aur marks[i][j] subject j me uske marks. Dono array parallel rakhe gaye hain — index i dono me wahi student hai. Yahan chalne wala ye sabse saada dhaancha hai, aur asli baat ye keh paana hai ki kyun saada hai: class ke saath aap Student[] students likhte, jo behtar hai, aur wo Chapter 2 ka kaam hai.

arrays topic se yaad kijiye ki 2D array asal me array ka array hai, isliye row ki lambai alag ho sakti hai. Yahan honi nahi chahiye, aur SUBJECTS.length hi unhe imaandar rakhta hai.

Step 2 — Constants, taaki niyam ek hi jagah rahein

static final String[] SUBJECTS = {"Maths", "Physics", "Chemistry", "English", "CS"};
static final int PASS_MARK = 33;

static isliye ki ye program ke hain, kisi object ke nahi. final isliye ki inhe koi dobara assign na kare. Bade akshar isliye ki constants ki yahi reet hai.

⚠️ Dhyan dijiye final yahan kya nahi karta: SUBJECTS ek final array hai, isliye SUBJECTS[0] = "Hindi" abhi bhi compile hota hai aur chalta bhi hai. final variable ko dobara assign hone se rokta hai, array ko badalne se nahi — bilkul jaisa static-final-keywords me verified tha. Jo constants sach me nahi badalne chahiye wo alag-alag value ya immutable list me zyada safe hain, jo Chapter 3 hai.

Step 3 — Ek method, ek kaam

static int sum(int[] row) {
    int total = 0;
    for (int m : row) total += m;
    return total;
}

Enhanced for, kyunki hume value chahiye index nahi. total ek local variable hai, isliye use koi default nahi milta aur initialise karna zaroori hai — warna compiler kehta variable total might not have been initialized.

Step 4 — Grading, upar se neeche

static String grade(double avg) {
    if (avg >= 90) return "A+";
    if (avg >= 80) return "A";
    ...
    if (avg >= PASS_MARK) return "D";
    return "FAIL";
}

Kram maayne rakhta hai aur yahi wo bug hai jo log ship kar dete hain: agar aapne pehle avg >= 33 jaancha, to har paas hone wale student ko D mil jayega, kyunki pehli match hone wali branch jeet jaati hai. Sabse upar wali seema se neeche ki taraf jaanchne se har if ko sirf apni nichli hadd batani padti hai.

Har branch turant return karti hai, isliye na else chahiye na fall-through ki fikar. Ye wo jagah bhi hai jahan switch madad nahi kar sakta — switch theek value match karta hai, range nahi.

Step 5 — Formatting: yahi report aur printout me farak karta hai

System.out.printf("%-10s", name);
System.out.printf("%8d%8.2f%7s%n", total, avg, grade(avg));

Column printf se hi seedhe hote hain. Teen specifier poori table sambhalte hain:

specifier matlab
%-10s string, 10 chaudi, baayin taraf (wo -)
%11s string, 11 chaudi, dayin taraf
%8.2f double, 8 chaudi, theek 2 decimal
%n newline — ise \n se behtar maaniye, ye platform ka line separator use karta hai

Column apni sabse lambi value se chauda hona chahiye. Is program ke pehle version me %9s tha aur Chemistry — nau character — apna hi gap kha gaya, jisse header me PhysicsChemistry chipak gaya. %11s karne se theek hua. Ye chhodne wali baat nahi hai: shuruati table ke tootne ki sabse aam wajah yahi hai.

Aur separator:

System.out.println("-".repeat(10 + 11 * SUBJECTS.length + 23));

Chaudai unhi number se nikali gayi hai jo column use karte hain, isliye chhatha subject jodne par bhi line bina kisi badlav ke sahi rehti hai. 88 dash haath se likhna aaj chalta aur kal chupchap toot jaata.

Step 6 — Footer: row nahi, column chalana

for (int c = 0; c < SUBJECTS.length; c++) {
    int colTotal = 0;
    for (int[] row : marks) colTotal += row[c];
    System.out.printf("%11.1f", (double) colTotal / marks.length);
}

Ab tak sab kuch row chal raha tha — ek waqt me ek student. Har subject ka average nikalne ke liye column chalni padti hai, yaani bahar wala loop subject hai aur andar wala us tay column par student par student badhta hai. Wahi data, doosri disha se — aur dono ke beech aaram se aana-jaana hi 2D array wale sawalon ka zyadatar hissa hai.

⚠️ (double) colTotal / marks.length — ye cast zaroori hai. Iske bina dono taraf int hote, isliye 236 / 5 47 aata, 47.2 nahi, aur aapki report ke saare decimal zero ho jaate. Ye data-types-variables wala integer division ka niyam asli code me dikh raha hai, aur ye chupchap fail hota hai.

Step 7 — Fail hone par usi jagah nishaan

System.out.printf("%11s", m < PASS_MARK ? m + "*" : String.valueOf(m));

Ternary do string me se ek chunta hai, aur dono branch ko String dena zaroori hai — isi liye khaali m nahi, String.valueOf(m). Specifier %11d nahi %11s hai, isliye star ho ya na ho, column seedha rehta hai. Output me verified: Rohit ka 30* baaki sabke saade number ke saath seedha khada hai.

Poora program

Is page ka code block poora program hai, aur dikhaya gaya output theek wahi hai jo JDK 17 par chhapa. Ise chalaiye, phir jaan-boojh kar todiye: (double) cast hataiye aur har average poora number bante dekhiye; grade ki branch ka kram ulta kijiye aur har student ko D bante dekhiye; %11s ko wapas %9s kijiye aur header ko girte dekhiye. In me se har ek wo bug hai jo aap warna ek baar ship kar hi denge.

Isse aage badhaiye

  1. Rank column jodiye — student ko total se sort kijiye. Arrays.sort yahan seedha kaam nahi karega, kyunki marks sort karne par names ko bhi saath khiskana padta hai; sochiye kyun, aur ye bhi ki Chapter 2 ki Student class ye dikkat poori tarah kaise khatam kar deti hai.
  2. Sirf average nahi, har subject ka topper print kijiye — ek aur column walk, jisme sabse achhi value aur uska index dono rakhne padte hain.
  3. Marks hard-code karne ki jagah args se padhiye, Integer.parseInt se, aur yaad rakhiye ki jo number na ho uspe wo NumberFormatException phenkta hai.

Kab use karein: ye shakl — parallel array plus chhote static method — tab sahi jawab hai jab data tay ho, chhota ho, aur aap abhi kisi asli cheez ka model nahi bana rahe. Written round me jab "no collections" likha ho to theek yahi ummeed hoti hai.

Kab NAHI use karein: parallel array usi pal bekaar ho jaate hain jab wo aapas me bekadam ho sakein — ek ko sort karna aur doosre ko nahi, ya ek me student jodna aur doosre me bhoolna, poori report ko bina kisi error ke chupchap kharab kar deta hai. Wahi wo jagah hai jahan aapko Student class (Chapter 2) ya List (Chapter 3) chahiye. Yahan haath se badhne wala array bhi mat banaiye; agar student ki ginti pehle se pata nahi, to aap is dhaanche se aage nikal chuke hain. Aur formatting ko sum ya grade ke andar mat daaliye — jo method hisaab bhi kare aur print bhi, wo na dobara use ho sakta hai na test, aur isi liye wo do value lautate hain aur teen print method uske alawa kuch karte hi nahi.

Standard definition (interview me bolo): This project builds a formatted student marksheet from a 2D int array of marks and a parallel String array of names, using static final constants for the subject list and pass mark, small single-purpose methods for the total and the grade, and System.out.printf format specifiers for column alignment. Row traversal produces per-student totals and averages, and column traversal produces per-subject averages.

public class StudentReport {

    static final String[] SUBJECTS = {"Maths", "Physics", "Chemistry", "English", "CS"};
    static final int PASS_MARK = 33;

    public static void main(String[] args) {
        String[] names  = {"Waquar", "Aisha", "Rohit", "Priya"};
        int[][] marks   = {
            {88, 76, 91, 65, 95},
            {72, 68, 59, 81, 77},
            {45, 30, 52, 61, 48},
            {96, 92, 89, 94, 98},
        };

        printHeader();
        for (int i = 0; i < names.length; i++) {
            printRow(names[i], marks[i]);
        }
        printFooter(marks);
    }

    static void printHeader() {
        System.out.printf("%-10s", "STUDENT");
        for (String s : SUBJECTS) System.out.printf("%11s", s);
        System.out.printf("%8s%8s%7s%n", "TOTAL", "AVG", "GRADE");
        System.out.println("-".repeat(10 + 11 * SUBJECTS.length + 23));
    }

    static void printRow(String name, int[] row) {
        int total = sum(row);
        double avg = (double) total / row.length;
        System.out.printf("%-10s", name);
        for (int m : row) System.out.printf("%11s", m < PASS_MARK ? m + "*" : String.valueOf(m));
        System.out.printf("%8d%8.2f%7s%n", total, avg, grade(avg));
    }

    static void printFooter(int[][] marks) {
        System.out.println("-".repeat(10 + 11 * SUBJECTS.length + 23));
        System.out.printf("%-10s", "SUBJ AVG");
        for (int c = 0; c < SUBJECTS.length; c++) {
            int colTotal = 0;
            for (int[] row : marks) colTotal += row[c];
            System.out.printf("%11.1f", (double) colTotal / marks.length);
        }
        System.out.println();
        System.out.println("* = below pass mark of " + PASS_MARK);
    }

    static int sum(int[] row) {
        int total = 0;
        for (int m : row) total += m;
        return total;
    }

    static String grade(double avg) {
        if (avg >= 90) return "A+";
        if (avg >= 80) return "A";
        if (avg >= 70) return "B";
        if (avg >= 60) return "C";
        if (avg >= PASS_MARK) return "D";
        return "FAIL";
    }
}

Core Javainterview questions & answers

10 sample questions below — 184+ in the full bank inside.

Bytecode kya hota hai, aur kya ye machine code hi hai?

Bytecode wo intermediate instructions hain jo javac ek .class file me likhta hai. Ye na insaan ke padhne wala source hai aur na aapke CPU ka machine code — ye beech ki ek language hai jise ek khaas program, yaani JVM, padhna jaanta hai. Machine code kisi ek processor aur operating system se bandha hota hai; bytecode jaan-boojh kar nahi hota.

In simple terms: Bytecode aapki language aur machine ki language ke beech me baithta hai, us standard recipe card ki tarah jo na aapki handwriting me hai na kitchen ki local boli me — ek format jispe sab raazi hain. Jaise 'javac Hello.java' chalaiye to Hello.class banti hai; uske andar kya hai ye 'javap -c Hello.class' se dekh sakte hain, jahan iconst_5 aur istore_1 jaise JVM instructions dikhte hain, jo x86 ya ARM instructions nahi hain.

Java me wrapper class kya hoti hai?

Wrapper class primitive type ka object roop hai — int ke liye Integer, char ke liye Character, double ke liye Double, waghera. Value wahi rehti hai par ab wo ek asli object hai, isliye wo har us jagah ja sakta hai jahan object chahiye, aur wo null bhi ho sakta hai. Kaam ke static helper bhi wrapper me hi milte hain, jaise Integer.MAX_VALUE aur Integer.parseInt.

In simple terms: Ek filing office sirf lifafe leta hai — khula sikka daraaz me nahi ja sakta kyunki uspe koi label hi nahi hai aur file karne ka koi aadhaar nahi. Wrapper wahi label wala lifafa hai jo primitive ke upar chadh jaata hai: andar sikka wahi, par ab system me fit ho gaya. Jaise int n = 5; khula sikka hai, aur Integer boxed = 5; wahi 5 hai lifafe ke andar, jo aapko Integer.MAX_VALUE bhi deta hai, yaani 2147483647.

isEmpty() aur isBlank() mein kya farq hai?

isEmpty() sirf tab true hai jab length zero ho. isBlank(), jo Java 11 mein aaya, tab true hai jab string khaali ho ya usme sirf whitespace ho. To teen spaces wali string par isEmpty() false deta hai jabki isBlank() true — aur form field validate karte waqt aapko aam taur par yahi chahiye hota hai.

In simple terms: Khaali page aur sirf pencil ke halke nishan wala page do alag cheezein hain: ek sach mein khaali hai, doosra technically khaali nahi hai. Example: " ".isEmpty() false hai par " ".isBlank() true hai, isliye jis user ne name field mein sirf spaces daale wo pehla check paas kar jaata hai aur doosra fail karta hai.

String par charAt, indexOf aur split samjhaiye.

charAt(i) zero-based index par ka char deta hai, indexOf(text) wo zero-based position deta hai jahan text pehli baar aata hai, aur na mile to -1, aur split(regex) har match par kaat kar String array deta hai. " Waquar Hirenix " par charAt(2) W hai, indexOf("Hirenix") 9 hai aur split(" ") [Waquar, Hirenix] deta hai. Teeno string ko padhte hain; koi bhi use badalta nahi.

In simple terms: String ko 0 se shuru hote numbered boxes samajhiye: charAt ek box kholta hai, indexOf batata hai ki koi shabd kis box se shuru hota hai, aur split boxes ki line ko har separator par kaat deta hai. Example: " Waquar Hirenix " mein shuru ke do spaces box 0 aur 1 hain, isiliye charAt(2) W hai.

Asli code mein aap String, StringBuilder ya StringBuffer kab chunte hain?

Fixed ya kabhi-kabhaar badalne wale text ke liye String — wo immutable hai, poolable hai aur share karna safe hai. Jab bhi aap loop mein ya ek hi thread mein kai steps ke across text jod rahe hain to StringBuilder, jo lagbhag saare asli code ko cover kar leta hai. StringBuffer tabhi uthaiye jab sach mein ek hi buffer object par kai threads se append ho raha ho, kyunki uska append synchronized hai aur yahi synchronization use slower option banata hai.

In simple terms: String chhapa hua page hai, StringBuilder aapka apna whiteboard hai, StringBuffer ek shared whiteboard hai jiske marker par lock laga hai — lock ki keemat tabhi deni hai jab log sach mein share kar rahe hon. Example: loop ke andar CSV row banana StringBuilder ka kaam hai; bani hui row ko baad mein rakhna String ka kaam hai.

String a = "hello"; a.toUpperCase(); a.concat(" world"); — ab a kya hai?

Abhi bhi bilkul "hello". String ka har wo method jo dikhne mein string edit karta lagta hai asal mein naya String return karta hai aur original ko waisa ka waisa chhod deta hai, isliye result assign kiye bina call karna matlab result phenk dena. Variable ko badlaav dikhe iske liye a = a.toUpperCase(); likhna padega.

In simple terms: Printer se uppercase copy maangne se aapke haath ka page nahi badalta — agar naya page uthaya hi nahi to kuch hua hi nahi. Example: a.toUpperCase(); ke baad a "hello" hi rehta hai, jabki a = a.toUpperCase(); ke baad a "HELLO" ban jaata hai.

JVM, JRE aur JDK me kya farq hai?

Ye teen layers hain, ek doosre ke andar: JDK ke andar JRE hai, aur JRE ke andar JVM hai. JVM wo engine hai jo bytecode execute karta hai; JRE matlab JVM plus standard Java libraries, jo kisi Java application ko chalane ke liye kaafi hai; JDK matlab JRE plus development tools jaise javac, javap aur jar, jo ek developer install karta hai.

In simple terms: Teen dabbe sochiye, ek doosre ke andar packed. Sabse chhota dabba JVM hai — sirf wo engine jo aapka compiled code chalata hai. Us engine ke saath String aur Math jaisi ready-made classes ka toolkit jod dijiye to JRE ban jaata hai, jo app chalane ke liye kaafi hai. Uske saath code banane wali machine (javac) bhi jod dijiye to JDK ban jaata hai. Jaise ek production Linux server pe aksar sirf JRE hota hai, kyunki use aapki .jar chalani hai, compile nahi karni.

trim() aur strip() kya karte hain, aur length() kya ginta hai?

Dono aage-peeche ki whitespace hata kar naya String return karte hain; original waisa ka waisa rehta hai kyunki String immutable hai. length() har character ginta hai, spaces samet, isliye wo trimming se pehle ka naap hai. String " Waquar Hirenix " par length() 18 hai aur trim() aur strip() dono "Waquar Hirenix" dete hain.

In simple terms: trim aur strip aise hain jaise chhape hue page ke khaali margins kaat dena — aapko naya page milta hai, purane page ke margins waise hi rehte hain. Example: " Waquar Hirenix ".length() 18 hai, aur " Waquar Hirenix ".trim() "Waquar Hirenix" deta hai.

Java platform independent kaise hai?

javac aapke source ko kisi ek khaas CPU ya operating system ke machine code me compile nahi karta — wo bytecode banata hai, jo .class file me hota hai aur har platform pe ek jaisa rehta hai. Har operating system ki apni JVM build hoti hai, aur wo sab wahi ek bytecode padhti hain. Isi baat ko WORA — Write Once, Run Anywhere — kehte hain.

In simple terms: Aap ek recipe likhte hain aur use ek standard recipe card me badal dete hain, jise duniya ki har professional kitchen pehle se padhna jaanti hai. Delhi, Dubai, Toronto — har sheher me apna cook hai jo wahi card padh kar wahan jo stove available hai usi se kaam chala leta hai. Jaise Windows laptop pe bani .jar seedha Linux server pe copy hoti hai aur bas chal jaati hai; kuch dobara compile nahi hota, sirf cook badalta hai.

JIT compiler kya karta hai?

JVM shuruat bytecode ko ek-ek instruction interpret karke karti hai. JIT — Just-In-Time — compiler dekhta rehta hai ki kaunse methods baar-baar chal rahe hain, yaani hot methods, aur unhe program chalte-chalte asli native machine code me compile kar deta hai. Uske baad JVM unhe interpret karna band kar deti hai aur seedha compiled version call karti hai.

In simple terms: Cook dekhta hai ki wahi dish sau baar order ho rahi hai, to wo use pehle se prep kar leta hai. Pehli plate sabse zyada waqt leti hai; do sauvin plate tez aati hai. Jaise ek loop jo laakhon baar chalta hai, wahi hot path hai jise JIT compile karega, isliye baad wale iterations native code chala rahe hote hain, interpret nahi ho rahe hote.

174+ more Core Java questions inside

Create a free account to read the full question bank, learn every topic, and practise with an AI mock interview.

Unlock all questions — free

Ready to practise Core Java?

Unlock every topic free, then face an AI interviewer that asks follow-ups and grades your answers.