Chuyển tới nội dung chính

Cài đặt môi trường phát triển

Mục tiêu bài học

Sau bài này, bạn sẽ:

  • Cài đặt thành công JDK và cấu hình biến môi trường trên Windows, macOS, hoặc Linux
  • Chọn và cài đặt IDE phù hợp cho Java development (IntelliJ IDEA, VS Code, hoặc Eclipse)
  • Viết, compile và chạy chương trình Hello World đầu tiên
  • Hiểu được quy trình compile và execute Java code qua javac và java commands
  • Khắc phục các lỗi thường gặp khi setup môi trường Java

Bài trước: Java là gì? Tổng quan về Java — Giới thiệu về Java và các khái niệm cơ bản. Bài này sẽ hướng dẫn cài đặt môi trường để bắt đầu lập trình Java.

Để bắt đầu lập trình Java, bạn cần setup môi trường phát triển. Bài học này sẽ hướng dẫn chi tiết từng bước cài đặt JDK, IDE và viết chương trình đầu tiên.

Bước 1: Cài đặt JDK (Java Development Kit)

Chọn JDK Distribution

Có nhiều JDK distributions, tất cả đều tuân theo Java specification:

DistributionMiễn phíKhuyên dùng choLink
Oracle JDK❌ (Commercial license)Production enterpriseoracle.com/java
Oracle OpenJDK✅ Open sourceDevelopment, productionjdk.java.net
Adoptium (Eclipse Temurin)✅ Open sourceKhuyên dùng!adoptium.net
Amazon Corretto✅ Open sourceAWS environmentsaws.amazon.com/corretto
Azul Zulu✅ Open sourceCross-platformazul.com/downloads
Khuyến nghị

Adoptium (Eclipse Temurin) là lựa chọn tốt nhất cho beginners:

  • ✅ Miễn phí, open source
  • ✅ Có installers cho mọi OS
  • ✅ LTS support
  • ✅ Được cộng đồng tin dùng

Chọn phiên bản Java

Nên cài Java 17 hoặc Java 21 (LTS versions):

  • Java 17: Ổn định, nhiều tutorials
  • Java 21: Mới nhất, có virtual threads, modern features

Trong tutorial này, chúng ta dùng Java 17 LTS.

Cài đặt JDK trên Windows

Bước 1: Download JDK

  1. Truy cập adoptium.net
  2. Chọn:
    • Version: 17 (LTS)
    • Operating System: Windows
    • Architecture: x64 (64-bit)
  3. Click Download file .msi

Bước 2: Cài đặt

  1. Double-click file .msi vừa download
  2. Click NextNextInstall
  3. Installer sẽ tự động add vào PATH (nếu check option Add to PATH)
  4. Click Finish

Bước 3: Cấu hình biến môi trường

Mở Command Prompt và kiểm tra:

java -version

Kết quả mong đợi:

openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment Temurin-17.0.9+9 (build 17.0.9+9)
OpenJDK 64-Bit Server VM Temurin-17.0.9+9 (build 17.0.9+9, mixed mode, sharing)

Nếu hiện lỗi 'java' is not recognized, cần thêm vào PATH manually.

Hiểu rõ JAVA_HOME và PATH

Tại sao cần JAVA_HOME và PATH?

💡 Cách nhớ: JAVA_HOME như "địa chỉ nhà"
  • JAVA_HOME: Địa chỉ nơi JDK được cài đặt — giống "địa chỉ nhà"
  • PATH: Danh sách các địa chỉ mà OS sẽ tìm khi bạn gọi một lệnh — giống "danh bạ điện thoại"

Khi bạn gõ java hoặc javac, OS tìm trong PATH để biết nơi thực thi chương trình đó.

JAVA_HOME:

  • Environment variable trỏ đến thư mục root của JDK
  • Ví dụ: C:\Program Files\Eclipse Adoptium\jdk-17.0.9.9-hotspot
  • Ai dùng? Nhiều tools (Maven, Gradle, Tomcat, IDE) cần biết JDK ở đâu

PATH:

  • Environment variable chứa danh sách các thư mục chứa executable files
  • Khi gõ java, OS tìm trong PATH để tìm java.exe
  • Thêm %JAVA_HOME%\bin vào PATH → OS tìm được java.exe, javac.exe

Cách hoạt động:

