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 | |
|---|---|
| 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
- Variables and types
- Classes and OOP
- Collections
Related posts
- Common C++ beginner mistakes
- HTML & CSS intro
- Variables and types (Java)
- Classes and objects (Java)
- Collections (Java)