Mảng Java (Bài trước)

Các lớp (class) trong Java là các thành phần cốt lõi, cơ bản của kỹ thuật lập trình hướng đối tượng OOP. Phần này tìm hiểu khai báo tạo ra các định nghĩa lớp java, tạo ra các phương thức của lớp, từ class (lớp) sẽ tạo ra các đối tượng.

Lớp (class) trong Java

Lớp (class) là mô tả về các đối tượng sẽ được tạo ra. Cũng có thể nói lớp là một kiểu (kiểu dữ liệu) để tạo ra các đối tượng, lớp quy định đối tượng tạo ra có dữ liệu gì, ứng xử ra sao. Mỗi lớp có tên lớp, trong lớp có các thuộc tính như là dữ liệu của lớp và các ứng xử của lớp đó (các hàm java) gọi là các phương thức.

Ví dụ một lớp mô tả về con người có thể có:

  • Các thuộc tính: tên, chiều cao, cân nặng, giới tính, tuổi ...
  • Các ứng xử: đi, chạy, nhảy, nói, ngủ ...

Từ lớp con người như vậy tạo ra các đối tượng cụ thể khi chạy chương trình như: Đàn ông, Phụ nữ, Bạn A, Bạn B ...

Các lớp (class) được định nghĩa bằng cách dùng từ khóa class ví dụ:

public class ClassName
{
    //... Định nghĩa các thuộc tính
    //... Định nghĩa các phương thức
}

Có nhiều thành phần để tạo ra lớp, về chi tiết sẽ tìm hiểu dần ở phần dưới và các bài viết khác trong chủ đề lập trình java, để liệt kê ra - khai báo tạo ra định nghĩa về lớp có thể có các thành phần:

  1. Xác định phạm vi truy cập (modifier) của lớp hoặc để mặc định. Ở trên pham vị lớp là public. Xem phạm vi truy cập tại phạm vi truy cập lớp java
  2. Từ khóa class luôn phải có (khai báo sau phạm vi truy cập)
  3. Tiếp theo là tên lớp, tên lớp phải bắt đầu bằng chữ IN
  4. Nếu lớp khai báo có kế thừa lớp cha thì khai báo thêm về kế thừa với từ khóa extends. Xem Kế thừa trong java
  5. Nếu lớp khai báo có triển khai từ các giao diện thì khai báo thêm về giao diện với từ khóa implements. Xem Giao diện interface trong java
  6. Cuối cùng là thân của lớp, nằm trong cắp dấu ngoặc nhọn { }.

Đến đây sẽ tìm hiểu về phương thức trong lớp trước, các vấn đề khác về lớp như tạo đối tượng ... sẽ tiếp ngay sau đó.

Phương thức là gì?

Các phương thức (method) nó định nghĩa ứng xử của lớp. Một phương thức là một tập hợp các khối lệnh (code) để thi hành một chức năng nào đó. Ví dụ như System.out.println() đã biết, là một phương thức. Bạn có thể định nghĩa phương thức riêng của bạn, thi hành với một nhiệm vụ cụ thể nào đó. Phương thức được định nghĩa bên trong thân của lớp.

Hãy xem ví dụ sau:

class MyClass {

    // Khai báo phương thức
    static void sayHello() {
        System.out.println("Hello World!");
    }

    public static void main(String[ ] args) {
        // Gọi phương thức
        sayHello();
    }
}
//Xuất ra: "Hello World!"

Trong ví dụ trên, đã định nghĩa một phương thức sayHello(), phương thức đó được hàm main() gọi để in ra lời chào mừng. Như vậy để gọi phương thức để thi hành code chỉ cần viết tên phương thức và truyền các tham số nếu cần thiết. Một phương thức có thể gọi bao nhiêu lần là tùy mục đích.

Phần khai báo phương thức tên bạn thấy ngoài tên phương thức là sayHello và code của phương thức trong khối {...} thì bạn còn thấy:

  • Phương thức tĩnh trong java: là phương thức được khái báo có thêm từ khóa static. Nếu là phương thức tĩnh thì có thể gọi nó mà không cần tạo ra đối tượng của lớp chứa phương thức.
  • Phạm vi truy cập của phương thức: xác định bằng các từ khóa như public, protected ... Xem thêm phạm vi truy cập (Access modifier) Java
  • Kiểu dữ liệu trả về của phương thức: Các phương thức cần chỉ rõ nó trả về dữ liệu kiểu như int, String, double .... Từ khóa void cho biết phương thức này khi kết thúc không trả về dữ liệu gì.

Tham số của phương thức trong java

Bạn có thể tạo phương thức chấp nhận các tham số truyền vào. Tham số được viết trong dấu cặp ngoặc (), mỗi tham số mô tả bởi kiểu dữ liệu và tên tham số, nhiều tham số thì cách nhau bởi dấu phảy ,

Ví dụ phương thức sau có tên welcome, có một tham số kiểu String có tên là name

class MyClass {

    static void welcome(String name) {
        System.out.println("Xin chào, " + name);
    }

    public static void main(String[ ] args) {

        welcome("Minh");
        welcome("An");
        welcome("Tý");
    }
}
// Xuất ra:
// Xin chào, Minh
// Xin chào, An
// Xin chào, Tý

Tham số tùy ý của phương thức

Java có cách khai báo tham số cho phương thức mà khi gọi phương thức số lượng giá trị truyền vào là tùy thích, các giá trị truyền vào cách nhau bởi dấu phảy ,. Các giá trị tham số phương thức nhận được lưu trong một mảng. Khai báo kiểu tham số tùy ý này cho phương thức thì sử dụng ký hiệu ba chấm ... (Kiểu-dữ-liệu ... tên-biến).