Cách thêm JAVA_HOME và PATH

  1. Tìm đường dẫn cài đặt JDK:

    • Thường ở: C:\Program Files\Eclipse Adoptium\jdk-17.0.9.9-hotspot\
  2. Mở Environment Variables:

    • Right-click This PCProperties
    • Click Advanced system settings
    • Click Environment Variables
  3. Tạo biến JAVA_HOME:

    • Trong System variables, click New
    • Variable name: JAVA_HOME
    • Variable value: C:\Program Files\Eclipse Adoptium\jdk-17.0.9.9-hotspot
    • Click OK
  4. Thêm vào PATH:

    • Tìm biến Path trong System variables
    • Click EditNew
    • Thêm: %JAVA_HOME%\bin
    • Click OKOKOK
Chú ý: Tại sao dùng %JAVA_HOME%\bin?

Thay vì ghi trực tiếp C:\Program Files\...\bin, dùng %JAVA_HOME%\bin có lợi:

  • Dễ thay đổi: Chỉ cần update JAVA_HOME khi upgrade JDK
  • Portable: Copy config sang máy khác dễ dàng
  • Tools compatibility: Maven, Gradle, IDE đều đọc JAVA_HOME
  1. Restart Command Prompt và test lại:
java -version
javac -version

Verify JAVA_HOME:

echo %JAVA_HOME%
# Output: C:\Program Files\Eclipse Adoptium\jdk-17.0.9.9-hotspot

Cài đặt JDK trên macOS

Bước 1: Download JDK

  1. Truy cập adoptium.net
  2. Chọn:
    • Version: 17 (LTS)
    • Operating System: macOS
    • Architecture: x64 hoặc aarch64 (M1/M2)
  3. Download file .pkg

Bước 2: Cài đặt

  1. Double-click file .pkg
  2. Follow hướng dẫn → Click Install
  3. Nhập password khi được yêu cầu

Bước 3: Kiểm tra cài đặt

Mở Terminal và chạy:

java -version
javac -version

Bước 4: Cấu hình JAVA_HOME (Optional)

Thêm vào ~/.zshrc hoặc ~/.bash_profile:

# Mở file config
nano ~/.zshrc

# Thêm dòng này:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

# Save (Ctrl+O, Enter, Ctrl+X)

# Apply changes
source ~/.zshrc

Verify:

echo $JAVA_HOME
# Output: /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home

Quản lý nhiều Java versions

Trong thực tế, developers thường làm việc với nhiều projects dùng các Java versions khác nhau. Version managers giúp switch giữa các versions dễ dàng.

Option 1: SDKMAN (Khuyến nghị — Cross-platform)

SDKMAN quản lý nhiều JDK versions, Maven, Gradle, v.v. — hoạt động trên Linux, macOS, Windows (Git Bash/WSL).

# Cài đặt SDKMAN
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# List tất cả Java versions có sẵn
sdk list java

# Cài đặt Java 17
sdk install java 17.0.9-tem # Temurin 17

# Cài đặt Java 21
sdk install java 21.0.1-tem # Temurin 21

# Switch version cho session hiện tại
sdk use java 17.0.9-tem

# Set default global version
sdk default java 17.0.9-tem

# Verify
java -version

Project-specific version:

# Trong project folder
sdk env init

# File .sdkmanrc được tạo:
java=17.0.9-tem

# Khi cd vào folder, SDKMAN tự động switch version!
💡 Cách nhớ: SDKMAN như "nvm" cho Java

Nếu bạn dùng Node.js, SDKMAN giống nvm (Node Version Manager) — quản lý nhiều versions, switch dễ dàng.

Option 2: jenv (macOS / Linux only)

jenv chuyên quản lý Java versions trên macOS và Linux.

# Install jenv (macOS)
brew install jenv

# Thêm vào shell config (~/.zshrc hoặc ~/.bash_profile)
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

# Reload shell
source ~/.zshrc

# Add Java versions đã cài
jenv add /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home

# List versions
jenv versions

# Set global version
jenv global 17.0

# Set local version (cho project hiện tại)
cd ~/my-project
jenv local 21.0

# Verify
java -version

jenv tạo file .java-version:

# Trong project folder
cat .java-version
# Output: 21.0

# Khi cd vào folder này, jenv tự động switch!

Option 3: Update JAVA_HOME thủ công (Windows)

Tạo batch scripts để switch nhanh:

File set-java17.bat:

@echo off
set JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-17.0.9.9-hotspot
set PATH=%JAVA_HOME%\bin;%PATH%
echo Switched to Java 17
java -version

File set-java21.bat:

@echo off
set JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-21.0.1.12-hotspot
set PATH=%JAVA_HOME%\bin;%PATH%
echo Switched to Java 21
java -version

Chạy khi cần switch:

set-java17.bat  # Switch to Java 17
set-java21.bat # Switch to Java 21
Lưu ý

Thay đổi JAVA_HOME trong Command Prompt chỉ áp dụng cho session hiện tại. Mở cửa sổ mới → JAVA_HOME về giá trị system variable.

Cài đặt JDK trên Linux (Ubuntu/Debian)

Bước 1: Cài đặt qua APT (Cách dễ nhất)

# Update package list
sudo apt update

# Install JDK 17
sudo apt install openjdk-17-jdk -y

Bước 2: Kiểm tra

java -version
javac -version

Kết quả:

openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment (build 17.0.9+9-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 17.0.9+9-Ubuntu-1ubuntu1, mixed mode, sharing)

Bước 3: Cấu hình JAVA_HOME

Thêm vào ~/.bashrc:

# Mở file
nano ~/.bashrc

# Thêm dòng này:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

# Save và reload
source ~/.bashrc

Quản lý nhiều Java versions (Linux)

# List các Java versions đã cài
sudo update-alternatives --config java

# Chọn version mặc định
# Nhập số tương ứng và Enter

Bước 2: Cài đặt IDE (Integrated Development Environment)

IDE giúp viết code dễ dàng hơn với features: syntax highlighting, autocomplete, debugging.

Option 1: IntelliJ IDEA Community (Khuyến nghị)

Ưu điểm:

  • ✅ Free, powerful, modern
  • ✅ Smart code completion
  • ✅ Built-in tools (Maven, Gradle, Git)
  • ✅ Excellent debugging

Cài đặt:

  1. Download từ jetbrains.com/idea/download
  2. Chọn Community Edition (Free)
  3. Cài đặt theo hướng dẫn

First-time setup:

  • Launch IntelliJ IDEA
  • Choose theme: Darcula (dark) hoặc IntelliJ Light
  • Skip plugin setup (có thể cài sau)

Option 2: Visual Studio Code

Ưu điểm:

  • ✅ Lightweight, fast
  • ✅ Nhiều extensions
  • ✅ Good cho beginners

Cài đặt:

  1. Download từ code.visualstudio.com
  2. Install extensions:
    • Extension Pack for Java (by Microsoft)
    • Bao gồm: Language Support, Debugger, Test Runner, Maven, Gradle

Option 3: Eclipse

Ưu điểm:

  • ✅ Free, mature, widely used
  • ✅ Good for enterprise Java

Cài đặt:

  1. Download từ eclipse.org/downloads
  2. Chọn Eclipse IDE for Java Developers
Khuyến nghị cho Beginners

IntelliJ IDEA Community là lựa chọn tốt nhất:

  • UI trực quan, dễ dùng
  • Smart features giúp học nhanh hơn
  • Industry standard (nhiều công ty dùng)

Bước 3: Viết chương trình Hello World đầu tiên

Cách 1: Dùng Text Editor và Command Line

Bước 3.1: Tạo file Java

Tạo folder project:

mkdir java-tutorial
cd java-tutorial

Tạo file HelloWorld.java:

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
System.out.println("Chào mừng đến với Java!");
}
}
Chú ý
  • Tên file PHẢI trùng với tên class: HelloWorld.java
  • Java phân biệt chữ HOA/thường: helloworld.java sẽ BỊ LỖI!

Bước 3.2: Compile

javac HelloWorld.java

Lệnh này tạo ra file HelloWorld.class (bytecode).

Verify:

ls
# HelloWorld.java HelloWorld.class

Bước 3.3: Chạy

java HelloWorld

Output:

Hello, World!
Chào mừng đến với Java!

Hiểu rõ quy trình Compilation

javac — Java Compiler

Syntax:

javac [options] [source files]

Quá trình compilation:

Ví dụ chi tiết:

# Compile với verbose output
javac -verbose HelloWorld.java

# Output:
# [parsing started HelloWorld.java]
# [parsing completed 15ms]
# [search path for source files: .]
# [loading java/lang/Object.class]
# [checking HelloWorld]
# [wrote HelloWorld.class]
Xem thêm: Advanced options

Options hữu ích:

# Chỉ định Java version target
javac -source 17 -target 17 HelloWorld.java

# Hoặc đơn giản hơn (Java 9+)
javac --release 17 HelloWorld.java

# Compile với debug information (để debugger dùng)
javac -g HelloWorld.java

