# Thực thi một chương trình java
Trong phần này, ta sẽ đi tìm hiểu về cách thực thi một chương trình java từ dòng lệnh (`commandline`).
## Các lớp Java được thực thi khi nào
- Lớp Java có thể thực thi khi nó chứa phương thức `main`, JVM sẽ tìm và thực thi các dòng code nằm trong đó. Ta có thể hiểu `main` như một điểm đánh dấu, giúp cho JVM tìm và thực thi code, nếu không có nó JVM sẽ không biết nên thực thi phương thức nào.
- Một chương trình có thể có nhiều lớp thực thi (lớp chứa phương thức main), nhưng JVM chỉ tìm 1 phương thức để thực thi.

## Phương thức main
Đây là một phương thức bắt buộc nếu bạn muốn thực thi một class.
```
public class HelloExam {
public static void main(String args[]) {
System.out.println("Hello exam");
}
}
```
Phương thức `main` phải tuân thủ một số quy tắc sau:
- Nó phải là `public method`
- Nó phải là `static method`
- Nó phải được đặt tên là `main`
- Kiểu trả về là `void`
- Đối số truyền vào phải là một mảng String hoặc `Varargs` (Varargs cũng là một mảng, ví dụ: String... args)

Một số ví dụ về cách khai báo phương thức `main`:
```
public static void main(String... args) // hợp lệ
public static void main(String args...) // không hợp lệ
// tên đối số
public static void main(String[] arguments) // hợp lệ
public static void main(String[] HelloWorld) // hợp lệ nhưng không rõ nghĩa
// khai báo mảng đối số
public static void main(String[] args) // hợp lệ
public static void main(String minnieMouse[]) // hợp lệ
// các keyword có thể hoán đổi vị trí cho nhau
public static void main(String[] args) // cách này dễ đọc và được sử dụng nhiều
static public void main(String[] args)
```
Mỗi một class chỉ chứa 1 phương thức `main` duy nhất để thực thi, nếu có nhiều hơn 1 phương thức `main` thì các phương thức đó gọi là `overloaded method`, bắt buộc các phương thức đó phải khác kiểu trả về, hoặc khác đối số truyền vào, nếu không sẽ gây ra lỗi.

## Thực thi chương trình Java từ commandline
Hầu hết hiện nay chúng ta đều sử dụng IDE (Integrated Development Environment), nó đã tích hợp hết để ta có thể dễ dàng chạy 1 chương trình java chỉ bằng 1 cú click chuột. Ta có đoạn code sau và sẽ thực thi chúng bằng `commandline`
```
public class HelloExam {
public static void main(String args[]) {
System.out.println("Hello exam");
}
}
```
Để thực thi đoạn mã trên, ta sẽ gõ `java HelloExam` ở `commandline` và sẽ nhận được kết quả như sau:

Như đã tìm hiểu ở trên, ta có thể truyền các đối số dòng lệnh vào cho phương thức `main` thông qua `commandline`, ví dụ:
```
public class HelloExamWithParameters {
public static void main(String args[]) {
System.out.println(args[0]);
System.out.println(args[1]);
}
}
```

## Kết luận
Bài viết này đã giúp ta hiểu rõ hơn về thực thi một chương trình java, và cách thực thi chúng thông qua `commandline`
## Tài liệu tham khảo
[OCA Java SE 8 Programmer I Certification Guide - Mala Gupta](https://www.amazon.com/OCA-Java-Programmer-Certification-Guide/dp/1617293253)