Java Dev 3 - Basic Syntax

Java Dev 3 - Basic Syntax

·

10 min read

Lời nói đầu

Bài này tôi sẽ tổng hợp lại các cú pháp cơ bản trong Java.

1. Setting Environment (Cài đặt môi trường)

Tôi sẽ không nói về phần này, các bạn có thể tham khảo bài viết sau: https://www.geeksforgeeks.org/setting-environment-java/?ref=lbp

2. Object-oriented programming (Cơ bản về lập trình hướng đối tượng)

Java là 1 ngôn ngữ lập trình hướng đối tượng (an object-oriented programming language), điều này có nghĩa là Java là tập hợp của các đối tượng và các đối tượng đó giao tiếp thông qua lời gọi phương thức (method call) để giao tiếp với nhau.

Trong lập trình hướng đối tượng, ta thường nghe về khái niệm ClassObject.

1. Class:
Class (lớp) là 1 bản vẽ, hay 1 cái khung của Object (đối tượng).

Ví dụ:

  • Con ngườilớp.

  • Theo đó Aliceđối tượng của lớp Con người.

2. Object:
Object (đối tượng) là 1 thể hiện của Class (lớp).

Đối tượng có đặc điểm và hành vi.

Trong ngôn ngữ lập trình thì đặc điểm được biết tới cái tên property, hành vi được biết tới cái tên method.

Ví dụ:

  • Động vậtlớp.

  • Theo đó con chó, con mèo, con gà chính là đối tượng của lớp Động vật.

  • Con chóđặc điểm (property)4 chân, có đuôi và có hành vi(method)sủa, ngủ.

3. Property:
Như ví dụ về con chó ở trên, ta có thể hiểu Property chính là đặc điểm của Object.
4. Method:
Cũng với ví dụ trên, ta thấy Method chính là hành vi của Object.

3. First Program (Chương trình đầu tiên)

Lấy đoạn code sau làm ví dụ:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello wrorld!");
    }
}

Copy đoạn code trên và lưu vào file mang tên HelloWorld.java.

  • Tiến hành phân tích từng khối code:
public class HelloWorld {}

Ở trên tôi đã trình bày sơ qua về lập trình hướng đối tượng, vậy thì trong đoạn code này HelloWorld chính là 1 class.

Lưu ý: Trong Java, khi đặt tên file ta cần đặt tên giống với tên class nếu ko sẽ xảy ra lỗi. Ví dụ classHelloWorld thì tên file phải là HelloWorld.java

  • Xem xét tiếp đoạn code sau:
public static void main(String[] args) {}

Đoạn này cho biết đây chính là hàm main, hàm main chính là điểm khởi đầu của 1 chương trình, đây sẽ là hàm được thực thi đầu tiên.

  • Xem xét tiếp đoạn code:
System.out.println("Hello world!");

Đoạn code này sử dụng phương thức System.out.println() để in ra màn hình dòng chữ Hello world!.

4. Data type (Kiểu dữ liệu)

Có 2 kiểu dữ liệu trong Java:

  • Kiểu dữ liệu nguyên thủy (Primitive Data Type): byte, char, int, short, byte, long, float và double.

  • Kiểu dữ liệu không nguyên thủy (Non-Primitive Data Type) hay còn gọi là Kiểu dữ liệu Object (Object Data Type): String, Class, Object, Interface, Array...

Primitive Data Types

Kiểu dữ liệuMô tảGiá trị mặc địnhKích thướcVí dụKhoảng giá trị
booleantrue/falsefalse1 bittrue, falsetrue, false
bytetwos-complement integer08 bits(none)-128 tới 127
charUnicode character\u000016 bits‘a’, ‘\u0041’, ‘\101’, ‘\’, ‘\’, ‘\n’, ‘β’kí tự đại diện của bảng ASCII, giá trị từ 0->255
shorttwos-complement integer016 bits(none)-32,768 tới 32,767
inttwos-complement intger032 bits-2,-1,0,1,2-2,147,483,648 tới 2,147,483,647
longtwos-complement integer064 bits-2L,-1L,0L,1L,2L-9,223,372,036,854,775,808 tới 9,223,372,036,854,775,807
floatIEEE 754 floating point0.032 bits1.23e100f , -1.23e-100f , .3f ,3.14Ftối đa 7 chữ số thập phân
doubleIEEE 754 floating point0.064 bits1.23456e300d , -123456e-300d , 1e1dtối đa 16 chữ số thập phân

5. Variable (Biến)

Cú pháp để khai báo biến trong Java bao gồm 3 thành phần: kiểu dữ liệu (data type), tên biến (variable name) và giá trị của dữ liệu (data type).

<kiểu dữ liệu> <tên biến> = <giá trị của dữ liệu>;

Xem xét đoạn code sau:

public class test1 {
    public static void main(String[] args) {
        int a = 1;
        float b = 5.5F;
        double c = 5.5;
        boolean d = true;
        char e = 'A';
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }
}

Trong đoạn code trên, ta thấy kiểu dữ liệu float khi khai báo giá trị sẽ có thêm chữ F ở sau, tương tự với kiểu dữ liệu long sẽ thêm L vào sau.

5.1. Tự động chuyển kiểu dữ liệu (Automatic Type Conversion)

public static void main(String[] args) {
    int a = 1;
    byte b = 2;
    int c = a + b;
    System.out.println(c);
}

Ở đoạn code trên ta thấy a là biến kiểu int, b là biến kiểu byte.

Tuy nhiên kết quả sẽ hiển thị bằng 3. Điều đó là do java đã tự thực hiện chuyển đổi dữ liệu, biến b đã được chuyển thành kiểu int.

5.2. Ép buộc chuyển kiểu dữ liệu (Coercion Type Conversion)

Cú pháp để ép buộc chuyển kiểu dữ liệu

<kiểu dữ liệu> <tên biến> = (kiểu dữ liệu muốn chuyển) <giá trị của dữ liệu muốn chuyển>;

Ví dụ:

int i = (int)1.5

Lưu ý: Chuyển đổi kiểu dữ liệu dạng ép buộc sẽ dẫn đến mất độ chính xác của dữ liệu.

6. Comment (Chú thích)

Có 3 kiểu comment trong Java:

6.1. Single line Comment (Comment 1 dòng)

Cú pháp

// System.out.println("This is an comment.");

6.2. Single line Comment (Comment nhiều dòng)

Cú pháp

/*
    System.out.println("This is the first line comment.");
    System.out.println("This is the second line comment.");
*/

6.3. Documentation Comment (Comment văn bản)

Cú pháp

/** documentation */

7. Operators (Các toán tử)

Tham khảo: https://www.geeksforgeeks.org/java-arithmetic-operators-with-examples/?ref=lbp

8. Method (Phương thức)

Cú pháp khai báo 1 method:

<phạm vi truy cập> <kiểu dữ liệu trả về> <tên method> (danh sách tham số) {
 // khối code cần thực hiện
 return <kiểu dữ liệu trả về> // không bắt buộc
}

Phân tích các thành phần khi khai báo method:

  1. Phạm vi truy cập (Access Modifier): Còn gọi là phạm vi truy cập của method. Có 4 phạm vi truy cập trong Java, đó là:
  • public: Có thể truy cập trong tất cả các Class trong ứng dụng của bạn.

  • private: Chỉ có thể truy cập trong Class mà nó được định nghĩa.

  • default: Khi không khai báo phạm vi truy cập, chương trình sẽ ngầm hiểu phạm vi truy cập là default, người dùng có thể dùng từ khóa default để khai báo thay vì để chương trình ngầm hiểu (tuy nhiên kết quả mang lại vẫn như nhau). Lúc này có thể truy cập trong cùng một Class và Package trong đó Class của nó được định nghĩa (defined).

  1. Kiểu dữ liệu trả về (Return Type): kiểu dữ liệu trả về của method có thể là 1 giá trị bất kì hoặc là void.

  2. Xem xét dòng 3 return <kiểu dữ liệu trả về>: đây là 1 dòng không bắt buộc phải khai báo nếu như không muốn trả về dữ liệu gì - lúc này phần return type phải khai báo là void, nếu như muốn method trả về 1 loại dữ liệu nào đó thì phần return type ở dòng 1return type ở dòng 3 phải tương ứng nhau.

  3. Tên method (method name): Đặt tên cho method mà chúng ta đã xác định, đáp ứng đặc điểm kỹ thuật của mã định danh (sẽ mô tả trong phần 9.2) và sử dụng nó để gọi phương thức.

  4. Danh sách tham số (Parameter List): là danh sách các tham số (parameter) mà được định nghĩa. Một method có thể có không, một hoặc nhiều tham số. Tham số được định nghĩa cùng kiểu dữ liệu của chúng và nằm trong dấu ngoặc đơn (). Nếu có nhiều tham số thì chúng được phân tách bằng dấu phẩy ,. Nếu không có tham số, bạn phải sử dụng dấu ngoặc đơn rỗng.