# Chỉ định output directory
javac -d bin HelloWorld.java # Output: bin/HelloWorld.class

# Chỉ định classpath (khi dùng external libraries)
javac -cp lib/gson.jar MyApp.java

java — Java Application Launcher

Syntax:

java [options] class-name [arguments]

Quá trình execution:

User gõ: java HelloWorld

┌─────────────────────────────────────┐
│ 1. JVM khởi động │
│ - Load JVM vào memory │
│ - Khởi tạo runtime environment │
└────────────┬────────────────────────┘

┌─────────────────────────────────────┐
│ 2. ClassLoader load HelloWorld │
│ - Tìm HelloWorld.class │
│ - Đọc bytecode │
└────────────┬────────────────────────┘

┌─────────────────────────────────────┐
│ 3. Bytecode Verifier │
│ - Kiểm tra bytecode hợp lệ │
│ - Verify an toàn │
└────────────┬────────────────────────┘

┌─────────────────────────────────────┐
│ 4. Tìm main() method │
│ public static void main(...) │
└────────────┬────────────────────────┘

┌─────────────────────────────────────┐
│ 5. Execution Engine thực thi │
│ - Interpreter dịch bytecode │
│ - JIT compile hot code │
└────────────┬────────────────────────┘

Output: Hello, World!
Giải thích lệnh
  • javac: Java Compiler - compile .java.class (bytecode)
  • java: Java Launcher - chạy bytecode từ .class
  • Chú ý: Chạy java HelloWorld (không có .class extension và không có .java)
    • java HelloWorld
    • java HelloWorld.class
    • java HelloWorld.java (trừ Java 11+ single-file execution)
Xem thêm: Advanced options

Options hữu ích:

# Chỉ định classpath
java -cp bin HelloWorld

# Set system properties
java -Duser.timezone=UTC HelloWorld

# Set heap memory
java -Xms512m -Xmx2g HelloWorld # Min 512MB, Max 2GB

# Enable assertions
java -ea HelloWorld

Java 11+: Single-file source-code execution

# Java 11+ có thể chạy .java trực tiếp (không cần compile trước)
java HelloWorld.java
# JVM tự động compile trong memory và chạy
🔥 Bẫy OCP: Lỗi thường gặp

Lỗi 1: Chạy với extension

java HelloWorld.class  # ❌ Error: Could not find or load main class
java HelloWorld # ✅ Correct

Lỗi 2: Không có main() method

# Error: Main method not found in class HelloWorld
# → Phải có: public static void main(String[] args)

Lỗi 3: Class name != File name

// File: Test.java
public class HelloWorld { } // ❌ Error: class HelloWorld is public, should be declared in HelloWorld.java

Cách 2: Dùng IntelliJ IDEA

Bước 1: Tạo New Project

  1. Launch IntelliJ IDEA
  2. Click New Project
  3. Cấu hình:
    • Name: JavaTutorial
    • Location: Chọn folder lưu project
    • Language: Java
    • Build system: IntelliJ
    • JDK: 17 (nếu chưa có, click Download JDK)
    • Add sample code: Check ✅
  4. Click Create

Bước 2: Tạo Class

  1. Right-click src folder → NewJava Class
  2. Nhập tên: HelloWorld
  3. Viết code:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
System.out.println("Xin chào từ IntelliJ IDEA!");
}
}

Bước 3: Run

  • Cách 1: Click ▶️ icon màu xanh bên cạnh public class
  • Cách 2: Right-click file → Run 'HelloWorld.main()'
  • Cách 3: Shortcut: Ctrl+Shift+F10 (Windows) / Ctrl+Shift+R (macOS)

Output trong console:

Hello, World!
Xin chào từ IntelliJ IDEA!

Process finished with exit code 0

Cấu trúc Project cơ bản

Project Structure

java-tutorial/
├── src/ # Source code (.java files)
│ └── HelloWorld.java
├── out/ # Compiled output (.class files)
│ └── HelloWorld.class
└── lib/ # External libraries (JAR files)

IntelliJ Project Structure

JavaTutorial/
├── .idea/ # IntelliJ config (auto-generated)
├── src/ # Source folder
│ └── HelloWorld.java
├── out/ # Build output
│ └── production/
│ └── JavaTutorial/
│ └── HelloWorld.class
├── JavaTutorial.iml # Module config
└── .gitignore
Best Practice
  • Source code: Luôn đặt trong folder src/
  • Compiled files: Không commit .class files vào Git
  • Dependencies: Dùng build tools (Maven, Gradle) để quản lý

