[2026] Java for Beginners | Install the JDK and Write Hello World

[2026] Java for Beginners | Install the JDK and Write Hello World

이 글의 핵심

Start Java today: install OpenJDK 21, set JAVA_HOME, compile with javac, run on the JVM, and explore IntelliJ, Eclipse, or VS Code—plus syntax, classes, and your first programs.

Introduction

Write once, run anywhere

Java is an object-oriented language (originally from Sun, now stewarded by Oracle). Write Once, Run Anywhere (WORA) means you compile to bytecode once, then the Java Virtual Machine (JVM) on each platform interprets or JIT-compiles it—similar in spirit to shipping one blueprint and building with local materials. Highlights:

  • Platform independence via the JVM
  • Object-oriented programming model
  • Garbage collection for automatic memory management
  • Strong static typing with compile-time checks
  • Huge standard library and ecosystem
  • Built-in threading primitives
  • Security features (classloader, bytecode verification) Where Java shows up:
  • Enterprise: Spring, large services
  • Android app development
  • Web: Servlets, JSP, Spring Boot
  • Big data: Hadoop, Spark
  • Games: e.g. Minecraft

1. Installing the JDK

JVM vs JRE vs JDK

Role
JVMExecutes bytecode
JREJVM + standard libraries (runtime)
JDKJRE + javac, tools, debuggers
Developers install a JDK.

Windows

  1. Download Oracle JDK or free OpenJDK / Temurin (recommended).
  2. Install, e.g. C:\Program Files\Java\jdk-21
  3. Set environment variables:
JAVA_HOME=C:\Program Files\Java\jdk-21
PATH=%JAVA_HOME%\bin;%PATH%

Verify:

java -version
javac -version

macOS (Homebrew)

다음은 간단한 bash 코드 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

brew install openjdk@21
sudo ln -sfn /opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk \
  /Library/Java/JavaVirtualMachines/openjdk-21.jdk
java -version

Linux

아래 코드는 bash를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-21-jdk
# RHEL/CentOS
sudo yum install java-21-openjdk-devel
java -version
javac -version

2. Hello World

HelloWorld.java

아래 코드는 java를 사용한 구현 예제입니다. 함수를 통해 로직을 구현합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}
  • public class HelloWorld: public class name must match the file name.
  • public static void main(String[] args): entry point.
  • System.out.println: print a line to standard output.

Compile and run

javac HelloWorld.java    # produces HelloWorld.class
java HelloWorld          # runs on the JVM
HelloWorld.java → javac → HelloWorld.class → java → JVM → output

Command-line arguments

아래 코드는 java를 사용한 구현 예제입니다. 함수를 통해 로직을 구현합니다, 반복문으로 데이터를 처리합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

public class Args {
    public static void main(String[] args) {
        System.out.println("Arg count: " + args.length);
        
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "]: " + args[i]);
        }
    }
}
javac Args.java
java Args hello java 123

3. IDE setup

Eclipse

VS Code

  • Install Extension Pack for Java
  • Command Palette: Java: Create Java Project

4. Basic syntax

Variables and types

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Variables {
    public static void main(String[] args) {
        byte b = 127;
        short s = 32767;
        int age = 25;
        long population = 7_800_000_000L;
        
        float pi = 3.14f;
        double price = 19.99;
        
        boolean isActive = true;
        char grade = 'A';
        
        String name = "Jane Doe";
        String message = "Hello!";
        
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Price: " + price);
    }
}

Constants

아래 코드는 java를 사용한 구현 예제입니다. 함수를 통해 로직을 구현합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

public class Constants {
    public static void main(String[] args) {
        final int MAX_SIZE = 100;
        final double PI = 3.14159;
        final String APP_NAME = "MyApp";
        
        System.out.println("Max size: " + MAX_SIZE);
    }
}

Operators

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Operators {
    public static void main(String[] args) {
        int a = 10, b = 3;
        System.out.println("Sum: " + (a + b));
        System.out.println("Diff: " + (a - b));
        System.out.println("Product: " + (a * b));
        System.out.println("Quotient: " + (a / b));
        System.out.println("Remainder: " + (a % b));
        
        System.out.println(a > b);
        System.out.println(a == b);
        System.out.println(a != b);
        
        boolean x = true, y = false;
        System.out.println(x && y);
        System.out.println(x || y);
        System.out.println(!x);
        
        int count = 0;
        count++;
        System.out.println(count);
        count--;
        System.out.println(count);
    }
}

Conditionals

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다, 조건문으로 분기 처리를 수행합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Conditionals {
    public static void main(String[] args) {
        int score = 85;
        
        if (score >= 90) {
            System.out.println("A");
        } else if (score >= 80) {
            System.out.println("B");
        } else if (score >= 70) {
            System.out.println("C");
        } else {
            System.out.println("F");
        }
        
        String day = "Monday";
        switch (day) {
            case "Monday":
                System.out.println("Monday");
                break;
            case "Friday":
                System.out.println("Friday");
                break;
            default:
                System.out.println("Weekday");
        }
        
        String result = (score >= 60) ? "Pass" : "Fail";
        System.out.println(result);
    }
}

Loops

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다, 반복문으로 데이터를 처리합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Loops {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println("i = " + i);
        }
        
        int count = 0;
        while (count < 3) {
            System.out.println("count = " + count);
            count++;
        }
        
        int num = 0;
        do {
            System.out.println("num = " + num);
            num++;
        } while (num < 3);
        
        int[] numbers = {1, 2, 3, 4, 5};
        for (int n : numbers) {
            System.out.println(n);
        }
    }
}

5. Methods

Definition and overloading

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Calculator {
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static void printSum(int a, int b) {
        System.out.println("Sum: " + (a + b));
    }
    
    public static int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public static double add(double a, double b) {
        return a + b;
    }
    
    public static void main(String[] args) {
        System.out.println("add(10,20): " + add(10, 20));
        System.out.println("add(10,20,30): " + add(10, 20, 30));
        System.out.println("add(10.5,20.3): " + add(10.5, 20.3));
        printSum(5, 7);
    }
}

Varargs

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다, 반복문으로 데이터를 처리합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class VarArgs {
    public static int sum(int....numbers) {
        int total = 0;
        for (int n : numbers) {
            total += n;
        }
        return total;
    }
    
    public static void main(String[] args) {
        System.out.println(sum(1, 2, 3));
        System.out.println(sum(1, 2, 3, 4, 5));
        System.out.println(sum(10));
    }
}

6. Classes and objects

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다, 조건문으로 분기 처리를 수행합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public Person() {
        this("Unknown", 0);
    }
    
    public void introduce() {
        System.out.println("Hi, I'm " + name + ".");
        System.out.println("Age: " + age);
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
}

아래 코드는 java를 사용한 구현 예제입니다. 함수를 통해 로직을 구현합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person("Jane Doe", 25);
        Person person2 = new Person("John Smith", 30);
        Person person3 = new Person();
        
        person1.introduce();
        person2.introduce();
        
        System.out.println("Name: " + person1.getName());
        person1.setAge(26);
        System.out.println("New age: " + person1.getAge());
    }
}

7. Arrays

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다, 반복문으로 데이터를 처리합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class ArrayDemo {
    public static void main(String[] args) {
        int[] numbers1 = new int[5];
        numbers1[0] = 10;
        numbers1[1] = 20;
        
        int[] numbers2 = {1, 2, 3, 4, 5};
        int[] numbers3 = new int[]{10, 20, 30};
        
        System.out.println("Length: " + numbers2.length);
        
        for (int i = 0; i < numbers2.length; i++) {
            System.out.println("numbers2[" + i + "] = " + numbers2[i]);
        }
        
        for (int num : numbers2) {
            System.out.println(num);
        }
        
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        System.out.println(matrix[1][2]);
    }
}

8. Practical examples

Example 1: Calculator (Scanner)

import java.util.Scanner;
public class CalculatorApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("First number: ");
        double num1 = scanner.nextDouble();
        
        System.out.print("Operator (+, -, *, /): ");
        String operator = scanner.next();
        
        System.out.print("Second number: ");
        double num2 = scanner.nextDouble();
        
        double result = 0;
        
        switch (operator) {
            case "+":
                result = num1 + num2;
                break;
            case "-":
                result = num1 - num2;
                break;
            case "*":
                result = num1 * num2;
                break;
            case "/":
                if (num2 != 0) {
                    result = num1 / num2;
                } else {
                    System.out.println("Cannot divide by zero.");
                    return;
                }
                break;
            default:
                System.out.println("Invalid operator.");
                return;
        }
        
        System.out.println("Result: " + result);
        scanner.close();
    }
}

Example 2: Student records

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다, 조건문으로 분기 처리를 수행합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class Student {
    private String name;
    private int studentId;
    private double gpa;
    
    public Student(String name, int studentId, double gpa) {
        this.name = name;
        this.studentId = studentId;
        this.gpa = gpa;
    }
    
    public void printInfo() {
        System.out.println("=== Student ===");
        System.out.println("Name: " + name);
        System.out.println("ID: " + studentId);
        System.out.println("GPA: " + gpa);
    }
    
    public String getGrade() {
        if (gpa >= 4.0) return "A";
        else if (gpa >= 3.0) return "B";
        else if (gpa >= 2.0) return "C";
        else return "F";
    }
    
    public static void main(String[] args) {
        Student s1 = new Student("Jane Doe", 20240001, 3.8);
        Student s2 = new Student("John Smith", 20240002, 4.2);
        
        s1.printInfo();
        System.out.println("Grade band: " + s1.getGrade());
        System.out.println();
        
        s2.printInfo();
        System.out.println("Grade band: " + s2.getGrade());
    }
}

Example 3: Bank account

다음은 java를 활용한 상세한 구현 코드입니다. 함수를 통해 로직을 구현합니다, 조건문으로 분기 처리를 수행합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

public class BankAccount {
    private String accountNumber;
    private String owner;
    private double balance;
    
    public BankAccount(String accountNumber, String owner) {
        this.accountNumber = accountNumber;
        this.owner = owner;
        this.balance = 0.0;
    }
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("Deposited: " + amount);
            System.out.println("Balance: " + balance);
        } else {
            System.out.println("Deposit must be positive.");
        }
    }
    
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("Withdrew: " + amount);
            System.out.println("Balance: " + balance);
        } else {
            System.out.println("Withdrawal failed (insufficient funds or invalid amount).");
        }
    }
    
    public void printInfo() {
        System.out.println("=== Account ===");
        System.out.println("Number: " + accountNumber);
        System.out.println("Owner: " + owner);
        System.out.println("Balance: " + balance);
    }
    
    public static void main(String[] args) {
        BankAccount account = new BankAccount("123-456-789", "Jane Doe");
        
        account.printInfo();
        account.deposit(10000);
        account.deposit(5000);
        account.withdraw(3000);
        account.withdraw(20000);
        account.printInfo();
    }
}

9. Common beginner mistakes

Class name vs file name

Public class Hello must live in Hello.java.

Wrong main signature

Must be public static void main(String[] args).

Missing semicolons

Every statement needs ; where Java requires it.

Case sensitivity

System not system.

10. Compile and run pipeline

Source (.java) → javac → bytecode (.class) → JVM (class loading, verification, JIT) → native execution

Same .class runs on Windows, macOS, and Linux JVMs.

10. Practical tips

  • Follow conventions: PascalCase types, camelCase members, UPPER_SNAKE_CASE constants.
  • Use //, /* */, and Javadoc /** */ for documentation.
  • Organize code with package and import.
  • Debug with IDE breakpoints and step commands.
  • Prefer LTS releases such as 17 or 21 for new projects.

12. Modern Java snapshots

VersionNotes
Java 8Lambdas, streams, Optional
Java 11var, HTTP client, LTS
Java 17Sealed classes, pattern matching for instanceof, LTS
Java 21Virtual threads, pattern matching refinements, LTS
LTS releases (8, 11, 17, 21) are common choices for production.
다음은 java를 활용한 상세한 구현 코드입니다. 조건문으로 분기 처리를 수행합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.
// Java 10+: local variable type inference
var name = "Jane";
var age = 25;
var list = new java.util.ArrayList<String>();
// Java 14+: switch expressions (illustrative)
String day = "Mon";
String kind = switch (day) {
    case "Mon", "Tue", "Wed", "Thu", "Fri" -> "Weekday";
    case "Sat", "Sun" -> "Weekend";
    default -> "Unknown";
};
// Java 16+: records (example name distinct from class Person above)
record Contact(String name, int age) {}
Contact c = new Contact("Jane", 25);
System.out.println(c.name());

See release notes when upgrading.

Summary

  1. Java targets the JVM with portable bytecode.
  2. JDK includes javac and tools.
  3. Compile with javac, run with java ClassName.
  4. Entry point: public static void main(String[] args).
  5. Everything lives in classes; use strong typing and OOP patterns.

Next steps


... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3