Object và Class trong Java

Trong bài hướng dẫn tự học Java này, chúng ta sẽ tìm hiểu về các đối tượng (Object) và các lớp (Class) trong Java.

Object và Class trong Java
Object và Class trong Java

Trong kỹ thuật lập trình hướng đối tượng, chúng ta thiết kế một chương trình sử dụng các đối tượng và các lớp.

Object là gì?

Một thực thể có trạng thái và hành vi được gọi là một đối tượng (Object), ví dụ: ghế, xe đạp, bút đánh dấu, bút, bàn, xe hơi, v.v.

Nó có thể là vật lý hoặc logic (hữu hình và vô hình). Ví dụ về một đối tượng vô hình là hệ thống ngân hàng.

Một đối tượng có ba đặc điểm:

  • State: Trạng thái thể hiện dữ liệu (giá trị) của một đối tượng.
  • Behavior: Thể hiện hành vi (chức năng) của một đối tượng như gửi tiền, rút ​​tiền, v.v.
  • Indentity: Một danh tính đối tượng thường được triển khai thông qua một ID duy nhất. Giá trị của ID không hiển thị cho người dùng bên ngoài. Tuy nhiên, nó được JVM sử dụng nội bộ để xác định duy nhất từng đối tượng.

Ví dụ, Bút là một đối tượng. Tên của nó là “Bút Bi”, màu xanh, được gọi là trạng thái của nó. Nó được sử dụng để viết, vì vậy viết là hành vi của nó.

Một đối tượng là một thể hiện của một lớp. Một lớp là một mẫu hoặc bản thiết kế mà từ đó tạo ra các đối tượng cụ thể.

Vì vậy, một đối tượng là thể hiện (kết quả) của một lớp.

Định nghĩa đối tượng:

  • Một đối tượng là một thực thể trong thế giới thực.
  • Một đối tượng là một thực thể runtime.
  • Đối tượng là một thực thể có trạng thái và hành vi.
  • Đối tượng là một thể hiện của một lớp.

Class là gì?

Một lớp (Class) là một nhóm các đối tượng có các thuộc tính chung. Nó là một mẫu hoặc bản thiết kế mà từ đó tạo ra các đối tượng. Nó là một thực thể logic. Nó không thể là vật lý.

Một lớp trong Java có thể chứa:

  • Trường (Fields)
  • Phương thức (Method)
  • Constructors (Hàm tạo)
  • Khối (Block)
  • Lớp lồng nhau (Nested class) và Interface

Cú pháp khai báo một class:

class <class_name>{  
    field;  
    method;  
}

Instance Variable trong Java

Một biến được tạo bên trong lớp nhưng bên ngoài phương thức được gọi là biến thể hiện (Instance Variable).

Biến thể hiện không nhận được bộ nhớ (chiếm bộ nhớ) tại thời gian biên dịch. Nó nhận được bộ nhớ trong runtime khi một đối tượng hoặc một thể hiện được tạo.

Đó là lý do tại sao nó được gọi là một biến thể hiện.

Phương thức trong Java

Trong Java, một phương thức (method) giống như một hàm (function) được sử dụng để làm hành vi của một đối tượng.

Ưu điểm của phương thức:

  • Tái sử dụng code
  • Tối ưu hóa code

Từ khóa new trong Java

Từ khóa new được sử dụng để phân bổ bộ nhớ trong runtime. Tất cả các đối tượng có được bộ nhớ trong vùng nhớ Heap.

Ví dụ về Object và Class: main bên trong class

Trong ví dụ này, chúng ta đã tạo một lớp Student có hai data member là idname. Tiếp đến, trong main chúng ta tạo đối tượng của lớp Student bằng từ khóa new và in giá trị của đối tượng.

Lưu ý: Tên class phải viết Hoa chữ cái đầu theo Quy ước đặt tên trong Lập trình Java

Ở đây, chúng ta đang tạo một phương thức main() bên trong lớp.

Tạo ra một file Student.java

// Chương trình Java hướng dẫn định nghĩa class và trường 
// Tạo một class
class Student{

 // Định nghĩa trường
 int id;// trường (field) hoặc data member hoặc instance variables
 String name;

 //Tạo phương thức main bên trong class Student
 public static void main(String args[]){
  //Tạo một đối tượng hoặc một thể hiện
  Student s1 = new Student(); // Tạo một sinh viên s1 từ class Student 
  //In giá trị của đối tượng
  System.out.println(s1.id); // Truy cập thông qua tham chiếu
  System.out.println(s1.name);
 }
}

Kết quả:

0
null

Đấy là vì chúng ta mới chỉ khai báo biến chứ chưa gán giá trị. Tuy nhiên, như bạn thấy đấy, dù chưa gán giá trị nhưng mặc định của int là 0 và String là null.

