JavaRush /Blog Java /Random-VI /Cú pháp Java: Giới thiệu ngắn gọn về ngôn ngữ lập trình

Cú pháp Java: Giới thiệu ngắn gọn về ngôn ngữ lập trình

Xuất bản trong nhóm

Cú pháp Java là gì?

Cú pháp Java (Cú pháp Java) là nền tảng của ngôn ngữ, tất cả các quy tắc, lệnh và cấu trúc cơ bản để viết chương trình được trình biên dịch và máy tính “hiểu được”. Mỗi ngôn ngữ lập trình đều có cú pháp riêng, giống như các ngôn ngữ tự nhiên mà chúng ta sử dụng để giao tiếp với nhau. Bài viết này trình bày cú pháp cơ bản của ngôn ngữ lập trình Java và nhắm đến những người đang học Java, các nhà phát triển đầy tham vọng hoặc những người biết một ngôn ngữ lập trình khác. Một số khía cạnh có thể không rõ ràng đối với người mới bắt đầu. Nếu điều này xảy ra với bạn, chúng tôi khuyên bạn nên bỏ qua những phần khó và tập trung vào các ví dụ. Giống như mọi thứ khác, tốt hơn là bạn nên học một ngôn ngữ lập trình theo chu kỳ, dần dần hiểu sâu hơn về một số khái niệm nhất định. Mỗi chương trình Java về cơ bản là một tập hợp các đối tượng bao gồm dữ liệu (biến) và hành vi (hàm hoặc phương thức). Ngoài ra, một chương trình Java là một lớp hoặc một số lớp. Một đối tượng là một thể hiện của một lớp. Lớp là một mô hình, chẳng hạn như trình cắt cookie và các đối tượng là cookie. Hoặc, giả sử, một lớp là một “lập trình viên Java” trừu tượng và một đối tượng là “lập trình viên Java Ivan” hoặc “lập trình viên Java Alice”.

Các đối tượng trong Java

Các đối tượng trong Java có trạng thái và hành vi. Đây là một ví dụ. Con mèo có một vận may: tên nó là Barsik, màu đỏ, chủ nhân của nó là Ivan. Con mèo cũng có hành vi: bây giờ Barsik đang ngủ. Anh ta cũng có thể rên rỉ, đi bộ, v.v. Một đối tượng là một thể hiện của một lớp.

Lớp trong Java

Lớp là một mô hình, mẫu hoặc bản thiết kế của một đối tượng. Nó mô tả hành vi và nêu những gì một đối tượng thuộc loại của nó hỗ trợ. Ví dụ, lớp Cat có tên, màu sắc, chủ sở hữu riêng; Mèo cũng có hành vi: ăn, kêu gừ gừ, đi lại, ngủ.

Các phương thức trong Java

Các phương thức nhằm mô tả logic, làm việc với dữ liệu và thực hiện tất cả các hành động. Mỗi phương thức xác định một hành vi. Một lớp có thể chứa nhiều phương thức. Ví dụ: chúng ta có thể viết phương thức sleep() cho lớp Cat (ngủ) hoặc phương thức purr() để kêu rừ rừ.

Các biến thể hiện trong Java

Mỗi đối tượng có một tập hợp các biến thể hiện duy nhất. Trạng thái của một đối tượng thường được hình thành bởi các giá trị được gán cho các biến thể hiện này. Ví dụ: tên hoặc tuổi của con mèo có thể thay đổi. Hãy bắt đầu với chương trình Java đơn giản nhất. Trong ví dụ này, chúng ta sẽ hiểu các thành phần cơ bản của cú pháp Java và sau đó xem xét chúng chi tiết hơn.

Một chương trình đơn giản bằng Java: Xin chào, Java!