Giải thích chương trình Hello World

// Dòng 1: Khai báo class
public class HelloWorld {
// Dòng 2: Main method - entry point của chương trình
public static void main(String[] args) {
// Dòng 3: In ra console
System.out.println("Hello, World!");
}
}

Phân tích từng phần

public class HelloWorld

  • public: Access modifier - class có thể truy cập từ bất kỳ đâu
  • class: Keyword để khai báo class
  • HelloWorld: Tên class (phải trùng với tên file)

public static void main(String[] args)

  • public: Method có thể gọi từ bên ngoài
  • static: Method thuộc class, không cần tạo object
  • void: Method không trả về giá trị
  • main: Tên method đặc biệt - entry point
  • String[] args: Tham số command-line arguments

System.out.println("Hello, World!");

  • System: Class built-in trong java.lang package
  • out: Static field của System, kiểu PrintStream
  • println: Method để in ra console và xuống dòng
  • "Hello, World!": String literal
Lưu ý quan trọng
  • Mọi Java application PHẢI có một main method
  • Signature phải chính xác: public static void main(String[] args)
  • Mỗi statement kết thúc bằng dấu ;
  • Java phân biệt chữ HOA/thường: Mainmain

Command-line Arguments

Chương trình Java có thể nhận arguments từ command line:

public class HelloArgs {
public static void main(String[] args) {
System.out.println("Số arguments: " + args.length);

if (args.length > 0) {
System.out.println("Argument đầu tiên: " + args[0]);
}

// In tất cả arguments
for (String arg : args) {
System.out.println("Argument: " + arg);
}
}
}

Compile và chạy:

javac HelloArgs.java
java HelloArgs Alice Bob Charlie

Output:

Số arguments: 3
Argument đầu tiên: Alice
Argument: Alice
Argument: Bob
Argument: Charlie

Troubleshooting - Xử lý lỗi thường gặp

Lỗi 1: java: error: class found on application class path

Nguyên nhân: Tên class không trùng với tên file

Giải pháp:

// File: HelloWorld.java
public class HelloWorld { // ✅ Trùng tên
// ...
}

// ❌ SAI
public class Hello { // Tên khác với file
// ...
}

Lỗi 2: Error: Main method not found in class

Nguyên nhân: Signature của main method không đúng

Giải pháp:

// ✅ ĐÚNG
public static void main(String[] args) { }

// ❌ SAI
public void main(String[] args) { } // Thiếu static
public static void main() { } // Thiếu args
public static int main(String[] args) { } // Sai return type

Lỗi 3: javac: command not found

Nguyên nhân: JDK chưa được thêm vào PATH

Giải pháp: Xem lại phần "Cấu hình biến môi trường" phía trên

Lỗi 4: UnsupportedClassVersionError

Nguyên nhân: Compile với JDK version cao hơn, chạy với JRE version thấp hơn

Ví dụ: Compile với JDK 17, chạy với JRE 11

Giải pháp:

  • Upgrade JRE lên version tương thích
  • Hoặc compile với target version thấp hơn:
javac --release 11 HelloWorld.java

Bài tập thực hành

Bài 1: Hello with Name

Viết chương trình nhận tên từ command-line và in ra lời chào:

// Input: java HelloName Alice
// Output: Xin chào, Alice!
Xem đáp án
public class HelloName {
public static void main(String[] args) {
if (args.length > 0) {
String name = args[0];
System.out.println("Xin chào, " + name + "!");
} else {
System.out.println("Vui lòng nhập tên!");
}
}
}

Bài 2: Multiple Outputs

Viết chương trình in ra:

  • Tên của bạn
  • Tuổi của bạn
  • Thành phố bạn sống
// Output:
// Tên: Alice
// Tuổi: 25
// Thành phố: Hà Nội

Tổng kết

Trong bài này, bạn đã học:

Cài đặt JDK trên Windows, macOS, Linux ✅ Cấu hình biến môi trường JAVA_HOME và PATH ✅ Kiểm tra cài đặt với java -version, javac -versionSetup IDE (IntelliJ IDEA khuyến nghị) ✅ Viết Hello World đầu tiên ✅ Compile và chạy từ command line: javac, javaCấu trúc project cơ bản ✅ Troubleshooting các lỗi thường gặp

Bước tiếp theo

Bài tiếp theo chúng ta sẽ học về cú pháp cơ bản Java: naming conventions, comments, packages, và input/output!

👉 Tiếp theo: Cú pháp cơ bản Java →

Đọc thêm