Hành vi của đối tượng trong JAVA

Ngày đăng: 10/12/2020   -    Cập nhật: 15/12/2020


Nội dung về lớp và đối tượng phần trước là cơ sở tiếp cận để hiểu sâu hơn về hành vi – phương thức được chia sẻ trong phần này. Vậy hành vi của đối tượng trong JAVA là gì?


Hành vi đối tượng trong JAVA


Chúng ta cùng tìm hiểu nào!

1. Phương thức và trạng thái của đối tượng


Nhớ lại rằng lớp là "cái khuôn" để tạo ra các đối tượng thuộc lớp đó. Khi ta viết một lớp, ta mô tả cách xây dựng một đối tượng thuộc lớp đó. Ta đã biết rằng giá trị của cùng một biến thực thể của các đối tượng khác nhau có thể khác nhau.


Nhưng còn các phương thức thì sao?


Chúng có hoạt động khác nhau hay không?


Đại loại là có.


Mỗi thực thể của một lớp đều có chung các phương thức, nhưng các phương thức này có thể hoạt động khác nhau tùy theo giá trị cụ thể của các biến thực thể.



Ví dụ:


  • Lớp ThongTinLienHe có hai biến thực thể: tensoDienThoai
  • Phương thức hienThiThongTin() hiển thị nội dung thông tin liên hệ, cụ thể là giá trị của tensoDienThoai của đối tượng đó.
  • Các đối tượng khác nhau có các giá trị khác nhau cho hai biến đó, nên nội dung được hienThiThongTin() hiển thị cho các đối tượng đó cũng khác nhau.


File: ThongTinLienHe.java



public class ThongTinLienHe {
    
    // Data Member
    String ten;
    String soDienThoai;

    // Phương thức (Hành vi)
    void hienThiThongTin() {
        System.out.println("Tên: " + ten);
        System.out.println("Số điện thoại: " + soDienThoai);
    }
}
 


File: TestLienHe.java



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

        // Khởi tạo đối tượng
        ThongTinLienHe ngocAnh = new ThongTinLienHe();
        ThongTinLienHe linhTrang = new ThongTinLienHe();

        // Gán giá trị
        ngocAnh.ten = "Đặng Ngọc Anh";
        ngocAnh.soDienThoai = "0968051561";

        linhTrang.ten = "Nguyễn Linh Trang";
        linhTrang.soDienThoai = "0962948166";

        // Gọi phương thức (Hành vi)
        Duc.hienThiThongTin();
        Thoa.hienThiThongTin();
    }
}
 


Kết quả ta được:



Tên: Đặng Ngọc Anh
Số điện thoại: 0968051561
Tên: Nguyễn Linh Trang
Số điện thoại: 0962948166
 


Riêng hàm hienThiThongTin() bạn hoàn toàn có thể viết như sau:



// Phương thức (Hành vi)
void hienThiThongTin() {
    System.out.println("Tên: " + this.ten);
    System.out.println("Số điện thoại: " + this.soDienThoai);
}
 


Trong đó, this là từ khóa có ý nghĩa là một tham chiếu đặc biệt chiếu tới đối tượng chủ của phương thức hiện hành.


Chẳng hạn:



  • Đối với lời gọi ngocAnh.hienThiThongTin(), this có giá trị bằng giá trị của tham chiếu ngocAnh
  • Đối với lời gọi linhTrang.hienThiThongTin(), this có giá trị bằng linhTrang.


Có thể nói rằng khi gọi một phương thức đối với một đối tượng, tham chiếu tới đối tượng đó được truyền vào phương thức tới một tham số ẩn - tham chiếu this.


Tham chiếu this có thể được dùng để truy cập biến thực thể hoặc gọi phương thức đối với đối tượng hiện hành (như ngocAnh hoặc là linhTrang)


Thông thường, công dụng này của this chỉ có ích khi tên biến thực thể bị trùng với một biến địa phương hoặc tham số của phương thức.


Chẳng hạn, giả sử phương thức setTen() của lớp ThongTinLienHe lấy một tham số ten kiểu String trùng tên với biến thực thể ten của lớp đó.




void setTen(String ten) {
    this.ten = ten;
}
 


Từ trong phương thức setTen(), nếu dùng tên ten thì trình biên dịch sẽ hiểu là ta đang nói đến tham số ten.


Còn sử dụng this.ten là để gọi đến biến trong class đó (Trong trường hợp này là biến ten đã được khai báo trong class)


Điều này tương đương với ý nghĩa: Lấy giá trị của tham số tên là ten (đối số được truyền vào hàm setTen()), gán cho biến ten trong class đó.


2. Truyền tham số và giá trị trả về


Cũng như trong các ngôn ngữ lập trình khác, ta có thể truyền các giá trị vào trong phương thức.


Ví dụ, ta muốn chỉ thị cho một đối tượng ngocAnh về số lần gọi bằng cách gọi phương thức ngocAnh.goi(3) ngay trong  lớp TestLienHe


Với phương thức goi() được khai báo trong lớp ThongTinLienHe có nội dung như bên dưới:




void goi(int soLanGoi) {
    while (soLanGoi > 0) {
        System.out.println("Gọi điện thoại...");
        soLanGoi--;
    }
}
 


Ta gọi đối số (argument) là những gì ta truyền vào trong phương thức.


Đối với Java, đối số là một giá trị, chẳng hạn số 3 được truyền vào hàm goi() như trong lời gọi ở trên, hoặc chuỗi Gọi điện thoại... như trong System.out.println("Gọi điện thoại..."), hoặc giá trị của một tham chiếu tới một đối tượng ngocAnh.


Khi lời gọi phương thức được thực thi, giá trị đối số đó được chép vào một tham số.


Tham số (parameter) thực chất chỉ là một biến địa phương của phương thức – một biến có một cái tên và một kiểu dữ liệu, nó có thể được sử dụng bên trong thân của phương thức.


Ví dụ, trong phương thức main của lớp TestLienHe ta có như thế này:




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

        // Khởi tạo đối tượng
        ThongTinLienHe ngocAnh = new ThongTinLienHe();

        // Gọi phương thức
        ngocAnh.goi(3);
    }
}
 


Khi gọi phương thức goi() từ tham chiếu ngocAnh và truyền giá trị 3 vào phương thức dưới dạng đối số.


Khi đó, giá trị 3 được chép vào tham số soLanGoi với định dạng mã nhị phân và sau đó tham số soLanGoi được dùng như biến cục bộ trong phương thức goi().


Kết quả chạy chương trình ta được:




Gọi điện thoại...
Gọi điện thoại...
Gọi điện thoại...
 



Ngoài ra, bạn cũng có thể có nhiều tham số, ví dụ, ta sửa lại phương thức goi() như sau:


Trong file: ThongTinLienHe.java




void goi(int soLanGoiString noiDung) {
    System.out.println("Số lần gọi: " + soLanGoi);
    System.out.println("Nội dung gọi: " + noiDung);
}
 


Trong file: TestLienHe.java



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

        // Khởi tạo đối tượng
        ThongTinLienHe ngocAnh = new ThongTinLienHe();

        // Gọi phương thức
        ngocAnh.goi(3"Tìm hiểu JAVA");
    }
}
 


Khi chạy chương trình ta có kết quả:



Số lần gọi: 3
Nội dung gọi: Tìm hiểu JAVA
 


Điều quan trọng cần nhớ:


  • Nếu một phương thức yêu cầu một tham số, ta phải truyền cho nó một giá trị nào đó (lúc truyền thì gọi là đối số), và giá trị đó phải thuộc đúng kiểu được khai báo của tham số.
  • Phương thức có thể có nhiều tham số
  • Khi khai báo, ta dùng dấu phảy , để tách giữa các tham số.
  • Và khi gọi hàm, ta phải truyền các đối số thuộc đúng kiểu dữ liệutheo đúng thứ tự đã khai báo.


Phương thức có thể trả về giá trị hoặc không. Phương thức đã khai báo sẽ trả về giá trị thuộc kiểu dữ liệu gì thì phải trả về giá trị thuộc kiểu đó. (Hoặc một giá trị thuộc một kiểu tương thích với kiểu đã khai báo.


> Ghi chú: Từ khóa void có nghĩa là phương thức này không trả về cái gì cả.



Ví dụ phương thức có giá trị trả về.


Thêm một phương thức trong ThongTinLienHe.java



// Phương thức có giá trị trả về kiểu int
int demoGiaTriTraVe() {
    return 3;
}
 


Trong TestLienHe.java ta thử in ra:



// Thử in ra giá trị trả về trong phương thức demoGiaTriTraVe
System.out.println((int)ngocAnh.demoGiaTriTraVe());
 

3. Cơ chế truyền bằng giá trị (Pass-by-value)


Ngôn ngữ lập trình JAVA sử dụng duy nhất một cơ chế truyền tham số: Truyền bằng giá trị (pass-by-value).


Khi một đối số được truyền vào một phương thức, chỉ có giá trị của nó được chép vào tham số tương ứng.


Kể từ đó, các thao tác liên quan của phương thức chỉ được thực hiện trên tham số đó – thực chất là biến cục bộ của phương thức.


Còn bản thân đối số đó không chịu ảnh hưởng gì của phương thức được gọi. Bạn có thể thêm đoạn code bên dưới vào chương trình để kiểm tra.




int a = 5;
ngocAnh.goi(a);
System.out.println(a);
 


Cơ chế truyền bằng giá trị hoạt động như thế nào khi đối số là tham chiếu đối tượng?


Cũng vậy thôi, giá trị của đối số được chép vào tham số. Và giá trị ở đây, như ta đã nói về bản chất của tham chiếu, là chuỗi bit biểu diễn cách truy nhập đối tượng đang được chiếu tới.


Kết quả của việc truyền đối số là ta được tham số cũng là một tham chiếu chiếu tới cùng một đối tượng mà đối số đang tham chiếu tới.


Tổng kết


Như vậy, bài viết đã cung cấp khá đầy đủ kiến thức về hành vi của đối tượng trong Java. Mình tin rằng bạn có thể hiểu và code ổn về phần kiến thức này khi xem kỹ các ví dụ bên trên.


Đây là những kiến thức cốt lỗi làm nền cho các phần nâng cao sau này, mình nhắc lại là như vậy. Hãy học từ từ và hiểu thật sâu bản chất bạn nhé.



> Nếu bạn đang tích cực học JAVA để đi thực tập, đi làm sớm, bạn có thể tham gia HỌC JAVA WEB (Full stack) để đẩy nhanh quá trình học. Học trực tiếp với đối tác tuyển dụng của NIIT - ICT Hà Nội.


---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python
Bình luận Facebook
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!