Java for Beginners | Install the JDK and Write Hello World

Java for Beginners | Install the JDK and Write Hello World

이 글의 핵심

Java from zero: JDK vs JRE vs JVM, Hello World, IDE setup, syntax tour, classes, arrays, and compile/run flow.

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)

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

Linux

# 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

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

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

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

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

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

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

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

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

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

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;
        }
    }
}
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

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

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

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 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

  • Variables and types
  • Classes and OOP
  • Collections

  • Common C++ beginner mistakes
  • HTML & CSS intro
  • Variables and types (Java)
  • Classes and objects (Java)
  • Collections (Java)