Sử dụng lớp bao bọc trong Java

Các lớp trình bao bọc trong Java cung cấp một cách để bao bọc hoặc biểu thị giá trị của các kiểu dữ liệu nguyên thủy dưới dạng một đối tượng. Bằng cách tạo một đối tượng cho lớp trình bao bọc, một trường dữ liệu được tạo và trong trường này, chúng ta có thể lưu trữ giá trị của một kiểu dữ liệu nguyên thủy

Nó cũng bao gồm các phương thức để giải nén các đối tượng trở lại các kiểu dữ liệu nguyên thủy. Nó là một trong những lớp được cung cấp trong java. lang và tất cả các lớp bao bọc nguyên thủy trong Java là bất biến

Phạm vi

Bài viết này nhằm mục đích

  • Thảo luận về khái niệm lớp Wrapper trong Java
  • Giải thích sự cần thiết của các lớp Wrapper trong Java
  • Minh họa cách chuyển đổi từ kiểu dữ liệu nguyên thủy sang thể hiện của lớp bao bọc và ngược lại
  • Đề cập đến những lợi thế của việc sử dụng các lớp Wrapper trong Ứng dụng Java

Các kiểu dữ liệu nguyên thủy

Các kiểu dữ liệu nguyên thủy hoạt động như các khối xây dựng cơ bản của thao tác dữ liệu trong Java. Nhưng để hiểu rõ hơn về các lớp Trình bao bọc, trước tiên chúng ta hãy hiểu các Kiểu dữ liệu là gì và các Kiểu dữ liệu nguyên thủy cụ thể là gì

Vì Java là ngôn ngữ lập trình được nhập tĩnh, điều đó có nghĩa là không thể sử dụng bất kỳ biến nào nếu không khai báo nó. Chúng phải được khai báo trước khi chúng có thể được sử dụng

Vì vậy, để khai báo các biến chúng ta sử dụng kiểu dữ liệu. Kiểu dữ liệu về cơ bản là kiểu của một biến xác định giá trị mà nó có thể chứa và các thao tác có thể được thực hiện trên nó

Các kiểu dữ liệu trong Java được chia thành hai loại sau

  1. Các kiểu dữ liệu nguyên thủy. Các kiểu dữ liệu Nguyên thủy được tạo sẵn hoặc được xác định trước trong Java. Tám kiểu dữ liệu nguyên thủy bao gồm byte, short, int, long, float, double và char. Điều này được xác định trước bởi ngôn ngữ và được đặt tên theo một từ khóa dành riêng

  2. Các kiểu dữ liệu không nguyên thủy. Các loại dữ liệu không nguyên thủy được tạo bởi lập trình viên và không được xác định trước trong Java [ngoại trừ Chuỗi]. Các kiểu dữ liệu không nguyên thủy bao gồm Chuỗi, Mảng và Lớp, v.v.

Các kiểu dữ liệu nguyên thủy có một ràng buộc là chúng có thể chứa dữ liệu cùng loại và có kích thước cố định tùy thuộc vào loại dữ liệu. Ví dụ 1 byte chỉ lưu được số nguyên trong khoảng từ -128 đến 127. Ngoài ra, các kiểu dữ liệu nguyên thủy luôn có một giá trị

Giới thiệu về các lớp Wrapper trong Java

Chúng ta đã thảo luận về Các kiểu dữ liệu nguyên thủy trong phần trước. Vì các Kiểu dữ liệu nguyên thủy không thể được sử dụng trực tiếp làm đối tượng, đó là lý do tại sao các lớp Trình bao bọc xuất hiện

Các lớp chung hoạt động với các đối tượng và không hỗ trợ Nguyên thủy. Do đó, các lớp Wrapper là cần thiết khi chúng chuyển đổi các kiểu dữ liệu nguyên thủy thành các đối tượng và các đối tượng thực sự quan trọng nếu chúng ta cần sửa đổi các đối số được truyền trong một phương thức. Bây giờ, hãy thảo luận chi tiết về các lớp Wrapper

Ngôn ngữ lập trình Java cung cấp java. gói lang có các lớp cơ bản cho thiết kế và các lớp quan trọng nhất trong số đó là Đối tượng và Lớp

Vì vậy, các lớp trình bao bọc Java bao bọc hoặc biểu thị các giá trị của các kiểu dữ liệu nguyên thủy dưới dạng một đối tượng. Khi một đối tượng được tạo cho một lớp trình bao bọc, nó chứa một trường có thể lưu trữ các kiểu dữ liệu nguyên thủy

Đối tượng của một loại chỉ chứa một trường thuộc loại cụ thể đó, có nghĩa là một loại đối tượng Double chỉ chứa loại trường kép, đại diện cho giá trị đó để có thể lưu trữ một tham chiếu đến nó trong một biến của loại tham chiếu

Dưới đây là các Kiểu dữ liệu nguyên thủy và các lớp Trình bao bọc tương ứng của chúng

Kiểu dữ liệu nguyên thủy Lớp trình bao bọcchar CharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBoolean

Tại sao chúng ta cần các lớp trình bao bọc trong Java?

  • Bất cứ khi nào các kiểu nguyên thủy được yêu cầu như một đối tượng, các lớp bao bọc có thể được sử dụng. Các lớp trình bao bọc cũng bao gồm các phương thức để mở đối tượng và trả lại kiểu dữ liệu nguyên thủy
  • trong java. util, các lớp chỉ xử lý các đối tượng và đó là lý do tại sao trong trường hợp này, lớp trình bao bọc giúp
  • Trong khung Bộ sưu tập, Cấu trúc dữ liệu như ArrayList chỉ lưu trữ các đối tượng chứ không lưu trữ các kiểu nguyên thủy

// Invalid
ArrayList exampleList = new ArrayList[];

// Valid
ArrayList exampleList = new ArrayList[];
  • Đối với các phương thức hỗ trợ đối tượng như tạo từ các loại khác, chẳng hạn như Chuỗi

Integer num = new Integer["55"];
  • Các lớp trình bao bọc cũng được sử dụng để đồng bộ hóa trong đa luồng. Vì các đối tượng là cần thiết để đạt được quá trình đồng bộ hóa, nơi chúng tôi đảm bảo rằng tài nguyên được chia sẻ sẽ chỉ được sử dụng bởi một luồng tại một thời điểm

Luồng quy trình của Lớp trình bao bọc trong Java

Trong Java Wrapper Classes, đối tượng được tạo với các trường hoặc thuộc tính trong đó các kiểu dữ liệu nguyên thủy có thể được lưu trữ

Tạo đối tượng Wrapper

Sử dụng Trình xây dựng lớp Wrapper

Chúng ta có thể tạo một đối tượng trình bao bọc bằng cách sử dụng lớp trình bao bọc và hàm tạo của nó bằng cách truyền giá trị cho nó

cú pháp

ClassName objectName = new ClassName[argument];

Ví dụ

Integer number = new Integer[77]; // int
Integer number2 = new Integer["77"]; // String
Float number3 = new Float[77.0]; // double argument
Float number4 = new Float[77.0f]; // float argument
Float number5 = new Float["77.0f"]; // String
Character c1 = new Character['S']; // Only char constructor
Character c2 = new Character[1234]; // COMPILER ERROR
Boolean b = new Boolean[true]; // value stored - true

Tuy nhiên, cách tạo một thể hiện của các lớp trình bao bọc bằng cách sử dụng hàm tạo không được dùng nữa kể từ phiên bản JDK mới nhất. Điều này là do mỗi khi bộ nhớ mới được phân bổ trong heap khi chúng ta tạo một đối tượng với sự trợ giúp của hàm tạo. Ngoài ra, hàm tạo Ký tự [char] không được dùng nữa kể từ phiên bản JDK 9

Chỉ sử dụng lớp Wrapper [thay vì kiểu nguyên thủy]

Chúng ta cũng có thể tạo một thể hiện của các lớp trình bao bọc mà không cần các hàm tạo của chúng. Chúng ta có thể tạo một biến có kiểu dữ liệu giống như tên lớp của các lớp bao bọc và gán giá trị thô cho nó mà không cần sử dụng toán tử new như hình bên dưới

cú pháp

ClassName objectName = value;

ví dụ 1

public class CreatingWrapperObject {

  public static void main[String[] args] {
    // Creating the object using the wrapper class
    // without passing the value to the constructor

    // Object intValue of type Integer will store the value 10 as int
    Integer intValue = 10;
    Double doubleValue = 8.89;
    Character charValue = 'S';

    // Printing the values using the created objects
    System.out.println[intValue];
    System.out.println[doubleValue];
    System.out.println[charValue];
  }
}

ví dụ 2. Chuyển đổi một số nguyên thành một đối tượng lớp trình bao bọc Chuỗi bằng phương thức toString[]

public class CreatingWrapperObject2 {

  public static void main[String[] args] {
    // Creating the object using the Wrapper class
    Integer intValue = 1000;

    // Converting the integer value to String and 
    // assigning it to stringObject
    String stringObject = intValue.toString[];

    // Printing the length of the String using length[] method
    System.out.println[stringObject.length[]];
  }
}

đầu ra

Sử dụng các phương thức valueOf tĩnh

Bằng cách sử dụng phương thức valueOf tĩnh, một đối tượng Wrapper có thể được tạo

cú pháp


ClassName objectName = ClassName.valueOf[argument[s]];
// Multiple parameters may be present

Ví dụ

________số 8

Ghi chú

Sự khác biệt trong việc sử dụng các phương thức khác và phương thức tĩnh valueOf[] là - Bằng cách sử dụng phương thức Constructor hoặc Wrapper Class, chúng ta sẽ luôn tạo một đối tượng mới sẽ cấp phát một bộ nhớ mới trong heap mỗi lần, trong khi sử dụng phương thức tĩnh valueOf[],

Các tính năng của các lớp trình bao bọc Java

Sửa đổi giá trị trong chức năng

Chúng ta có hàm 'gọi theo giá trị' trong lập trình Java, bằng cách sử dụng hàm này, chúng ta có thể sửa đổi các đối số được truyền vào một phương thức với sự trợ giúp của các đối tượng được chuyển đổi từ các kiểu dữ liệu nguyên thủy. Nếu đối số không phải là hằng số và nó cần được sửa đổi, chúng ta có thể truyền các đối tượng và có thể sửa đổi các giá trị cho phù hợp

đồng bộ hóa

Để hỗ trợ đồng bộ hóa Java, cần có một đối tượng. Nó hoạt động thành các đối tượng trong đa luồng. Đối với việc xác định các khối trong đa luồng, các đối tượng được yêu cầu

Các khối được đồng bộ hóa trong Java được đánh dấu bằng từ khóa được đồng bộ hóa. Khối này trong Java được đồng bộ hóa trên một số đối tượng. Tất cả các khối được đồng bộ hóa trên cùng một đối tượng chỉ có thể có một luồng thực thi bên trong chúng tại một thời điểm. Tất cả các luồng khác cố gắng vào khối được đồng bộ hóa đều bị chặn cho đến khi luồng bên trong khối được đồng bộ hóa thoát khỏi khối

Tuần tự hóa

Để thực hiện tuần tự hóa, đối tượng được chuyển đổi trong các luồng. Đối tượng có thể được lấy lại bằng cách sử dụng các lớp bao bọc java. Về cơ bản, lớp của đối tượng phải triển khai giao diện Serializable trực tiếp hoặc gián tiếp

java. gói sử dụng

Việc triển khai các lớp tiện ích trong **java. util **gói là để khớp với các đối tượng và các lớp trình bao bọc cũng giúp đạt được điều tương tự

khung bộ sưu tập

Các lớp khung bộ sưu tập Java như ArrayList, HashSet, Vector, LinkedList, v.v. chỉ lưu trữ các đối tượng tôi. e. kiểu tham chiếu và không phải kiểu nguyên thủy. Vì vậy, các đối tượng là thể hiện của các lớp bao bọc và đó là lý do tại sao nó giúp ích cho việc này

Các phương thức được hỗ trợ bởi các lớp Wrapper

Tất cả các lớp bao bọc số là các lớp con của lớp trừu tượng Số như Byte, Integer, Double, Short, Float, Long

Một số phương thức được sử dụng thường xuyên mà tất cả các lớp con của lớp Số thực hiện được liệt kê trong bảng sau

MethodMethod DescriptiontypeValue[] Chuyển đổi giá trị của một đối tượng Số như Integer, Float hoặc Double thành kiểu dữ liệu nguyên thủy đã chỉ định và trả về valuecompareTo[] So sánh đối tượng Number này với đối số truyền quaequals[] Xác định xem đối tượng Number này có bằng đối sốvalueOf không

Có nhiều phương thức như vậy được triển khai bởi các lớp con của lớp Số. Bảng trên chỉ liệt kê một vài trong số chúng

hộp tự động

Autoboxing là khi trình biên dịch Java thực hiện chuyển đổi tự động các kiểu dữ liệu nguyên thủy thành đối tượng của các lớp trình bao bọc tương ứng của chúng. Ví dụ: chuyển đổi một int thành Integer, double thành Double, v.v.

Trình biên dịch Java áp dụng autoboxing khi một giá trị nguyên thủy là

  • Được truyền dưới dạng tham số cho một phương thức mong đợi một đối tượng của lớp trình bao bọc tương ứng
  • Được gán cho một biến của lớp bao bọc tương ứng

Ví dụ

//Autoboxing example of int to Integer and char to Char

public class AutoboxingExample {

  public static void main[String args[]] {
    char ch = 's';

    //Autoboxing- primitive to Character object conversion
    Character s = ch;

    int a = 50;

    // Converting int into Integer explicitly
    Integer first = Integer.valueOf[a];

    // Autoboxing, now compiler will write Integer.valueOf[a] 
    // internally and hence, doesn't generate an error
    Integer second = a;

    System.out.println[a];
    System.out.println[first];
    System.out.println[second];
  }
}