Hãy xem ví dụ sau, phương thức showProductNames() có tham số tùy chọn có tên names như sau:

class MyClass {
    // Phương thức tham số tùy ý
    // names là tên tham số, nó chứa mảng các giá trị chuỗi truyền vào
    static void showProductNames(String ... names) {
        int sotenSanpham = names.length;
        System.out.println("Số tên sản phẩm: " + sotenSanpham);
        // Duyệt qua phần tử mảng các tham số
        for (String name : names) {
            System.out.println(name);
        }
    }

    public static void main(String[ ] args) {
        showProductNames("Iphone 8", "Note 10", "Macbook Pro");
    }
}
// In ra:
// Số tên sản phẩm: 3
// Iphone 8
// Note 10
// Macbook Pro

Ví dụ trên, tham số names như là mảng truyền vào phương thức. Số phần tử quyết định khi truyền tham số cho hàm, như trên là 3 phần tử.

Giá trị trả về của phương thức

Một phương thức có thể có giá trị trả về, sử dụng từ khóa return trong thân phương thức để kết thúc và trả về giá trị, hãy xem phương thức sau:

// Phương thức sum trả về kiểu int, là tổng của hai tham số
static int sum(int val1, int val2) {
    // phương thức kết thúc khi gặp return
    return val1 + val2;
}

Chú ý trong định nghĩa phương thức, kiểu trả về phải được định nghĩa trước tên phương thức, như trên đó là kiểu int.

Giờ là ví dụ sử dụng phương thức trên

class MyClass {

    static int sum(int val1, int val2) {
        return val1 + val2;
    }

    public static void main(String[ ] args) {
        // giá trị trả về của sum lưu vào biến x
        int x = sum(2, 5);
        System.out.println(x);
    }
}
// Outputs "7"

Bạn thấy, giá trị trả về của phương thức đã được gán vào biến x.

Khi phương thức bạn xây dựng mà không có giá trị trả về thì cần phải khai báo với từ khóa void.

// trả về giá trị kiểu int, số 5
static int returnFive() {
    return 5;
}

// phương thức có tham số, nhưng không có giá trị trả về
static void sayHelloTo(String name) {
    System.out.println("Hello " + name);
}

Tạo lớp class trong Java

Trong Eclipse sau khi tạo dự án Java mới. Bạn có thể tạo ra một lớp bằng lệnh File > New > Class trong hộp thoại hiện thị nhập tên của class, ví dụ nhập Animal. Eclipse sẽ tạo ra file Animal.java, và khai báo sẵn lớp Animal trong file đó giúp bạn

Animal.java

package animals;

public class Animal {
}

Giờ thêm một phương thức có tên bark() trong lớp

Animal.java

package animals;

public class Animal {

    public void bark() {
        System.out.println("Gâu Gâu ...");
  }

}

Như vậy đã có lớp Animal, trong lớp có phương thức bark()

Ta thấy phương thức bark() khai báo không có từ khóa public static như các ví dụ trước đây, điều này có nghĩa để gọi được hàm này cần phải tạo ra đối tượng cụ thể cho lớp Animal.

Ví dụ sử dụng lớp đó trong hàm main của lớp MyClass. Đối tượng mới của lớp tạo ra bằng từ khóa new

// Nạp package
import animals.Animal;

class MyClass {
  public static void main(String[] args) {
    // Tạo đối một đối tượng lớp Animal và lưu vào biến dog
    Animal dog = new Animal();
    dog.bark();
  }
}
// Outputs "Gâu Gâu ..."

Trong ví dụ trên ta đã tạo ra đối tượng Animal lưu trong dog và để truy cập vào các phương thức và thuộc tính dùng dấu châm và tên phương thức, thuộc tính như dog.bark()

Để tạo ra đối tượng mới của lớp sử dụng toán tử new, để truy cập vào phương thức - thuộc tính của đối tượng dùng toán tử truy cập - chấm.

Thuộc tính của lớp

Như ta đã biết lớp có thuộc tính và phương thức. Thuộc tính cơ bản là biến bên trong một lớp, nó là thành viên lưu trữ dữ liệu của lớp. Khai báo giống khai báo biến, tức gồm kiểu dữ liệu và tên thuộc tính (thành viên dữ liệu của lớp). Ngoài ra có thể thiết lập phạm vi truy cập thuộc tính (xem thêm phạm vi truy cập thuộc tính và phương thức). Ví dụ tạo ra lớp với phương thức và thuộc tính như sau:

public class Vehicle {
    int maxSpeed;
    int wheels;
    String color;
    double fuelCapacity;

    void horn() {
        System.out.println("Beep!");
    }
}

maxSpeed, wheels, color, fuelCapacity là các thuộc tính của lớp, còn horn() là phương thức.

Ví dụ sử dụng

class MyClass {

  public static void main(String[] args) {

    //Tạo ra v1, v2 đối tượng của lớp
    Vehicle v1 = new Vehicle();
    Vehicle v2 = new Vehicle();

    //Gán giá trị cho thuộc tính
    v1.color = "red";

    //Truy cập phương thức
    v2.horn();

    //Đọc thuộc tính của đối tượng
    String colorv1 = v1.color;
  }
}

//Xuất
//Beep!

Tham khảo mã nguồn ClassAndMethod (git) hoặc tải về source-methodandclass


Đăng ký nhận bài viết mới
Mảng Java (Bài trước)