1. Giới thiệu
Mảng là một cấu trúc dữ liệu thiết yếu trong lập trình Java khi bạn muốn quản lý nhiều giá trị cùng một kiểu một cách đồng thời. Ví dụ, việc quản lý 10 điểm khác nhau hoặc một tập dữ liệu lớn bằng các biến riêng lẻ là không thực tế. Đó là lúc mảng trở nên hữu ích.
Bài viết này tập trung vào cách khởi tạo mảng trong Java, được giải thích một cách rõ ràng và thân thiện với người mới bắt đầu. Nếu bạn đang tự hỏi “Mảng là gì?” hoặc “Làm sao để khởi tạo một mảng?”, hướng dẫn này sẽ bao phủ mọi thứ từ cơ bản đến các kỹ thuật nâng cao. Hãy chắc chắn đọc đến cuối bài.
Khi đọc bài này, bạn sẽ nhận được những lợi ích sau:
- Hiểu toàn bộ quy trình khai báo và khởi tạo mảng
- Tránh các lỗi thường gặp và các lỗi khởi tạo phổ biến
- Học các ví dụ mã thực tế hữu ích trong phát triển thực tế
Nội dung này không chỉ phù hợp cho người mới học lập trình mà còn cho những ai muốn ôn lại các kiến thức nền tảng của Java.
Bây giờ, hãy bắt đầu bằng cách tìm hiểu các khái niệm cơ bản về mảng trong Java.
2. Các khái niệm cơ bản về mảng trong Java
Cách khai báo mảng và cú pháp cơ bản
Để sử dụng mảng trong Java, bước đầu tiên là khai báo mảng. Việc khai báo thông báo cho chương trình rằng “Biến này sẽ được dùng như một mảng lưu trữ nhiều giá trị.” Có một số cách khai báo mảng, nhưng hai cách phổ biến nhất là:
int[] numbers; // Recommended style
int numbers[]; // C-style syntax
Kiểu viết được ưa chuộng trong Java là int[] numbers;, trong đó [] đứng sau tên kiểu. Cú pháp này rõ ràng chỉ ra “một mảng các int”.
Kích thước mảng và tầm quan trọng của việc khởi tạo
Một mảng không thể được sử dụng ngay sau khi khai báo. Để thực sự dùng được, bạn phải khởi tạo nó bằng cách chỉ định số phần tử (hoặc “ô”) mà mảng sẽ có.
Việc khởi tạo cấp phát bộ nhớ cho số phần tử đã chỉ định và làm cho mảng có thể sử dụng được.
Ví dụ, để khởi tạo một mảng gồm năm số nguyên:
int[] scores = new int[5];
Đoạn mã này cấp phát năm phần tử nguyên liên tiếp có thể truy cập từ scores[0] đến scores[4].
Trong Java, kích thước của một mảng phải được xác định khi khởi tạo và không thể thay đổi sau này. Đây là nguồn gây lỗi phổ biến cho người mới bắt đầu.
Các kiểu mảng và giá trị mặc định
Kiểu của một mảng quyết định kiểu của mỗi phần tử. Ví dụ, int[] là một mảng các số nguyên, và String[] là một mảng các chuỗi.
Trong Java, khi một mảng được khởi tạo, mỗi phần tử sẽ tự động nhận một giá trị mặc định tùy thuộc vào kiểu của nó:
Các ví dụ về giá trị mặc định:
- int → 0
- double → 0.0
- boolean → false
- Kiểu tham chiếu (ví dụ: String) → null
Do đó, mảng trong Java yêu cầu hai bước: “khai báo” và “khởi tạo”, cả hai đều quan trọng để bạn nắm bắt ngay từ đầu hành trình lập trình của mình.
3. Các phương pháp khởi tạo mảng
Java cung cấp một số cách để khởi tạo mảng. Phương pháp tối ưu phụ thuộc vào nhu cầu của chương trình, vì vậy việc hiểu cách mỗi cách hoạt động là rất cần thiết.
3.1 Khởi tạo mảng ngay khi khai báo
Cách đơn giản và trực quan nhất là cung cấp các giá trị khởi tạo ngay khi khai báo mảng. Phương pháp này đặc biệt hữu ích khi các giá trị đã cố định và đã biết trước.
int[] numbers = {1, 2, 3, 4, 5};
String[] fruits = {"apple", "banana", "orange"};
Không cần từ khóa new hay chỉ định kích thước. Java sẽ tự động tạo mảng với số phần tử chính xác như đã cung cấp.
3.2 Khởi tạo bằng từ khóa new
Phương pháp phổ biến tiếp theo là sử dụng từ khóa new để chỉ định kích thước mảng.
int[] scores = new int[5]; // Five integers (default value: 0)
String[] names = new String[3]; // Three Strings (default value: null)
Trong mẫu khởi tạo này, tất cả các phần tử sẽ tự động được gán các giá trị mặc định.
- Kiểu số: 0 hoặc 0.0
- boolean: false
- Kiểu tham chiếu: null
Phương pháp này lý tưởng khi kích thước mảng đã biết nhưng các giá trị sẽ được gán sau.
3.3 Khởi tạo Mảng bằng Arrays.fill()
Nếu bạn muốn khởi tạo tất cả các phần tử mảng bằng cùng một giá trị, phương thức Arrays.fill() rất hữu ích.
Ví dụ, để điền một mảng với giá trị 7:
import java.util.Arrays;
int[] data = new int[5];
Arrays.fill(data, 7); // All elements become 7
Phương pháp này hiệu quả hơn so với việc lặp và gán cùng một giá trị một cách thủ công.
3.4 Khởi tạo Mảng bằng Vòng Lặp
Khi mỗi phần tử mảng cần một giá trị khác nhau hoặc tuân theo một mẫu nhất định, việc sử dụng vòng for là cách tiếp cận tiêu chuẩn.
int[] squares = new int[5];
for (int i = 0; i < squares.length; i++) {
squares[i] = i * i; // 0, 1, 4, 9, 16
}
Lưu ý rằng vòng for‑enhanced (for‑each) phù hợp để đọc giá trị nhưng không dùng để gán giá trị theo chỉ số.
Như bạn thấy, Java cung cấp nhiều kỹ thuật khởi tạo—hãy chọn phương pháp phù hợp nhất với tình huống cụ thể của bạn.
4. Lưu ý Quan trọng về Khởi tạo Mảng
Khi làm việc với mảng, việc hiểu không chỉ các phương pháp khởi tạo mà còn các lỗi thường gặp và sai lầm phổ biến là rất quan trọng. Nắm rõ chúng sẽ giúp ngăn ngừa lỗi và hành vi không mong muốn.
Lỗi do Sử dụng Mảng Chưa Khởi tạo
Một mảng không thể được sử dụng cho đến khi nó được khởi tạo đúng cách. Cố gắng sử dụng một mảng chỉ được khai báo mà chưa khởi tạo sẽ gây ra NullPointerException.
int[] numbers;
System.out.println(numbers[0]); // Error: numbers is not initialized
Để tránh sai lầm này, luôn nhớ rằng “khai báo” và “khởi tạo” phải được thực hiện cùng nhau.

Tránh ArrayIndexOutOfBoundsException
Nếu bạn cố gắng truy cập một chỉ số nằm ngoài phạm vi hợp lệ của mảng, Java sẽ ném ra ArrayIndexOutOfBoundsException.
Các chỉ số mảng luôn bắt đầu từ 0 và lên tới độ dài mảng – 1.
int[] data = new int[3];
data[3] = 10; // Error: index 3 does not exist (valid: 0, 1, 2)
Khi lặp qua một mảng, luôn sử dụng arrayName.length để đảm bảo truy cập an toàn.
for (int i = 0; i < data.length; i++) {
// Safe access
}
Giới hạn của Danh sách Khởi tạo ({})
Danh sách khởi tạo {} chỉ có thể được dùng khi khai báo.
Nó không thể được dùng cho một mảng đã được khai báo trước:
int[] numbers;
numbers = {1, 2, 3}; // Error: initializer list cannot be used here
Thay vào đó, kết hợp nó với từ khóa new:
numbers = new int[]{1, 2, 3}; // Correct usage
Kích thước Mảng Không Thể Thay Đổi
Sau khi được khởi tạo, kích thước của một mảng Java không thể thay đổi.
Để tăng số lượng phần tử, bạn phải tạo một mảng mới và sao chép các giá trị sang đó.
Hiểu rõ những hạn chế này sẽ giúp ngăn ngừa các lỗi thường gặp liên quan đến mảng.
5. Chủ đề Nâng cao: Khởi tạo Mảng Đa Chiều
Mảng trong Java có thể có nhiều hơn một chiều. Mảng hai chiều đặc biệt hữu ích cho dữ liệu dạng ma trận hoặc bảng. Ở đây, chúng tôi giải thích cách khởi tạo mảng đa chiều, tập trung chủ yếu vào mảng hai chiều.
Khai báo và Khởi tạo Mảng Hai Chiều
Một mảng hai chiều thực chất là “mảng các mảng”. Bạn có thể khởi tạo nó ngay khi khai báo hoặc sử dụng từ khóa new.
Khởi tạo Khi Khai báo
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Điều này tạo ra một mảng hai chiều 3×3 các số nguyên.
Khởi tạo với new
int[][] table = new int[2][3]; // Creates a 2×3 array
Tất cả các phần tử đều được khởi tạo thành 0 theo mặc định.
Bạn cũng có thể đặt giá trị sau này:
table[0][0] = 10;
table[0][1] = 20;
table[1][2] = 30;
Tạo Mảng “Jagged” (Không đều)
Java cho phép “mảng răng cưa”, trong đó mỗi hàng có thể có số cột khác nhau.
int[][] jagged = new int[3][];
jagged[0] = new int[2]; // Row 1 has 2 columns
jagged[1] = new int[4]; // Row 2 has 4 columns
jagged[2] = new int[1]; // Row 3 has 1 column
Ghi chú về Khởi tạo Mảng Đa chiều
- Mảng hai chiều cũng nhận các giá trị mặc định dựa trên kiểu phần tử của chúng (ví dụ, int → 0, String → null).
- Khi sử dụng
new int[rows][columns], kích thước chiều đầu tiên (số hàng) phải được chỉ định. - Sử dụng một hàng chưa được khởi tạo sẽ gây ra
NullPointerException.
Java cung cấp tính linh hoạt trong cách khởi tạo mảng đa chiều, tùy thuộc vào cấu trúc bạn cần.
6. Tóm tắt
Chúng ta đã bao quát mọi thứ từ cơ bản đến các kỹ thuật nâng cao để khởi tạo mảng trong Java. Hãy xem lại các điểm chính.
Các điểm chính của việc Khởi tạo Mảng
- Luôn khai báo và khởi tạo mảng trước khi sử dụng
- Mảng chưa khởi tạo gây ra lỗi như NullPointerException.
- Chọn phương pháp khởi tạo phù hợp tùy theo tình huống
- Sử dụng danh sách khởi tạo khi các giá trị cố định,
newkhi chỉ biết kích thước,Arrays.fill()để đặt giá trị đồng nhất, và vòng lặp cho các giá trị riêng biệt. - Cẩn thận với giới hạn chỉ mục
- Chỉ mục mảng bắt đầu từ 0, và truy cập ngoài phạm vi gây ra ngoại lệ.
- Mảng đa chiều tuân theo các quy tắc cơ bản giống như mảng một chiều
- Mảng răng cưa cho phép độ dài khác nhau cho mỗi hàng.
Lời khuyên cho người mới bắt đầu và các bước tiếp theo
Hiểu về việc khởi tạo mảng là một phần thiết yếu để xây dựng nền tảng vững chắc trong lập trình Java.
Bắt đầu với các mảng một chiều đơn giản, và khi đã quen, chuyển sang mảng đa chiều và logic dựa trên mảng.
Ngoài ra, Java cung cấp các “mảng động” mạnh mẽ như ArrayList. Sau khi thành thạo các mảng cơ bản, việc học framework collection của Java là bước tiếp theo tự nhiên.
Chương tiếp theo tóm tắt các câu hỏi thường gặp (FAQ) về việc khởi tạo mảng.
Nếu bạn có bất kỳ thắc mắc nào, hãy chắc chắn xem lại phần Hỏi & Đáp liên quan.
7. Các Câu hỏi Thường gặp (FAQ)
Ở đây, chúng tôi trả lời các câu hỏi phổ biến và những điểm gây nhầm lẫn liên quan đến việc khởi tạo mảng trong Java.
Q1. Tôi có thể thay đổi kích thước của một mảng sau này không?
A. Không. Khi đã khởi tạo, kích thước của một mảng Java không thể thay đổi. Nếu bạn cần kích thước khác, phải tạo một mảng mới và sao chép các giá trị. Đối với cấu trúc có kích thước biến đổi, hãy cân nhắc sử dụng ArrayList.
Q2. Điều gì sẽ xảy ra nếu tôi sử dụng một mảng mà chưa khởi tạo?
A. Sử dụng một mảng đã khai báo nhưng chưa khởi tạo gây ra NullPointerException. Luôn khởi tạo bằng new hoặc danh sách khởi tạo trước khi sử dụng.
Q3. Sự khác biệt giữa Arrays.fill() và vòng lặp for là gì?
A. Arrays.fill() đặt tất cả các phần tử thành cùng một giá trị, trong khi vòng lặp for cho phép bạn gán các giá trị khác nhau cho từng phần tử.
Q4. Các giá trị mặc định được gán trong mảng như thế nào?
A. Các giá trị mặc định được tự động gán khi sử dụng new: int → 0, double → 0.0, boolean → false, kiểu tham chiếu → null.
Q5. Các hàng trong một mảng hai chiều có thể có độ dài khác nhau không?
A. Có. Java hỗ trợ mảng răng cưa, trong đó mỗi hàng có số cột khác nhau, nhưng mỗi hàng phải được khởi tạo trước khi sử dụng.
Q6. Làm thế nào để sao chép mảng?
A. Sử dụng các phương thức như System.arraycopy() hoặc Arrays.copyOf(). Sao chép thủ công bằng vòng lặp cũng được, nhưng các phương thức tích hợp sẵn đơn giản và an toàn hơn.
Q7. Sự khác biệt giữa mảng và ArrayList là gì?
A. Mảng có kích thước cố định và chứa một kiểu dữ liệu duy nhất, trong khi ArrayList hỗ trợ thay đổi kích thước động và cung cấp các thao tác linh hoạt hơn.
Chúng tôi hy vọng phần FAQ này giúp giải đáp các câu hỏi thường gặp liên quan đến việc khởi tạo mảng trong Java.