Ví dụ về Object và Class: main bên ngoài class

Trong khi lập trình thực tế, chúng ta không tạo main bên trong lớp như ví dụ trên vì tuân theo chữ “S” trong Nguyên tắc SOLID: “Nguyên tắc trách nhiệm duy nhất”

Do đó, chúng ta tạo các lớp và sử dụng nó từ một lớp khác.

Chúng ta hãy xem một ví dụ đơn giản, nơi chúng ta tạo phương thức main() trong một lớp khác.

Chúng ta có thể có nhiều lớp trong các tệp Java khác nhau hoặc tạo thêm một tệp Java (nếu muốn).

Lưu ý: Một cách làm tốt nếu bạn định nghĩa nhiều lớp trong một file java, thì nên lưu tên tệp với tên lớp có phương thức main().

Ví dụ, bên dưới đây mình có một file và có lớp Student để định nghĩa các thông tin sinh viên và lớp TestStudent1 để tạo đối tượng (từ lớp Student) và in thông tin sinh viên.

Như vậy, mình sẽ đặt tên tệp là TestStudent1.java

// Chương trình Java có lớp main ở  
// một class khác

// Tạo class Student
class Student{  
  int id;  
  String name;  
}

// Tạo class khác là TestStudent1 chứa phương thức main 
class TestStudent1{
  public static void main(String args[]){  
  Student s1 = new Student();
  System.out.println(s1.id);
  System.out.println(s1.name);
 }
}

Kết quả:

0
null

3 Cách để khởi tạo đối tượng trong Java

Có 3 cách để khởi tạo một đối tượng trong Java:

  • Khởi tạo đối tượng bằng biến tham chiếu
  • Khởi tạo đối tượng bằng phương thức
  • Khởi tạo đối tượng bằng Constructor

Cách #1: Khởi tạo đối tượng thông qua tham chiếu

Khởi tạo một đối tượng có nghĩa là lưu trữ dữ liệu vào đối tượng. Chúng ta hãy xem một ví dụ đơn giản nơi chúng ta sẽ khởi tạo đối tượng thông qua một biến tham chiếu.

File: TestStudent2.java

class Student{  
 int id;  
 String name;
}
class TestStudent2{ 
  public static void main(String args[]){  
    Student s1 = new Student();  
    s1.id = 17;
    s1.name = "Hải";
    System.out.println(s1.id+" "+s1.name);// In thông tin với 1 khoảng trắng
 }
}

Kết quả:

17 Hải

Chúng ta cũng có thể tạo nhiều đối tượng và lưu trữ thông tin trong đó thông qua biến tham chiếu.

File: TestStudent3.java

class Student{  
  int id;  
  String name;  
}

class TestStudent3{  
  public static void main(String args[]){  
    // Tạo đối tượng  
    Student s1 = new Student();  
    Student s2 = new Student();  
    // Khởi tạo đối tượng 
    s1.id = 17;  
    s1.name = "Hải";  
    s2.id = 18;
    s2.name = "Doanh";  
    // In thông tin
    System.out.println(s1.id+" "+s1.name);  
    System.out.println(s2.id+" "+s2.name);  
  }  
}

Kết quả:

17 Hải
18 Doanh

Cách #2: Khởi tạo đối tượng thông qua phương thức

Trong ví dụ này, chúng ta đang tạo hai đối tượng của lớp Student và khởi tạo giá trị cho các đối tượng này bằng cách gọi phương thức insertRecord().

Ở đây, chúng tôi đang hiển thị trạng thái (dữ liệu) của các đối tượng bằng cách gọi phương thức displayInformation().

File: TestStudent4.java

class Student{  
  int age;  
  String name;  
  void insertRecord(int a, String n){  
    age = a;  
    name = n;
  }
  void displayInformation(){
    System.out.println(name+" "+age);
  }  
} 
class TestStudent4{  
 public static void main(String args[]){  
  Student s1 = new Student();  
  Student s2 = new Student();  
  s1.insertRecord("Hải", 20);  
  s2.insertRecord("Doanh", 21);  
  s1.displayInformation();  
  s2.displayInformation();  
 }  
}  

Kết quả:

Hải 20
Doanh 21
Stack memory và Heap memory
Stack memory và Heap memory

Như bạn có thể thấy trong hình trên, đối tượng được bộ nhớ trong lĩnh vực bộ nhớ heap. Biến tham chiếu liên quan đến các đối tượng được phân bổ ở khu vực bộ nhớ heap.

Ở đây, các biến s1 và s2 cả hai đều là tham chiếu đề cập tới các đối tượng được phân bổ trong bộ nhớ.

Cách #3: Khởi tạo đối tượng thông qua Constructor

Chúng ta sẽ tìm hiểu về các hàm tạo (constructor )trong Java sau.

Các cách khác nhau để tạo một đối tượng trong Java là gì?

Có nhiều cách để tạo một đối tượng trong java:

  • Tạo đối tượng sử dụng từ khóa new
  • Tạo đối tượng sử dụng phương thức newInstance()
  • Tạo đối tượng sử dụng Deserialization
  • Tạo đối tượng sử dụng factory method

Chúng ta sẽ học những cách này để tạo đối tượng sau này.

Anonymous object trong Java

Ẩn danh (Anonymous) đơn giản có nghĩa là không tên. Một đối tượng không có tham chiếu được gọi là một đối tượng ẩn danh (Anonymous object). Nó chỉ có thể được sử dụng tại thời điểm tạo đối tượng.

Nếu bạn phải sử dụng một đối tượng chỉ một lần, một đối tượng ẩn danh là một cách tiếp cận tốt. Ví dụ:

new Calculation(); // anonymous object  

Gọi phương thức thông qua tham chiếu:

Calculation c = new Calculation();  
c.fact(5);

Gọi phương thức thông qua Anonymous object:

new Calculation().fact(5);

Chúng ta hãy xem ví dụ đầy đủ về một đối tượng ẩn danh (anonymous object) trong Java.

class Calculation{  
  void fact(int n){  
    int fact = 1;  
    for(int i = 1; i <= n; i++){  
      fact = fact*i;  
    }  
  System.out.println(n+" giai thừa là: "+fact);  
  }
  
  public static void main(String args[]){  
    new Calculation().fact(5); // Gọi phương thức với anonymous object  
 }  
}  

Kết quả:

5 giai thừa là: 120

Tạo nhiều đối tượng chỉ bằng một loại

Chúng ta có thể tạo nhiều đối tượng theo một loại chỉ khi chúng ta làm trong trường hợp nguyên thủy.

Khởi tạo các biến nguyên thủy:

int a = 10, b = 20;

Khởi tạo các biến tham chiếu:

Rectangle r1 = new Rectangle(), r2 = new Rectangle(); //Tạo 2 đối tượng

Hãy xem ví dụ:

// Chương trình Java tính diện tích hình chữ nhật (Rectangle) 
// có length là chiều dài, width là chiều rộng
class Rectangle{  
  int length;  
  int width;  
  void insert(int l,int w){  
    length = l;  
    width = w;  
  }  
  void calculateArea(){
    System.out.println(length*width);
  }  
}
 
class TestRectangle2{  
  public static void main(String args[]){  
    Rectangle r1 = new Rectangle(),r2 = new Rectangle();
    r1.insert(11,5);
    r2.insert(3,15);
    r1.calculateArea();
    r2.calculateArea();
 }
}

Kết quả:

55
45

Tổng kết

Như vậy là trong bài này các bạn đã được tìm hiểu về đối tượng (object)lớp (class) trong Java cũng như là cách tạo đối tượngcách khởi tạo đối tượng.

Qua các bài tiếp theo khi chúng ta tiếp tục làm việc với đối tượng và lớp các bạn sẽ dần hiểu thêm và thuần thục sử dụng đối tượng và lớp.

>> Hoặc tham gia lớp học Java offline ngay để được hướng dẫn kỹ càng nhất.

Chúc bạn học Java tốt!

JavaDEV

Bài viết gần đây

Hướng dẫn tải và Cài đặt Java cho Windows 10 (Chi tiết)

Bài viết này mình sẽ hướng dẫn bạn cách tải và cài đặt Java cho Windows 10 để học lập trình Java.

Tìm hiểu về instanceof trong JAVA

Một vài ví dụ đơn giản để bạn hiểu hơn về toán tử instanceof trong Java. Cũng như cách sử dụng instanceof trong thực tế như thế nào.

Static Binding và Dynamic Binding trong Java

Bạn đang tìm hiểu về Binding trong Java? Về cơ bản, việc kết nối một cuộc gọi phương thức...

Tìm hiểu về Đa hình trong JAVA

Đa hình (Polymorphism) trong Java là một khái niệm để chỉ những hành động có thể thực hiện theo nhiều cách khác nhau.

Từ khóa FINAL trong JAVA

Từ khóa final có thể được áp dụng với các biến, một biến final không có giá trị, nó được gọi là biến final trống hoặc biến cuối cùng chưa được khởi tạo.

Khối Khởi tạo thể hiện trong JAVA

Khối khởi tạo thể hiện được sử dụng để khởi tạo các biến thể hiện. Nó chạy mỗi lần khi đối tượng của lớp được tạo.

Leave a reply

Please enter your comment!
Please enter your name here