Trong Java, Static là từ khóa có lẽ mà hầu hết các lập trình viên đều quá quen thuộc. Để lập trình tốt, đòi hỏi bạn phải hiểu rõ về khái niệm này cũng như cách sử dụng của nó.Vậy Static là gì và dùng trong trường hợp nào? Bài viết dưới đây sẽ giới thiệu với các bạn những thông tin cơ bản.

Static là gì?

Về cơ bản, từ khóa này sẽ được sử dụng trong quản lý bộ nhớ một cách có hệ thống hơn. Mặc dù vậy, Static không thể quản lý bộ nhớ của đối tượng, hay là thể hiện lớp. Thay vào đó, chúng chỉ có thể quản lý bộ nhớ của lớp.

Static trong Java có ý nghĩa và ứng dụng gì

Lấy ví dụ, ngoài biến thực thể name, lớp Cow còn có một biến lớp numOfCows. Để 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 riêng, nhưng numOfCows chỉ có duy nhất một bản dùng chung cho mọi đối tượng Cow.

numOfCows được khởi tạo bằng 0 và mỗi lần tạo được 1 đối tượng Cow. Biến được tăng thêm 1, thể hiện có thêm 1 thực thể mới của lớp Cow.

Static được áp dụng với các biến, phương thức, khối, các lớp lồng nhau và chi tiết như sau:

Biến của lớp – biến Static

Biến của lớp là gì?

Mỗi một phương thức, một thuộc tính đều gắn với một đối tượng cụ thể. Thông thường, để truy cập tới các biến, phương thức của đối tượng. Người dùng cần gọi cho đối tượng cụ thể.

Trong một vài trường hợp, bạn cần có dữ liệu nào đó của lớp được chia sẻ giữa các đối tượng thuộc một lớp. Đồng thời, các phương thức của lớp hoạt động độc lập với đối tượng của lớp. Lúc này, các biến lớp và phương thức lớp là giải pháp tối ưu.

Một lớp có những biến dùng chung cho các đối tượng thuộc lớp, thì các biến dùng chung này được gọi là biến của lớp – class variable. Biến lớp gắn với lớp đối tượng và nó không gắn với bất cứ đối tượng nào. Bởi chúng được dùng chung cho tất cả đối tượng trong cùng lớp.

Trong định nghĩa lớp, để phân biệt biến thực thể – biến lớp sẽ cần dùng từ khóa static cho biến lớp. Chính vì thế, biến lớp còn được biết đến với tên gọi là biến Static.

Biến lớp gắn với lớp đối tượng và nó không gắn với bất cứ đối tượng nào

Biến này trong lập trình Java có thể dùng để chỉ thuộc tính chung của một nhóm đối tượng. Ví dụ, biến này được dùng để khai báo tên tên trường đại học của một nhóm sinh viên. 

Nếu một biến vừa được khai báo Static và cả Final trong Java sẽ được xem như một hằng số. Khi giải trình hằng số có nhiều từ sẽ cần viết hoa chữ cái đầu, phân cách bằng dấu (_).

Lưu ý, để khai báo biến Static và non-Static, sử dụng giá trị mặc định tương đồng.

Cụ thể:

  • Giá trị mặc định của primitive integers (long, int, short, byte) là 0, của primitive floating points (double, float) là 0.0
  • Giá trị mặc định của boolean là false, của object references là null

Khởi tạo biến của lớp bằng cách nào

Khởi tạo biến của lớp khi nào

Biến lớp hay được khởi tạo khi lớp được nạp vào bộ nhớ. Về cơ bản, một lớp được nạp khi Java quyết định đến lúc cần nạp.

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

  • Biến static trong một lớp được khởi tạo, trước khi đối tượng của lớp được tạo.
  • Các biến này trong một lớp được khởi tạo trước khi phương thức static của lớp có thể chạy.

Có 2 cách để khởi tạo biến Static, đầu tiên là khởi tạo ngay tại dòng khai báo biến: private static int numOfCows = 0;

Cách 2, Java cung cấp một cú pháp là khối khởi tạo static. Gồm một khối mã, bọc trong { }, với tiêu đề là từ khóa Static.

static {

 numOfCows = 0;

}

Có thể có vài khối khởi tạo Static ở một lớp được đặt ở bất cứ đâu trong định nghĩa lớp. Chúng được kích hoạt theo đúng thứ tự xuất hiện trong mã và được đảm bảo chạy trước khi bất kỳ thành viên nào được truy nhập. Hoặc phương thức Static nào được chạy.

Tìm hiểu thêm:

Tìm hiểu về phương thức của lớp – hàm 

Phương thức của lớp – hàm

Ví dụ, bạn muốn numOfCows là biến private, mục đích là không cho phép ai đó sửa từ bên ngoài lớp Cow. Tuy nhiên bạn vẫn cho phép được đọc giá trị của biến từ bên ngoài. Để trả về giá trị của biến đó, bạn sẽ cần bổ sung một phương thức, ví dụ là getCount().

public int getCount() {

 return numOfCows;

}

Tương tự các phương thức khác, nếu muốn gọi getCount() sẽ cần đến một tham chiếu kiểu Cow. Đồng thời kích hoạt phương thức cho một đối tượng Cow. Nhưng sẽ có một vài vấn đề như sau:

  • getCount() không dùng tới một đặc điểm, dữ liệu đặc thù nào của mỗi đối tượng Cow
  • Khi chưa tạo ra một đối tượng Cow nào sẽ không thể gọi được getCount()
  • Phương thức getCount() không nên phụ thuộc vào các đối tượng Cow cụ thể.

Vấn đề được giải quyết khi cho getCount() làm một phương thức của lớp, hay phương thức static. Để nó tồn tại độc lập với đối tượng, và được gọi thẳng từ lớp. Không đòi hỏi cần một tham chiếu đối tượng.

Sử dụng từ khóa Static khi khai báo phương thức lớp

Cũng bởi đặc điểm độc lập với các đối tượng của phương thức này nên người dùng luôn phải khai báo phương thức main() với từ khóa Static.

Mặt khác, vì main() được kích hoạt để khởi động chương trình – khi chưa có đối tượng nào được tạo. Vì thế, nó phải được phép chạy mà không gắn cùng đối tượng nào.

Giới hạn của phương thức lớp – hàm

Tính độc lập của phương thức lớp vừa là ưu điểm vừa là hạn chế trong hoạt động. Bởi không được gắn với một đối tượng nà, nên phương thức Static của một lớp chạy. Mà không biết gì về đối tượng nào của lớp.

Nếu 1 biến thực thể sử dụng trong một phương thức lớp. Trình biên dịch sẽ không hiểu người dùng đang nhắc tới biến thực thể của đối tượng nào. Kể cả trong heap đang có 10 hay một đối tượng thuộc lớp duy nhất. Tương tự như khi gọi phương thức của thực thể trong phương thức Static.

Giới hạn của phương thức lớp - hàm Static

Khi nào nên dùng phương thức Static

Thực tế sẽ có những trường hợp được khuyến khích nên dùng phương thức Static. Người dùng cần cân nhắc sao cho khi sử dụng phương thức này để phát huy hiệu quả và tránh rủi ro xảy ra.

Trường hợp phổ biến dùng từ khóa Static trong Java cho một phương thức. Đó là khi phương thức không bị phụ thuộc vào trạng thái của bất kỳ đối tượng nào. Nói một cách dễ hiểu, thì phương thức đó không cần sử dụng dữ liệu thành viên. Mà tất cả sẽ được truyền dưới dạng tham số.

Bạn hoàn toàn có thể coi đây như 1 phương thức tiện ích. Chỉ bằng bằng tên lớp, nó cho phép người dùng truy cập trực tiếp. Trong khi không cần bất cứ thể hiện nào.

Cuối cùng, các trường hợp sẽ cần tới phương thức này nếu các Design Pattern cần truy cập global.

Có một vài điểm cần lưu ý về biến lớp – biến như sau:

  • Phương thức lớp không được gắn với một đối tượng và cũng không phụ thuộc vào đối tượng nào. Phương thức chỉ được gắn với lớp và bạn nên gọi phương thức Static từ tên lớp.
  • Phương thức lớp có thể được gọi, mà không cần đối tượng nào của lớp đang ở trong heap.
  • Phương thức Static không thể truy nhập biến thực thể, phương thức thực thể. Dễ hiểu vì chúng không được gắn với đối tượng nào.
  • Biến lớp dùng chung cho tất cả đối tượng của lớp. Chỉ duy nhất một bản cho cả lớp, không thể có mỗi đối tượng một bản.
  • Phương thức lớp có thể truy nhập biến lớp.

Phương thức này sẽ hoạt động vô cùng tốt, nếu người dùng cần tiết kiệm bộ nhớ và hạn chế các quy trình trùng lặp không cần thiết. Tuy nhiên, cần chú ý ứng dụng phù hợp. Tránh lạm dụng sẽ gây tốn thời gian và rắc rối.

Với bài viết trên, chúng tôi hy vọng đã giúp các bạn hiểu thê về biến và phương thức Static. Cách dùng không khó nếu bạn hiểu cách thức hoạt động của nó. Vì thế, bạn cần lựa chọn những cơ sở đào tạo uy tín, chất lượng trong lĩnh vực.

FPT Aptech với hơn 22 năm kinh nghiệm đào tạo lập trình viên quốc tế tại nước ta. FPT Aptech hiện đang tuyển sinh ngành Lập Trình Viên Quốc Tế với nhiều ưu dành cho thí sinh đăng ký sớm.

Lựa chọn học tập FPT Aptech đào tạo về CNTT

Lý do bạn nên lựa chọn FPT Aptech trở thành ngôi trường đào tạo CNTT vì:

  • Đơn vị dày dặn kinh nghiệm đào tạo trong ngành, mang giáo trình học chuẩn quốc tế Aptech về Việt Nam.
  • Các giảng viên có năng lực giảng dạy, đạt các tiêu chí khắt khe của tập đoàn FPT.
  • Tiến trình học có tới 70% cho thực hành.
  • Sinh viên được hỗ trợ chuyển đổi tín chỉ, học chuyển tiếp tại Đại học FPT.
  • Sinh viên được hỗ trợ giới thiệu việc làm từ các đối tác của trường.
  • Sinh viên học theo giáo trình và tài liệu của Aptech, áp dụng ở tất cả các trung tâm Aptech trên toàn thế giới. 

Các bạn còn bất cứ thắc mắc nào về Static, hay cần tham khảo thông tin về khóa học tại FPT Aptech. Xin vui lòng liên hệ trực tiếp với chúng tôi để được giải đáp miễn phí.

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
0981578920
icons8-exercise-96