8.1. Ví dụ 1:

public void show(){
    System.out.println("Sio");
}
  • Method có access modifierpublic

  • return typevoid.

  • method nameshow.

  • Không có tham số nào, do vậy trong hàm không cần dòng return <kiểu dữ liệu trả về>.

8.2. Ví dụ 2:

public string MyInfo(string name, int age){
    string myName = name;
    int myAge = age;
    return "myName: " + name + "myAge: " + age;
}
  • Method có access modifierpublic

  • return typestring.

  • method nameMyInfo.

  • Có 2 tham số là nameage. Kiểu dữ liệu của namestring, kiểu dữ liệu của ageint.

  • Dòng cuối phải khai báo lệnh return với giả trị trả về là string.

9. Một vài quy tắc trong Java

9.1. Source File Name (Tên file)

Tên của file phải khớp chính xác với tên public class với file extension là .java. Tên của file có thể là một tên khác nếu nó không có bất kỳ public class nào.

Giả sử bạn có một public class là GFG.

GFG.java // cú pháp hợp lệ
gfg.java // cú pháp ko hợp lệ

9.2. Identifiers (Định danh)

Identifiers (tạm dịch: định danh) là tên của biến cục bộ (local variables), biểu hiện của class và biến của class (instance and class variables), nhãn (lables), lớp (classes), gói (packages), mô-đun (modules), phương thức (methods).

Mọi ký tự Unicode đều hợp lệ, không chỉ riêng ký tự trong bảng ASCII.

  1. Tất cả các Identifiers có thể bắt đầu bằng một chữ cái, ký hiệu tiền tệ hoặc dấu gạch dưới (_). Theo quy ước, một chữ cái phải là chữ thường khi đặt tên cho các biến.

  2. Ký tự đầu tiên của Identifiers có thể được theo sau bởi bất kỳ sự kết hợp nào của các chữ cái, chữ số, ký hiệu tiền tệ và dấu gạch dưới. Dấu gạch dưới không được khuyến nghị cho tên của các biến. Các hằng số (thuộc tính static final và enum) phải có tất cả các chữ cái viết hoa.

  3. Quan trọng nhất, Identifiers phân biệt chữ hoa chữ thường.

  4. Không thể sử dụng Keywords làm Identifiers vì nó là Từ dành riêng (Reserved words) và có một số ý nghĩa đặc biệt. (Ở phần 9.5 tôi có trình bày về Keywords)

9.3. Case Sensitivity (Phân biệt chữ hoa chữ thường)

Java là 1 ngôn ngữ có phân biệt chữ hoa chữ thường (case-sensitive).

Vậy nên AB, Ab, aB, ab là khác nhau trong Java.

System.out.println("Sio"); // cú pháp hợp lệ
system.out.println("Sio"); // Cú pháp ko hợp lệ bởi kí tự đầu tiên của keyword System phải là viết hoa

9.4. White spaces (Khoảng trắng)

Trong Java có thể 1 dòng chỉ chứa khoảng trắng, có thể có chú thích (comment), được gọi là một dòng trống và trình biên dịch Java hoàn toàn bỏ qua nó.

9.5. Java Keywords

Từ khóa (Keywords) hoặc Từ dành riêng (Reserved words) là các từ trong ngôn ngữ được sử dụng cho một số quy trình nội bộ hoặc đại diện cho một số hành động được xác định trước. Do đó, những từ này không được phép sử dụng làm tên biến hoặc đối tượng.

Các Keyword: abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while

10. Flow Control

Tham khảo: https://www.geeksforgeeks.org/decision-making-javaif-else-switch-break-continue-jump/?ref=lbp

Kết bài

Phần 3 này khá dài và có thể sẽ còn update.

Tham khảo