Thứ Năm, 18 tháng 11, 2021

| by Người đăng: NEJA GEMSTONES

0

Static là gì

Bạn đang xem: Static là gì Tại daquyneja.com
Bạn đang xem: Static là gì Tại daquyneja.com

Vậy static là gì? Sử dụng chúng trong trường hợp nào? Bài bây giờ mình sẽ giới thiệu với mọi người xoay quang keyword này.

Bạn đang xem: Static là gì

Biến của lớp & mẹo của lớp

Biến của lớp & mẹo của lớp

Thông thường, mỗi một mẹo hay một tính chất nào đó đều gắn chặt với một đối tượng rõ ràng và cụ thể. Mong muốn truy cập tới các biến hay mẹo của đối tượng, ta thường đều phải gọi cho các đối tượng rõ ràng và cụ thể.

Không những thế, trong một số trường hợp, ta mong muốn có dữ liệu nào đó của lớp được chia sẻ giữa toàn bộ các đối tượng thuộc một lớp, các mẹo của lớp hoạt động độc lập với các đối tượng của lớp đó, thì bí quyết là các biến lớp & mẹo lớp.

1 – Biến của lớp(biến static)

Đôi lúc, ta mong muốn một lớp có những biến dùng chung cho toàn bộ các đối tượng thuộc lớp đó.Ta gọi các biến dùng chung này là biến của lớp (class variable), hay gọi tắt là biến lớp.Chúng không gắn với bất kì một đối tượng nào mà chỉ gắn với lớp đối tượng.Chúng được dùng chung cho toàn bộ các đối tượng trong lớp đó.

Để phân biệt giữa biến thực thể & biến lớp khi khai báo trong khái niệm lớp, ta dùng keyword static cho các biến lớp. Vì keyword đó nên biến lớp thường được gọi là biến static.

Lấy chẳng hạn sau, bên cạnh biến thực thể name, lớp Cow còn tồn tại một biến lớp numOfCows với mục đích ghi lại số lượng các đối tượng Cow đã được tạo.

Mỗi đối tượng Cow có một biến name của riêng nó, nhưng numOfCows thì chỉ có đúng một bản dùng chung cho toàn bộ các đối tượng Cow.

numOfCows được khởi tạo bằng 0, mỗi lần một đối tượng Cow được tạo, biến này được tăng thêm 1 (tại hàm khởi tạo dành riêng cho đối tượng đó) để ghi nhận rằng vừa có thêm một thực thể mới của lớp Cow.

*

Từ bên ngoài lớp, ta có thể dùng tên lớp để truy nhập biến static. Ví dụ, dùng Cow.numOfCows để truy nhập numOfCows:

*

2 – Cách thức của lớp(hàm static)

Lại xét chẳng hạn trong phần 1, giả sử ta mong muốn numOfCows là biến private để không cho phép ai đó sửa từ bên ngoài lớp Cow.

Nhưng ta vẫn mong muốn cho phép đọc giá trị của biến này từ bên ngoài, nên ta sẽ bổ sung một mẹo, ví dụ getCount(), để trả về giá trị của biến đó.

public int getCount() { return numOfCows;}Như các mẹo mà ta đã quen dùng, để gọi getCount(), người ta sẽ cần đến một tham chiếu kiểu Cow & kích hoạt mẹo đó cho một đối tượng Cow.

Không những thế, sẽ có những vấn đề xảy ra như sau:

Cần đến một con bò để hiểu rằng có toàn bộ bao nhiêu con bò? Nghe có lẽ không được tự nhiên lắm.getCount() không dùng đến một đặc tính hay dữ liệu đặc trưng nào của mỗi đối tượng CowKhi còn chưa có một đối tượng Cow nào được tạo thì chẳng thể gọi được getCount()

Cần đến một con bò để hiểu rằng có toàn bộ bao nhiêu con bò? Nghe có lẽ không được tự nhiên lắm.getCount() không dùng đến một đặc tính hay dữ liệu đặc trưng nào của mỗi đối tượng CowKhi còn chưa có một đối tượng Cow nào được tạo thì chẳng thể gọi được getCount()

Cách thức getCount()không nên bị lệ thuộc vào các đối tượng Cow rõ ràng và cụ thể như thế.

Tìm hiểu thêm: Typeface Là Gì – điểm Khác Biệt Giữa Typeface & Font

Để khắc phục vấn đề này, ta có thể cho getCount() làm một mẹo của lớp (class method), thường gọi tắt là mẹo lớp – hay mẹo static – để nó có thể tồn tại độc lập với các đối tượng & có thể được gọi thẳng từ lớp mà không cần đến một tham chiếu đối tượng nào.

Ta dùng keyword static khi khai báo mẹo lớp:

*

Đặc tính độc lập so với các đối tượng của mẹo static chính là lí do ta đã luôn luôn phải khai báo mẹo main() với keyword static.

main() được kích hoạt để khởi động chương trình – khi chưa có bất kì đối tượng nào được tạo – nên nó phải được phép chạy mà không gắn với bất kì đối tượng nào.

3 – Hạn chế của mẹo lớp

Đặc tính về tính độc lập đó vừa là ưu thế vừa là hạn chế cho hoạt động của các mẹo lớp.

Không được gắn với một đối tượng nào, nên các mẹo static của một lớp chạy mà không biết một tí gì về bất kì đối tượng rõ ràng và cụ thể nào của lớp đó.

Như đã thấy trong chẳng hạn phần 2, getCount() chạy ngay cả khi không tồn tại bất kì đối tượng Cow nào.

Kể cả khi gọi getCount() từ một đối tượng rõ ràng và cụ thể thì getCount() cũng vẫn không biết gì về đối tượng Cow của đối tượng đó.

Vì khi đó, trình biên dịch chỉ dùng kiểu khai báo Cow để xác nhận nên chạy getCount() của lớp nào, nó không quan tâm tới đối tượng nào.

Nếu một biến thực thể được dùng đến trong một mẹo lớp, trình biên dịch sẽ không hiểu ta đang kể đến biến thực thể của đối tượng nào, bất cứ trong heap đang có 10 hay chỉ có duy nhất một đối tượng thuộc lớp đó.Tương đương khi gọi các mẹo của thực thể trong các mẹo static

**

4 – Khởi tạo biến của lớp

Các biến static được khởi tạo khi lớp được nạp vào bộ nhớ lưu trữ. Một lớp được nạp khi máy ảo Java quyết định đến lúc cần nạp, ví dụ như khi ai đó định tạo thực thể trước tiên của lớp đó, hoặc dùng biến static hoặc mẹo static của lớp đó.

Có hai bảo đảm về việc khởi tạo các biến static:

Các biến static trong một lớp được khởi tạo trước khi bất kì đối tượng nào của lớp đó có thể được tạoCác biến static trong một lớp được khởi tạo trước khi bất kì mẹo static nào của lớp đó có thể chạy

Các biến static trong một lớp được khởi tạo trước khi bất kì đối tượng nào của lớp đó có thể được tạoCác biến static trong một lớp được khởi tạo trước khi bất kì mẹo static nào của lớp đó có thể chạy

Ta có hai phương pháp để khởi tạo biến static.Đầu tiên, khởi tạo ngay tại dòng khai báo biến

private static int numOfCows = 0;Cách thứ hai: Java phân phối một cú pháp đặc biệt là khối khởi tạo static (static initialization block) – một khối mã được bọc trong cặp ngoặc { } & có tiêu đề là keyword static.

static { numOfCows = 0;}Một lớp có thể có vài khối khởi tạo static đặt ở bất cứ nơi đâu trong khái niệm lớp. Chúng được bảo đảm sẽ được kích hoạt theo đúng thứ tự hiện ra trong mã.

Tìm hiểu thêm: Ngày 11 Tháng 11 Là Ngày Gì, Lễ độc Thân Hay Lễ Hội Mua Sắm

& trọng yếu vị trí thứ nhất là chúng được bảo đảm sẽ chạy trước khi bất gì biến member nào được truy nhập hay mẹo static nào được chạy.

5 – Kết luận

Có một vài điểm cần chú ý mà mình mong chờ các bạn cần nhớ được như sau:

Cách thức lớp hay còn gọi là mẹo static không được gắn với một đối tượng rõ ràng và cụ thể nào & không lệ thuộc đối tượng nào, nó chỉ được gắn với lớpNên gọi mẹo static từ tên lớp.Cách thức static có thể được gọi mà không phải có đối tượng nào của lớp đó đang ở trong heap.Do không được gắn với một đối tượng nào, mẹo static chẳng thể truy nhập biến thực thể hay các mẹo thực thể.Biến lớp hay còn gọi là biến static là biến dùng chung cho toàn bộ các đối tượng của lớp. Chỉ có duy nhất một bản cho cả lớp, chứ không phải mỗi đối tượng có một bản.Cách thức static có thể truy nhập biến static.Nguồn xem qua

Cách thức lớp hay còn gọi là mẹo static không được gắn với một đối tượng rõ ràng và cụ thể nào & không lệ thuộc đối tượng nào, nó chỉ được gắn với lớpNên gọi mẹo static từ tên lớp.Cách thức static có thể được gọi mà không phải có đối tượng nào của lớp đó đang ở trong heap.Do không được gắn với một đối tượng nào, mẹo static chẳng thể truy nhập biến thực thể hay các mẹo thực thể.Biến lớp hay còn gọi là biến static là biến dùng chung cho toàn bộ các đối tượng của lớp. Chỉ có duy nhất một bản cho cả lớp, chứ không phải mỗi đối tượng có một bản.Cách thức static có thể truy nhập biến static.Nguồn xem qua

Giáo trình Lập trình hướng đối tượng với Java (2010) Trường Đại học Công nghệ – ĐHQGHN

Chuyên đề:

Chuyên đề: Hỏi Đáp


[Khóa học lập trình Java đến OOP] – Bài 19: Static trong Java | HowKteam


[Khóa học lập trình Java đến OOP] Bài 19: Static trong Java | HowKteam
Nếu các bạn thấy hay thì hãy đăng ký theo dõi kênh, like, share cho mọi người cùng gia nhập nhé.
Mong muốn ủng hộ mình các bạn có thể bấm vào marketing hiện lên & load xong để mình được ít tiền duy trì nhé.
Cảm ơn mọi người.
Học thêm học thức hoặc tải ebook tại https://ift.tt/3A6XYE2
Luyện tập trắc nghiệm hàng ngày tại https://kquiz.vn/
Tập hợp khóa học lập trình căn bản đến chuyên sâu.
Gia nhập group để update thêm thông tin cũng như gia nhập khóa học online Free.
Group FB: https://goo.gl/8T2krI
Trang web: https://ift.tt/32fj2MK
Danh mục phát: https://goo.gl/0LIji0
₵++:
Lập trình ₵++: https://goo.gl/8RCMte
Bài toán kinh điển ₵++: https://goo.gl/7CszwZ
₵:
Lập trình ₵: https://goo.gl/AhxyAI
Lập trình ₵ WinForms: https://goo.gl/dPbSm4
Lập trình ASP.NET MVC: https://goo.gl/riqrzP
Java:
Lập trình Java: https://goo.gl/VoDbbs
Lập trình Android: https://goo.gl/LyV3ZX
Game:
Lập trình Unity 3D: https://goo.gl/RcBi6c
Office:
Office Word 2016: https://goo.gl/GQUk5E
Office Excel 2016: https://goo.gl/N3qdKs
Office Power Point 2016: https://goo.gl/zegyVx
Products:
Game Caro ₵ Winforms: https://goo.gl/bMuXEC
Game Flappy Bird Unity 3D: https://goo.gl/K00l5y
Game bắn Zombies Unity 3D: https://goo.gl/HUjWlt
Game Doge Unity 3D: https://goo.gl/0pysFu
App lập lịch ₵ Winforms: https://goo.gl/xO0iX3
App từ điển nói ₵ Winforms: https://goo.gl/KgHNNn
App làm chủ quán Cafe ₵ Winforms: https://goo.gl/FLZDDM
App key logger ₵ Winforms: https://goo.gl/qV93CV
Stream:
Kỹ thuật: https://goo.gl/tGtmwq
Kinh nghiệm: https://goo.gl/VsQjkc
Tiếng động:
Two Step From Hell Colors Of Love
http://fbl.me/TJB
https://ift.tt/3cptDXh
https://ift.tt/3qQ94eN
https://ift.tt/Nb5ZbI
java_Kteam JavaCore_Kteam Tự_Học_Java Kteam kteam laptrinhkteam howkteam HowKteam

Tìm hiểu thêm nội dung thuộc chuyên đề: Hỏi đáp
Xem thêm bài viết thuộc chuyên mục: Hỏi đáp


source https://daquyneja.com/wiki/static-la-gi/

0 nhận xét:

Đăng nhận xét