Đây là chương trình đơn giản nhất trong Java:
class HelloJava {
   public static void main(String[] args) {
       System.out.println("Hello, Java!");
   }
}
Chương trình này hiển thị chuỗi “Xin chào, Java!” trong bảng điều khiển. Tôi khuyên bạn nên cài đặt JDK và IntelliJ IDEA và thử viết mã từ ví dụ này. Hoặc lần đầu tiên chỉ cần tìm một IDE trực tuyến để làm điều đó. Bây giờ chúng tôi sẽ phân tích từng dòng chương trình này, nhưng chúng tôi sẽ bỏ qua một số chi tiết không cần thiết cho người mới bắt đầu.
class HelloJava
Mỗi chương trình Java là một lớp hoặc thường là một tập hợp các lớp. Dòng class HelloJava có nghĩa là chúng ta đang tạo một lớp mới có tên HelloJava . Như đã nêu ở trên, một lớp là một loại khuôn mẫu hoặc bản thiết kế chi tiết; nó mô tả hành vi và trạng thái của các đối tượng của lớp. Điều này có thể khó khăn đối với những người mới lập trình, nhưng đừng lo lắng: bạn sẽ học khái niệm này sau. Hiện tại, lớp HelloJava chỉ là phần khởi đầu của chương trình của bạn. Bạn có thể đã nhận thấy dấu ngoặc nhọn { trên cùng một dòng và xuyên suốt văn bản. Một cặp dấu ngoặc nhọn {} biểu thị một khối, một nhóm các câu lệnh có thể lập trình được coi là một đơn vị. Trong đó { có nghĩa là phần đầu của khối và } là phần cuối của khối. Các khối có thể được lồng vào nhau hoặc có thể tuần tự. Có hai khối lồng nhau trong chương trình trên. Cái bên ngoài chứa phần thân của lớp Hello . Khối bên trong chứa phần thân của phương thức main() .
public static void main (String args []) {
Đây là sự khởi đầu của phương pháp chính . Phương thức là một hành vi hoặc chuỗi lệnh cho phép một thao tác được thực hiện trong một chương trình. Ví dụ: nhân hai số hoặc in một chuỗi. Nói cách khác, một phương thức là một hàm. Trong một số ngôn ngữ lập trình khác, các phương thức thường được gọi là "hàm". Các phương thức, giống như tất cả các thành phần của chương trình Java, đều nằm bên trong một lớp. Mỗi lớp có thể có một, nhiều phương thức hoặc không có phương thức nào cả. Cú pháp Java: Giới thiệu tóm tắt về ngôn ngữ lập trình - 1công khai - công cụ sửa đổi truy cập. Một biến, phương thức hoặc lớp được đánh dấu bằng công cụ sửa đổi công khai có thể được truy cập từ bất kỳ đâu trong chương trình. Trong Java có bốn trong số chúng: công khai, riêng tư, được bảo vệ và mặc định - theo mặc định (trống). Chúng ta sẽ nói về họ một lát sau. Để bắt đầu, tốt hơn hết là bạn nên công khai tất cả các phương pháp của mình. void là kiểu trả về của phương thức. Void có nghĩa là nó không trả về bất kỳ giá trị nào. main đại diện cho điểm bắt đầu của chương trình. Đây là tên của phương pháp. String[] args là đối số chính của phương thức. Hiện tại, chỉ cần biết rằng hầu hết mọi chương trình Java đều có một phương thức main : nó chạy chương trình và được khai báo là public static void main(String[] args) . Các phương thức tĩnh (static) được thiết kế để làm việc với một lớp. Các phương thức sử dụng từ khóa static trong khai báo chỉ có thể hoạt động trực tiếp trên các biến cục bộ và biến tĩnh.
System.out.println("Hello, Java!");
Về mặt hình thức, dòng này thực thi phương thức println của đối tượng out . Đối tượng out được khai báo trong lớp OutputStream và được khởi tạo tĩnh trong lớp System . Tuy nhiên, nó có vẻ hơi khó khăn đối với người mới bắt đầu. Nếu mới học thì đủ biết dòng này in ra dòng chữ "Hello, Java!" trong bảng điều khiển. Vì vậy, nếu bạn chạy chương trình trong môi trường phát triển (IDE), bạn sẽ nhận được kết quả như thế này: Cú pháp Java: Giới thiệu ngắn gọn về ngôn ngữ lập trình - 2

Quy tắc cú pháp Java cơ bản

Có một số quy tắc cú pháp cơ bản cần tuân theo khi lập trình bằng Java:
  • Tên tệp phải khớp với tên lớp;
  • Thông thường, mỗi lớp nằm trong một tệp riêng có phần mở rộng .java . Các tập tin lớp thường được nhóm thành các thư mục. Những thư mục này được gọi là gói;
  • các ký tự có phân biệt chữ hoa chữ thường. Chuỗi không bằng chuỗi ;
  • Việc bắt đầu xử lý một chương trình Java luôn bắt đầu bằng phương thức chính: public static void main (String [] args) . Phương thức main() là một phần bắt buộc của bất kỳ chương trình Java nào;
  • Một phương thức (thủ tục, hàm) là một chuỗi các lệnh. Các phương thức xác định hành vi trên một đối tượng;
  • Thứ tự của các phương thức trong tệp chương trình không quan trọng;
  • Hãy nhớ rằng chữ cái đầu tiên của tên lớp phải viết hoa. Nếu bạn sử dụng nhiều từ, hãy viết hoa chữ cái đầu tiên của mỗi từ (ví dụ: "MyFirstJavaClass");
  • Tất cả tên phương thức trong cú pháp Java đều bắt đầu bằng chữ cái viết thường. Khi sử dụng nhiều từ, các chữ cái tiếp theo sẽ được viết hoa ( public void myFirstMethodName () );
  • Các tệp được lưu với tên lớp và phần mở rộng .java ( MyFirstJavaClass.java );
  • Cú pháp Java có các dấu phân cách {...} biểu thị một khối mã và một vùng mã mới;
  • Mỗi câu lệnh mã phải kết thúc bằng dấu chấm phẩy.

Các biến và kiểu dữ liệu Java

Biến là các thực thể đặc biệt được sử dụng để lưu trữ dữ liệu. Bất kỳ dữ liệu. Trong Java, tất cả dữ liệu được lưu trữ dưới dạng biến. Chúng ta có thể nói rằng một biến là một không gian hoặc một hộp dành riêng để đặt một biến. Mỗi biến có kiểu dữ liệu, tên (định danh) và giá trị riêng. Các kiểu dữ liệu có thể là nguyên thủy, không nguyên thủy hoặc tham chiếu. Các kiểu dữ liệu nguyên thủy có thể là:
  • Số nguyên: byte , short , int , long
  • Số phân số: floatdouble
  • Giá trị Boolean: boolean
  • Giá trị ký tự (để biểu thị chữ cái và số): char

Ví dụ về các biến trong Java:

int s;
s = 5;
char myChar = ‘a’;
Trong mã này, chúng ta đã tạo một biến số nguyên s (một vùng chứa trống) và sau đó đặt giá trị 5 vào biến đó.Câu chuyện tương tự với biến myChar . Chúng tôi đã tạo nó với kiểu dữ liệu char và định nghĩa nó là chữ cái a . Trong trường hợp này, chúng ta đã tạo một biến và gán giá trị cho nó cùng một lúc. Cú pháp Java cho phép bạn làm theo cách này. Kiểu tham chiếu là một số đối tượng chứa tham chiếu đến giá trị hoặc đối tượng khác. Chúng cũng có thể chứa tham chiếu đến null. Null là một giá trị đặc biệt có nghĩa là không có giá trị. Các loại tham chiếu bao gồm String , Arrays và bất kỳ Class nào bạn muốn. Nếu bạn có một lớp violin ( Violin ), bạn có thể tạo một biến cho lớp đó. Ví dụ về các biến kiểu tham chiếu trong Java:
String s = “my words”;
Violin myViolin;
Bạn sẽ tìm hiểu thêm về họ sau. Hãy nhớ rằng các loại biến không nguyên thủy bắt đầu bằng chữ in hoa và các loại nguyên thủy bắt đầu bằng chữ thường. Ví dụ:
int i = 25;
String s =Hello, Java!;

Mảng trong Java

Mảng là các đối tượng lưu trữ nhiều biến cùng loại. Tuy nhiên, bản thân mảng đó là một đối tượng trên heap. Chúng ta sẽ xem xét cách khai báo, xây dựng và khởi tạo trong các chương sau. Ví dụ về mảng:
int[] myArray = {1,7,5};
Ở đây chúng ta có một mảng chứa ba số nguyên (1,7 và 5).

Enum trong Java (Java Enum)

Ngoài các kiểu dữ liệu nguyên thủy, Java còn có một kiểu gọi là enum hoặc liệt kê. Bảng liệt kê là tập hợp các hằng số có liên quan một cách logic. Một bảng liệt kê được khai báo bằng câu lệnh enum, theo sau là tên của bảng liệt kê. Sau đó là danh sách các phần tử liệt kê, được phân tách bằng dấu phẩy:
enum DayOfWeek {
     MONDAY,
     TUESDAY,
     WEDNESDAY,
     THURSDAY,
     FRIDAY,
     SATURDAY,
     SUNDAY
}
Bảng liệt kê thực chất là một kiểu mới, vì vậy chúng ta có thể định nghĩa một biến thuộc kiểu đó và sử dụng nó. Đây là một ví dụ về việc sử dụng một bảng liệt kê.

Một ví dụ về kiểu liệt kê trong Java (Java Enum)

public class MyNum{
    public static void main(String[] args) {

        Day myDay = DayOfWeek.FRIDAY;
        System.out.println(myDay);	//напечатать день из enum
}
}
enum DayOfWeek{

    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}
Nếu bạn chạy chương trình, bảng điều khiển sẽ hiển thị THỨ SÁU. Bạn có thể đặt mã cho lớp EnumMyNum vào một tệp, nhưng tốt hơn nên tạo hai tệp riêng biệt: một cho lớp MyNum và một để liệt kê các ngày trong tuần (Ngày). IntelliJ IDEA cho phép bạn chọn một enum khi tạo nó. Cú pháp Java: Giới thiệu tóm tắt về ngôn ngữ lập trình - 3

Khai báo biến trong Java

Trên thực tế, chúng tôi đã khai báo một số biến ở trên và thậm chí đã xác định được chúng. Khai báo là quá trình phân bổ bộ nhớ cho một biến thuộc một loại cụ thể và đặt tên cho nó. Một cái gì đó như thế này:
int i;
boolean boo;
Chúng ta cũng có thể khai báo khởi tạo biến bằng toán tử gán ( = ). Điều này có nghĩa là chúng ta đặt một giá trị cụ thể vào bộ nhớ được phân bổ. Chúng ta có thể thực hiện việc này ngay tại thời điểm thông báo hoặc muộn hơn.

Ví dụ khai báo biến

String str;
int i = 5;
Str = “here is my string”;
Nếu bạn khai báo một biến mà không khởi tạo, nó vẫn sẽ nhận được một số giá trị mặc định. Đối với int giá trị này là 0, đối với Chuỗi hoặc bất kỳ loại tham chiếu nào khác thì đây là mã định danh đặc biệt null .

Mã định danh trong Java

Mã định danh chỉ đơn giản là tên của các thành phần Java—các lớp, biến và phương thức. Tất cả các thành phần Java phải có tên.
Class Violin {
int age;
String masterName;
}
Violin - định danh lớp. agemasterName là các định danh biến. Dưới đây là một số quy tắc định danh Java:
  • tất cả các mã định danh đều bắt đầu bằng một chữ cái Latinh (A đến Z hoặc từ a đến z), ký hiệu tiền tệ ($) hoặc dấu gạch dưới (_);
  • sau ký tự đầu tiên, số nhận dạng có thể có bất kỳ tổ hợp ký tự nào;
  • một từ khóa Java không thể là một mã định danh (bạn sẽ tìm hiểu về các từ khóa sau);
  • định danh có phân biệt chữ hoa chữ thường.

Ví dụ về số nhận dạng

Mã định danh hợp lệ: java, $mySalary, _something Mã định danh không hợp lệ: 1stPart, -one

Công cụ sửa đổi trong Java

Công cụ sửa đổi là những từ đặc biệt trong ngôn ngữ Java mà bạn có thể sử dụng để thay đổi các thành phần (lớp, phương thức, biến). Có hai loại công cụ sửa đổi trong Java: công cụ sửa đổi truy cập và công cụ sửa đổi khác.

Ví dụ về công cụ sửa đổi quyền truy cập

Có bốn công cụ sửa đổi truy cập trong Java:
  • công cộng _ Phần tử mở. Nó có thể được truy cập từ bên trong lớp, bên ngoài lớp, bên trong và bên ngoài gói;
  • Một phần tử có công cụ sửa đổi mặc định - mặc định (trống) - chỉ có thể được truy cập trong gói;
  • công cụ sửa đổi được bảo vệ - có thể được truy cập bên trong và bên ngoài gói thông qua lớp con;
  • riêng tư - phần tử chỉ có thể truy cập được trong lớp mà nó khai báo.

Ví dụ về các sửa đổi khác

Có bảy công cụ sửa đổi khác (đối với các lớp, trường, phương thức, giao diện, v.v.):
  • tĩnh
  • cuối cùng
  • trừu tượng
  • đồng bộ
  • tạm thời
  • bay hơi
  • tự nhiên

Từ khóa Java

Từ khóa Java là những từ đặc biệt được sử dụng trong Java và hoạt động như một khóa cho mã. Chúng còn được gọi là các từ dành riêng: chúng không thể được sử dụng để định danh các biến, phương thức, lớp, v.v. Chúng đây:
  • abstract : từ khóa để khai báo một lớp trừu tượng;
  • boolean : Từ khóa boolean trong Java là cần thiết để khai báo một biến kiểu boolean. Những biến như vậy chỉ có thể đúng hoặc sai;
  • break : Từ khóa break trong Java được sử dụng để ngắt một vòng lặp hoặc câu lệnh switch ;
  • byte : Cần có từ khóa byte trong Java để khai báo biến số nguyên một byte;
  • case : được sử dụng với các câu lệnh switch để đánh dấu các khối văn bản;
  • Catch : dùng để bắt ngoại lệ sau khối try ;
  • char : Từ khóa char trong Java được sử dụng cho biến ký tự. Có thể chứa các ký tự Unicode 16 bit không dấu;
  • class : Cần có từ khóa class trong Java để khai báo một lớp;
  • continue : Từ khóa Java để tiếp tục một vòng lặp;
  • mặc định : Từ khóa mặc định trong Java được sử dụng để chỉ định khối mã mặc định trong câu lệnh switch ;
  • do : được sử dụng trong cấu trúc vòng lặp do-while ;
  • double : Cần có từ khóa double trong Java để khai báo một biến số. Có thể chứa số dấu phẩy động 8 byte;
  • else : có thể được sử dụng trong các câu lệnh else-if có điều kiện;
  • enum : dùng để định nghĩa một tập hợp các hằng số cố định;
  • mở rộng : Từ khóa mở rộng trong Java được sử dụng để chỉ ra rằng một lớp mở rộng một lớp khác (là lớp con của lớp khác);
  • cuối cùng : từ khóa để chỉ ra rằng biến là hằng số;
  • cuối cùng : đánh dấu một khối mã sẽ được thực thi cho dù ngoại lệ có được xử lý hay không;
  • float : một biến chứa số dấu phẩy động 4 byte;
  • for: ключевое слово для запуска цикла for. Он используется для многократного выполнения набора инструкций, пока выполняются некоторые условия;
  • if: ключевое слово для проверки условия. Он выполняет блок, если condition истинно;
  • implements: ключевое слово для реализации интерфейса;
  • import: ключевое слово import в Java используется для импорта пакета, класса or интерфейса;
  • instanceof: проверяет, является ли an object экземпляром определенного класса or интерфейса;
  • int: переменная, которая может содержать 4-byteовое целое число со знаком;
  • interface: ключевое слово interface в Java используется для объявления интерфейса;
  • long: переменная, которая может содержать 8-byteовое целое число со знаком;
  • native: указывает, что метод реализован в нативном codeе с использованием JNI (Java Native Interface);
  • new: ключевое слово new используется в Java для создания новых an objectов;
  • package: объявляет пакет (папку) Java для файлов классов Java;
  • private: модификатор доступа указывает, что метод or переменная могут быть видны только в классе, в котором они объявлены;
  • protected: модификатор доступа, который указывает, что доступ к методу or переменной можно получить внутри и снаружи пакета через дочерний класс;
  • public: модификатор доступа указывает, что элемент доступен в любом месте;
  • return: возвращает результат выполнения метода;
  • short: переменная, которая может содержать 2-byteовое целое число со знаком;
  • static: указывает, что переменная or метод является классом, а не an objectом, методом;
  • strictfp: ограничивает вычисления с плавающей точкой;
  • super: относится к an objectу родительского класса;
  • switch: выбирает блок codeа (or несколько из них) для выполнения;
  • synchronized: другой видм модификатора. Он указывает, что метод может быть доступен только одному потоку за раз;
  • this: ссылается на текущий an object в методе or конструкторе;
  • throw: используется для явного создания исключения;
  • throws: объявляет исключение;
  • transient (переходный) фрагмент данных не может быть сериализован;
  • try: запускает блок codeа, который проверяется на наличие исключений;
  • void: указывает, что метод не возвращает meaning;
  • volatile: указывает, что переменная может изменяться асинхронно;
  • while: запускает цикл while. Повторяет часть программы несколько раз, пока condition истинно.

Комментарии в Java

Java hỗ trợ nhận xét một dòng và nhiều dòng. Tất cả các ký tự đều có sẵn bên trong bất kỳ nhận xét nào và bị trình biên dịch Java bỏ qua. Các nhà phát triển sử dụng chúng để giải thích mã hoặc ghi nhớ điều gì đó. Ví dụ về nhận xét:
//однострочный комментарий
/*а вот многострочный комментарий. Как видите, в нем используются слеши и звездочки в начале и в конце.*/

public class HelloJava {
   /* эта программа создана для демонстрации комментариев в Java. Это многострочный комментарий.
   Вы можете использовать такие комментарии в любом месте вашей программы*/
   public static void main(String[] args) {
       //а вот однострочный комментарий
       String j = "Java"; //Это моя строка
       int a = 15; //Здесь у меня целое число
       System.out.println("Hello, " + j + " " + a + "!");
       int[] myArray = {1,2,5};
       System.out.println(myArray.length);
   }
}

Chữ trong Java

Literal trong Java là các giá trị không đổi được gán cho một biến. Đây có thể là những con số, văn bản hoặc bất cứ thứ gì khác thể hiện ý nghĩa.
  • Chữ số nguyên
  • Chữ dấu phẩy động
  • Ký tự chữ
  • Chuỗi ký tự
  • Ký tự Boolean

Ví dụ về chữ trong Java

int i = 100; //100 – целочисленный литерал
double d = 10.2;//10.2 – литерал с плавающей точкой
char c = ‘b’; //b – символьный литерал
String myString =Hello!;
boolean bool = true;
Xin lưu ý: null cũng là một nghĩa đen.

Các toán tử cơ bản trong Java

Có nhiều loại toán tử khác nhau:
  • + (cộng số và nối chuỗi)
  • (trừ hoặc trừ)
  • * (phép nhân)
  • / (phân công)
  • % (mô đun hoặc phần dư)
So sánh:
  • < (ít hơn)
  • <= (nhỏ hơn hoặc bằng)
  • > (nhiều hơn)
  • >= (lớn hơn hoặc bằng)
  • == (bằng)
  • != (Không bằng)
Câu đố trí não:
  • && (VÀ)
  • || (HOẶC)
  • ! (KHÔNG)
  • ^ (XOR)
Chúng ta đã học về các kiểu dữ liệu, biến, phương thức và toán tử. Hãy xem một ví dụ mã đơn giản nhưng phức tạp hơn một chút so với chương trình Java đầu tiên. Hãy tạo một lớp có tên NumberOperations .
public class NumbersOperations {
   int a;
   int b;
   public static int add(int a,int b){
       return a+b;
   }
   public static int sub (int a, int b){
       return a-b;
   }
   public static double div (double a, int b){
       return a/b;
   }
}
Ở đây chúng ta có một lớp với các phương thức cây để làm việc với hai số. Bạn có thể thử viết phương thức thứ tư int mul(int a, int b) để nhân hai số trong chương trình này. Chúng ta cũng hãy tạo một lớp để minh họa cách NumberOprations hoạt động :
public class NumberOperationsDemo {
   public static void main(String[] args) {
       int c = NumbersOperations.add(4,5);
       System.out.println(c);
       double d = NumbersOperations.div(1,2);
       System.out.println(d);
   }
}
Nếu bạn chạy NumberOperationsDemo bạn sẽ nhận được kết quả như thế này:
9 0,5

Kết quả

Đây chỉ là kiến ​​thức cơ bản về ngôn ngữ Java và ban đầu nó có thể gây nhầm lẫn. Bạn sẽ cần thực hành lập trình rất nhiều để hiểu rõ về nó. Và đây là cách tốt nhất để học ngôn ngữ lập trình - thông qua thực hành. Bắt đầu lập trình ngay bây giờ: thử nhiệm vụ đầu tiên của khóa học JavaRush . Chúc bạn học Java vui vẻ!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION