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

Lớp (class) trong Java

Lớp (class) là mô tả về các đối tượng sẽ được tạo ra. 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) 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 sẽ tìm hiểu sau, ví dụ:

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

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

Các phương thức (method) đị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 đó

Hãy xem ví dụ sau:

class MyClass {

  static void sayHello() {
    System.out.println("Hello World!");
  }

  public static void main(String[ ] args) {
    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:

  • static từ khóa này trước tên phương thức cho biết phương thức được gọi mà không cần thiết phải tạo đối tượng của phương thức, ngoài từ khóa này còn có các từ khóa như public, protected, private sẽ tìm hiểu kỹ ở phần phạm vi truy cập (Access modifier) Java
  • void cho biết phương thức này khi kết thúc không trả về dữ liệu gì, nếu sau này phương thức cần trả về dữ liệu thì thay bằng void bằng kiểu dữ liệu trả về như int, String ...

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

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 mô tả trong dấu cặp ngoặc (), các 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 chọn

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á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ố này 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 chọn
    // names là mảng chứa các chuỗi
    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) {
    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()

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. 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ý theo dõi ủng hộ kênh
Mảng Java (Bài trước)