[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 | |
|---|---|
| JVM | Executes bytecode |
| JRE | JVM + standard libraries (runtime) |
| JDK | JRE + javac, tools, debuggers |
| Developers install a JDK. |
Windows
- Download Oracle JDK or free OpenJDK / Temurin (recommended).
- Install, e.g.
C:\Program Files\Java\jdk-21 - 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
IntelliJ IDEA (popular)
- IntelliJ IDEA Community (free)
- New project: Java, JDK 21, build system as needed
- Run: Shift+F10, Debug: Shift+F9
Eclipse
- Eclipse IDE for Java Developers
- File → New → Java Project
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:
PascalCasetypes,camelCasemembers,UPPER_SNAKE_CASEconstants. - Use
//,/* */, and Javadoc/** */for documentation. - Organize code with
packageandimport. - Debug with IDE breakpoints and step commands.
- Prefer LTS releases such as 17 or 21 for new projects.
12. Modern Java snapshots
| Version | Notes |
|---|---|
| Java 8 | Lambdas, streams, Optional |
| Java 11 | var, HTTP client, LTS |
| Java 17 | Sealed classes, pattern matching for instanceof, LTS |
| Java 21 | Virtual 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
- Java targets the JVM with portable bytecode.
- JDK includes javac and tools.
- Compile with
javac, run withjava ClassName. - Entry point: public static void main(String[] args).
- Everything lives in classes; use strong typing and OOP patterns.