đầu ra

Giải trình

Ở đây, đầu ra là 50 cho tất cả như

  • Biến a được gán cho giá trị int 50
  • Biến đầu tiên được gán cho giá trị của a là 50. Chỉ trong trường hợp như vậy, kiểu dữ liệu nguyên thủy int được chuyển đổi thành Integer một cách rõ ràng
  • Biến thứ hai cũng sẽ có giá trị a là 50 do tự động đóng hộp, trình biên dịch sẽ tự động thực hiện chuyển đổi bên trong [chuyển đổi ngầm định]

mở hộp

Nó chỉ là quá trình ngược lại của autoboxing. Mở hộp đang tự động chuyển đổi một đối tượng thuộc loại trình bao bọc [ví dụ: Số nguyên] thành giá trị nguyên thủy [int] tương ứng của nó

Trình biên dịch Java áp dụng mở hộp khi một đối tượng của lớp trình bao bọc được

  • Được truyền dưới dạng tham số cho một phương thức mong đợi một giá trị của kiểu nguyên thủy tương ứng
  • Được gán cho một biến có kiểu nguyên thủy tương ứng

Ví dụ

Integer num = new Integer["55"];
0

đầu ra

Giải trình

Ở đây, đầu ra cho tất cả là 5 như

  • Đối tượng a được tạo với Integer truyền giá trị 5
  • Biến đầu tiên được gán với một. intValue[]. Giá trị của a là 5 nên giá trị đầu tiên sẽ là 5
  • Biến thứ hai được gán trực tiếp cho một. Do mở hộp, trình biên dịch sẽ gán bên trong giá trị số nguyên của a là 5 giây

Các lớp Java Wrapper Ví dụ

1. Các kiểu nguyên thủy cho các đối tượng bao bọc

Integer num = new Integer["55"];
1

đầu ra

Integer num = new Integer["55"];
2

Giải trình

Trong ví dụ trên, chúng ta đã sử dụng phương thức valueOf[] để chuyển đổi các kiểu nguyên thủy thành các đối tượng

Ở đây, chúng tôi đã sử dụng toán tử instanceof để kiểm tra xem các đối tượng được tạo có thuộc kiểu Integer hay Double hay không

Tuy nhiên, trình biên dịch Java có thể chuyển đổi trực tiếp các kiểu nguyên thủy thành các đối tượng tương ứng. Ví dụ,

Integer num = new Integer["55"];
3

Quá trình này được gọi là auto-boxing mà chúng ta đã thảo luận. Trong đó việc chuyển đổi xảy ra đối với các kiểu nguyên thủy thành các đối tượng bên trong. Giống như ở đây trong ví dụ trên, giá trị kiểu nguyên thủy của a được chuyển đổi thành đối tượng aObj. Bên trong, số nguyên. valueOf[a] được trình biên dịch sử dụng và aObj được gán cho giá trị của a là 5

2. Bao bọc các đối tượng thành các kiểu nguyên thủy

Integer num = new Integer["55"];
4

đầu ra

Integer num = new Integer["55"];
5

Giải trình

Trong ví dụ trên, chúng ta đã sử dụng phương thức intValue[] và doubleValue[] để chuyển đổi các đối tượng Integer và Double thành các kiểu nguyên thủy tương ứng

Tuy nhiên, trình biên dịch Java có thể tự động chuyển các đối tượng thành các kiểu nguyên thủy tương ứng. Ví dụ,

Integer num = new Integer["55"];
6

Quá trình này được gọi là mở hộp mà chúng ta đã thảo luận

Lớp trình bao bọc tùy chỉnh trong Java

Vì các lớp Trình bao bọc Java bao bọc các kiểu dữ liệu nguyên thủy. Tương tự như vậy, chúng ta cũng có thể tạo lớp trình bao bọc tùy chỉnh trong Java để bao bọc một kiểu dữ liệu nguyên thủy

Mục đích của trình bao bọc là gì?

Trình bao bọc được sử dụng cho hai mục đích chính. để chuyển đổi dữ liệu sang định dạng tương thích hoặc để ẩn sự phức tạp của thực thể bên dưới bằng cách sử dụng trừu tượng . Các ví dụ bao gồm trình bao bọc đối tượng, trình bao bọc chức năng và trình bao bọc trình điều khiển.

Lớp bao bọc là gì và công dụng của nó?

Các lớp trình bao bọc cung cấp cách sử dụng các kiểu dữ liệu nguyên thủy [ int , boolean , v.v. ] như các đối tượng. Bảng bên dưới hiển thị kiểu nguyên thủy và lớp trình bao bọc tương đương. Kiểu dữ liệu nguyên thủy. lớp bọc

Chủ Đề