cuốn sách gpt4 ai đã làm

[Ôn tập Java và học loạt bài mới] Kiến thức cơ bản-03 Lớp đóng gói tương thích với các loại cơ bản

In lại Tác giả: Sahara Thời gian cập nhật: 2024-12-31 22:38:57 58 4
mua khóa gpt4 Nike

1. Có những loại bao bì nào?

Các loại cơ sở có các loại bao bọc tương ứng. for hạn chế như các bộ sưu tập khung, generics, vv

Thư từ:

base type Loại bao bì
boolean Boolean
byte Byte
ký tự Tính cách
trôi nổi Trôi nổi
int số nguyên
dài Dài
rút gọn Ngắn
gấp đôi Gấp đôi

2. Đặc điểm bao bì

  • Thiết kế này chắc chắn bảo vệ tính nhất quán trong hành vi và đặc điểm của lớp bao bọc, tránh được sự không chắc chắn mà lớp có thể gây ra ra.
  • Tính toán bất kỳ biến thể nào: Khi một phiên bản của lớp bao bọc được tạo, cơ sở dữ liệu kiểu dữ liệu sẽ được tạo kho lưu trữ trong đó không thể thay đổi. lỗi do vô hiệu hóa dữ liệu sửa đổi.
  • Ví dụ: chúng tôi hỗ trợ chuyển đổi dữ liệu loại, chuỗi xác định loại và do đó có được giá trị tối đa và tối thiểu.
  • Mối quan hệ kế thừa: Ngoại trừ Ký tự và Boolean, tất cả các lớp vỏ khác đều kế thừa từ lớp Số. Mối quan hệ kế thừa này cho phép các lớp bao bọc này chia sẻ các chức năng và tính năng chung, xem xét hạn chế so sánh và chuyển đổi số, cung cấp giao diện tối ưu nhất cho các hoạt động giữa các loại khác nhau.

Mã này được chứng minh (một lớp kế thừa lớp Number và phát triển phương thức intValue):

  .

 3. Tại sao bao bì xuất hiện?

Bây giờ đã có các loại cơ sở, tại sao lại xuất hiện các lớp đóng gói tương ứng?

Tôi nghĩ cơ sở này là Java là đối tượng hướng ngôn ngữ và các loại cơ sở dữ liệu không thể tham gia hướng dẫn cài đặt đối tượng:

Đối tượng hoạt động: Trong Java, nhiều lớp phương thức và sưu tập các đối tượng yêu thích được tạo thành một số lượng vì Thủy dữ liệu kiểu. cơ sở dữ liệu thành các đối tượng. cơ sở dữ liệu kiểu trong các phương thức này.

Xử lý giá trị null: Các loại cơ sở dữ liệu không thể rỗng, nhưng các lớp bọc thì có thể. một số trường hợp nhất được định nghĩa hợp lý, ngoài ra còn có các giới hạn khi các tùy chọn giá trị hoặc mặc định cần được biểu hiện trong diễn đàn in the tham số của phương thức. hơn và chắc chắn mạnh mẽ hơn cũng như khả năng đọc mã. xử lý dữ liệu và phân tích một cách an toàn khi cần thiết, từ đó cải thiện hoạt động của mã hóa.

 4. Đóng goi và giải nén

Boxing: is too trình chuyển đổi các cơ sở dữ liệu kiểu thành các gói đóng gói tương ứng.

Unboxing: is too trình chuyển đổi một lớp bao bọc thành cơ sở dữ liệu.

Đóng gói và mở hộp thư

Quyền thủ công: Quá trình sử dụng loại bộ giá trị cục bộ để tạo lớp bọc đối tượng tương ứng.

1 int số = 10;
2  
3 Số nguyên int1 = mới Số nguyên(num); // Phương pháp đóng gói thủ công một
4  
5 Số nguyên int2 = Integer.valueOf(num); // Phương pháp đóng gói thủ công 2

  .

Mở thủ công: Sử dụng phương thức intValue() của Integer kiểu đối tượng để lấy int giá trị của đối tượng này.

1 Số nguyên= mới Số nguyên(23);
2 int num = number.intValue(); // Mở công cụ hộp thư

  .

Tự động đóng gói và mở hộp

Java 5 giới thiệu các cơ chế tự động đóng hộp và tự động mở hộp để đơn giản hóa quá trình chuyển đổi giữa các loại cơ sở dữ liệu và các lớp vỏ bọc.

Autoboxing tự động chuyển đổi các loại cơ sở dữ liệu thành các lớp đối tượng tương ứng của họ. của lớp đóng gói tương tự, việc mở hộp tự động được phát triển bằng cách gọi phương thức xxxValue() của lớp close goi.

Lấy Integer và int ví dụ:

 Integer x = 2; // Integer.valueOf(2) được gọi để mở hộp int y = x;

5. Bộ đệm nhóm của gói đóng gói

Giới thiệu rút gọn

Cơ chế lưu trữ lớp đệm trong Java được thiết kế để tối ưu hóa hiệu suất và tiết kiệm bộ nhớ.

Nó cung cấp bộ nhớ đệm cho các lớp bao bọc bao gồm các số nguyên (Byte, Short, Integer, Long), Ký tự (Ký tự) và Boolean (Boolean), chắc chắn rằng Đối với các lớp bao bọc kiểu comcoma (Float, Double), không có cơ chế lưu vào bộ nhớ đệm như vậy, điều đó có nghĩa mỗi lần cần phải tạo một đối tượng mới.

Bằng cách này, Java mang lại kết quả tốt hơn khi xử lý các giá trị chung, nhưng xử lý số dấu phẩy tương đối đơn đơn giản và dễ hiểu.

Phạm vi bộ đệm

Đối với lớp Integer, Java lưu trữ tất cả các số nguyên trong phạm vi -128 đến 127.

Đối với các lớp Byte, Short và Character, phạm vi của bộ đệm tương tự nhau. Phạm vi cụ thể như sau:

Byte: -128 đến 127 Short: -128 đến 127 Ký tự: 0 đến 127 ( nghĩa là tất cả các ký tự ASCII) Boolean: Chỉ các giá trị đúng và bad sẽ được lưu vào bộ đệm.

bộ nhớ đệm kích hoạt

Chỉ khi phương thức valueOf() được gọi, nếu giá trị cần tạo đã được lưu vào bộ đệm thì bộ đệm cơ bản mới được kích hoạt. thì đối tượng được lưu trong bộ đệm sẽ được trả về. new icon sẽ được tạo trực tiếp.

Chúng ta hãy xem nguồn mã của phương thức valueOf() của lớp Integer (phương thức valueOf() trước khi xác định giá trị có trong nhóm có, nó sẽ trực tiếp trả về nội dung của bộ đệm nhóm. Logic được đưa ra là quán nhất):

 1 /** 2 * Trả về một phiên bản {@code Integer} đại diện cho giá trị 3 * {@code int} được chỉ định rõ nếu một phiên bản mới {@code Integer}. vì phương biểu thức này có khả năng 6 * mang lại hiệu suất về không gian và thời gian tốt hơn đáng kể bằng cách 7 * lưu vào bộ đệm các giá trị được yêu cầu thường xuyên. cái phạm vi -128 đến 127, bao gồm 10 * và có thể lưu vào bộ đệm các giá trị khác bên ngoài phạm vi này 11 * 12 * @param i một giá trị {@code int} @code i} 14 * @since 1.5 15 */ 16 Giá trị nguyên tĩnh công khaiOf(int) i) { 17 if (i >= IntegerCache.low && i <= IntegerCache.high) 18 trả về IntegerCache.cache[i + (-IntegerCache.low)]; 19 return new Số nguyên(i); 20 }

  Trình biên dịch sẽ gọi phương thức valueOf() trong quá trình tự động đóng hộp, do đó, nhiều phiên bản có cùng giá value và value trong bộ đệm nhóm phạm vi được tạo bằng cách sử dụng hộp thư tự động và chúng sẽ tham chiếu cùng một đối tượng.

1 số nguyên m = 1232 số nguyên n = 1233 System.out.println(m == n);

Trong Java 8, mặc định kích thước mặc định của số nguyên bộ đệm bộ nhớ là -128~127.

Trong jdk 1.8, vùng đệm IntegerCache rất đặc biệt. This is - 128 and limit on default is 127, but limit on this can be adjustment -XX:AutoBoxCacheMax=. để chỉ định kích thước của vùng đệm này, tùy chọn này có trong JVM trong quá trình khởi động, hệ thống thuộc tính có tên java.lang.IntegerCache.high sẽ được đặt và sau đó khi IntegerCache được khởi động, hệ thống thuộc tính sẽ được đọc để xác định giới hạn trên.

Sau đây là nguồn mã của IntegerCache (phần màu đỏ là logic lấy thuộc tính hệ thống và đặt lại giới hạn trên).

 1     Riêng tư tĩnh lớp học Nguyên bộ đệm {
 2         tĩnh cuối cùng int thấp = -128;
 3         tĩnh cuối cùng int cao;
 4         tĩnh cuối cùng Nguyên bộ nhớ đệm[];
 5 
 6         tĩnh {
 7             // cao giá trị có thể được cấu hình thuộc tính
 8             int h = 127;
 9 Chuỗi số nguyênCacheHighPropValue = 10 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); 11 if (integerCacheHighPropValue != null) { 12 thử { 13 int i = ParseInt(integerCacheHighPropValue 14 i); = Math.max(i, 127); 15 // Integer.MAX_VALUE 16 h = Math.min(i, Integer.MAX_VALUE - (-low) -1); 17 } Catch(NumberFormatException nfe) { 18 // thuộc 19 } 20 }
hai màu sắc             cao = h;
hai mươi hai 
hai mươi ba             bộ đệm = mới Số nguyên[(cao - thấp) + 1];
hai bốn bốn             int j = thấp;
25             (int k = 0; k < cache.length k++;)
26                 bộ đệm [k] = mới Số nguyên(j++);
27 
28             // phạm vi [-128, 127] phải được thực thi (JLS7 5.1.7)
29             confirm IntegerCache.high >= 127;
30         }
31 
32         Riêng tư IntegerCache() {}
33     }

  .

Xác định bộ đệm nhóm của lớp bao bọc (lấy số nguyên làm ví dụ)

  .

1 Số nguyên x = mới Số nguyên(123);
2 Số nguyên y = mới Số nguyên(123);
3 System.out.println(x == y);    // SAI
4 Số nguyên z = Số nguyên.valueOf(123);
5 Số nguyên k = Integer.valueOf(123);
6 System.out.println(z == k);   // ĐÚNG VẬY

  .

  .

6. Bổ sung

Lựa chọn cách giữa các loại cơ sở và các gói đóng gói:

  • Hiệu suất và khả năng sử dụng bộ nhớ: Các loại cơ sở dữ liệu bổ sung bộ nhớ trực tiếp trên ngăn xếp, sử dụng ít dung lượng lớn hơn và hiệu suất cao hơn. lý do heap và GC sẽ ảnh hưởng một chút đến hiệu suất.
  • Các vấn đề sử dụng: Nói chung, trong mã có hiệu suất yêu cầu cao, chúng tôi ưu tiên sử dụng các loại cơ sở dữ liệu. Trong các đối tượng cần được hướng dẫn trong các vấn đề (ví dụ: các loại đối tượng cần được sử dụng trong các lớp sưu tập tập), chúng tôi sẽ chọn các lớp bao bọc. limit as Integer.parseInt(), Double.NaN, vv Các phương thức và thuộc tính này không có sẵn trong cơ sở dữ liệu loại.

So sánh các loại cơ bản và các lớp bao bọc==:

Chỉ cần dự đoán các loại cơ sở dữ liệu, dự đoán các dữ liệu có giá trị bằng nhau hay không, nghĩa là lớp đóng gói sẽ tự động mở hộp vào lúc này.

  .

1 công cộng lớp học Ví dụ {
2     công cộng tĩnh trống rỗng chính(Chuỗi[] args) {
3         Số nguyên i1 = 10;
4         int i2 = 10;
5  
6         System.out.println(i1 == i2);
7     }
8 }

  .

Một điều khác biệt về việc lưu trữ giữa các loại nguyên thủy và các lớp bọc (vị trí lưu trữ của các loại nguyên thủy và các lớp bao bọc phụ thuộc vào nơi chúng được khai báo): .

  .

Local local.

Ý Delay. sau xuất trước (LIFO). sẽ phân tách không gian trên phân loại và được tự động giải nén sau khi phương thức được thực hiện.

Thành viên biến (Biến hiện).

Heap: Nếu các cơ sở dữ liệu là các thành viên biến thể của lớp (tức là các biến thể hiện), thì chúng sẽ được lưu trữ trong heap cùng với object. vòng đời phụ thuộc vào đối tượng: vòng đời của một thành viên Chỉ cần có một đối tượng tồn tại thì các thành viên khác nhau cũng tồn tại; mode tái sinh.

Các biến tĩnh.

Zone phương thức/Siêu không gian: Các biến tĩnh (dù là loại cơ bản hay không) là một phần của lớp, không phải là một thể cụ thể hiện các đối tượng. về sau). Phương thức có thể được coi là một phần của vùng heap. phiên bản đối tượng, chúng không thể được tạo bằng cách tạo một lẻ đối tượng được khởi động khi khởi động lớp được tải vào JVM.

Ví dụ mã:

 1 công cộng lớp học Ví dụ {
 2     // Các biến thành viên được lưu trữ trong heap
 3     int instanceVar;
 4 
 5     // Biến tĩnh, được lưu trữ trong phương thức hoặc không meta
 6     tĩnh int tĩnhVar;
 7 
 8     công cộng trống rỗng phương pháp() {
 9         // Biến cục bộ, được lưu trữ trên phân loại
10         int localVar = 10;
11     }
12 }

  .

Cuối cùng, bài viết này về [Xem lại Java trước đây và học loạt bài mới] Kiến thức cơ bản-03 Lớp cơ bản về đóng gói tương ứng sẽ kết thúc tại đây Nếu bạn muốn biết thêm về [Java ôn lại quá khứ và học loạt bài mới] Kiến thức cơ bản bản-03. duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai!.

58 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress