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)
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
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
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:
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 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.
Next steps
Related posts
- Common C++ beginner mistakes
- HTML & CSS intro
- Variables and types (Java)
- Classes and objects (Java)
- Collections (Java)
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. Start Java today: install OpenJDK 21, set JAVA_HOME, compile with javac, run on the JVM, and explore IntelliJ, Eclipse, … 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.
Q. 선행으로 읽으면 좋은 글은?
A. 각 글 하단의 이전 글 또는 관련 글 링크를 따라가면 순서대로 배울 수 있습니다. Java 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.
Q. 더 깊이 공부하려면?
A. cppreference와 해당 라이브러리 공식 문서를 참고하세요. 글 말미의 참고 자료 링크도 활용하면 좋습니다.
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- Java 변수와 타입 | 기본 타입, 참조 타입, 형변환
- Kotlin 시작하기 | Android 공식 언어 완벽 입문
- [Java Variables and Types | Primitives· References](/en/blog/java-series-02-variables/
이 글에서 다루는 키워드 (관련 검색어)
Java, JDK, JVM, Beginner, Tutorial 등으로 검색하시면 이 글이 도움이 됩니다.