Từ khóa tĩnh Java (Có ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về từ khóa Java static cùng với các phương thức tĩnh, biến tĩnh và khối tĩnh với sự trợ giúp của các ví dụ.

Từ khóa tĩnh trong Java là gì?

Trong Java, nếu chúng ta muốn truy cập các thành viên của lớp, trước tiên chúng ta phải tạo một thể hiện của lớp. Nhưng sẽ có những trường hợp chúng ta muốn truy cập các thành viên trong lớp mà không cần tạo bất kỳ biến nào.

Trong những tình huống đó, chúng ta có thể sử dụng statictừ khóa trong Java. Nếu chúng ta muốn truy cập các thành viên của lớp mà không cần tạo một thể hiện của lớp, chúng ta cần khai báo các thành viên của lớp là tĩnh.

Các Mathlớp trong Java có hầu hết tất cả các thành viên tĩnh của nó. Vì vậy, chúng ta có thể truy cập các thành viên của nó mà không cần tạo các phiên bản của lớp Math. Ví dụ,

 public class Main ( public static void main( String() args ) ( // accessing the methods of the Math class System.out.println("Absolute value of -12 = " + Math.abs(-12)); System.out.println("Value of PI = " + Math.PI); System.out.println("Value of E = " + Math.E); System.out.println("2^2 = " + Math.pow(2,2)); ) )

Đầu ra :

 Giá trị tuyệt đối của -12 = 12 Giá trị của PI = 3,141592653589793 Giá trị của E = 2,718281828459045 2 2 = 4,0

Trong ví dụ trên, chúng tôi chưa tạo bất kỳ trường hợp nào của Mathlớp. Nhưng chúng ta có thể truy cập các phương thức của nó: abs()pow()và các biến: PIE.

Điều đó có thể xảy ra vì các phương thức và biến của Mathlớp là tĩnh.

Phương pháp tĩnh

Phương thức tĩnh còn được gọi là phương thức lớp. Đó là bởi vì một phương thức tĩnh thuộc về lớp chứ không phải là đối tượng của một lớp.

Và chúng ta có thể gọi các phương thức tĩnh trực tiếp bằng cách sử dụng tên lớp. Ví dụ,

 class Test ( // static method inside the Test class public static void method() (… ) ) class Main ( // invoking the static method Test.method(); )

Ở đây, chúng ta có thể thấy rằng phương thức tĩnh có thể được truy cập trực tiếp từ các lớp khác bằng cách sử dụng tên lớp.

Trong mọi chương trình Java, chúng tôi đã khai báo mainphương thức static. Đó là vì để chạy chương trình, JVM nên có thể gọi phương thức chính trong giai đoạn đầu khi không có đối tượng nào tồn tại trong bộ nhớ.

Ví dụ 1: Các phương thức tĩnh và không tĩnh trong Java

 class StaticTest ( // non-static method int multiply(int a, int b)( return a * b; ) // static method static int add(int a, int b)( return a + b; ) ) public class Main ( public static void main( String() args ) ( // create an instance of the StaticTest class StaticTest st = new StaticTest(); // call the nonstatic method System.out.println(" 2 * 2 = " + st.multiply(2,2)); // call the static method System.out.println(" 2 + 3 = " + StaticTest.add(2,3)); ) )

Đầu ra :

 2 * 2 = 4 2 + 3 = 5

Trong chương trình trên, chúng ta đã khai báo một phương thức không tĩnh có tên multiply()và một phương thức tĩnh có tên add()bên trong lớp StaticTest.

Bên trong lớp Main, chúng ta có thể thấy rằng chúng ta đang gọi phương thức không tĩnh bằng cách sử dụng đối tượng của lớp ( st.multiply(2, 2)). Tuy nhiên, chúng ta đang gọi phương thức tĩnh bằng cách sử dụng tên lớp ( StaticTest.add(2, 3)).

Biến tĩnh

Trong Java, khi chúng ta tạo các đối tượng của một lớp, thì mọi đối tượng sẽ có bản sao riêng của tất cả các biến của lớp đó. Ví dụ,

 class Test ( // regular variable int age; ) class Main ( // create instances of Test Test test1 = new Test(); Test test2 = new Test(); )

Ở đây, cả hai đối tượng test1 và test2 sẽ có các bản sao riêng biệt của độ tuổi biến. Và, chúng khác xa nhau.

Tuy nhiên, nếu chúng ta khai báo một biến static, tất cả các đối tượng của lớp đều dùng chung một biến static. Đó là bởi vì giống như các phương thức tĩnh, các biến tĩnh cũng được liên kết với lớp. Và, chúng ta không cần tạo các đối tượng của lớp để truy cập các biến tĩnh. Ví dụ,

 class Test ( // static variable static int age; ) class Main ( // access the static variable Test.age = 20; )

Ở đây, chúng ta có thể thấy rằng chúng ta đang truy cập biến static từ lớp khác bằng cách sử dụng tên lớp.

Ví dụ 2: Các biến tĩnh và không tĩnh trong Java

 class Test ( // static variable static int max = 10; // non-static variable int min = 5; ) public class Main ( public static void main(String() args) ( Test obj = new Test(); // access the non-static variable System.out.println("min + 1 = " + (obj.min + 1)); // access the static variable System.out.println("max + 1 = " + (Test.max + 1)); ) )

Đầu ra :

 tối thiểu + 1 = 6 tối đa + 1 = 11

Trong chương trình trên, chúng ta đã khai báo một biến không tĩnh có tên là min và một biến tĩnh có tên là max bên trong lớp Test.

Bên trong lớp Main, chúng ta có thể thấy rằng chúng ta đang gọi biến non-static bằng cách sử dụng đối tượng của lớp ( obj.min + 1). Tuy nhiên, chúng ta đang gọi biến tĩnh bằng cách sử dụng tên lớp ( Test.max + 1).

Lưu ý : Các biến tĩnh hiếm khi được sử dụng trong Java. Thay vào đó, các hằng số tĩnh được sử dụng. Các hằng số tĩnh này được định nghĩa bằng static finaltừ khóa và được biểu diễn bằng chữ hoa. Đây là lý do tại sao một số người cũng thích sử dụng chữ hoa cho các biến tĩnh.

Truy cập các biến và phương thức tĩnh trong Lớp

Chúng tôi đang truy cập biến tĩnh từ một lớp khác. Do đó, chúng tôi đã sử dụng tên lớp để truy cập nó. Tuy nhiên, nếu chúng ta muốn truy cập thành viên tĩnh từ bên trong lớp, nó có thể được truy cập trực tiếp. Ví dụ,

 public class Main ( // static variable static int age; // static method static void display() ( System.out.println("Static Method"); ) public static void main(String() args) ( // access the static variable age = 30; System.out.println("Age is " + age); // access the static method display(); ) )

Đầu ra :

 Tuổi là 30 Phương pháp tĩnh

Ở đây, chúng ta có thể truy cập trực tiếp vào biến và phương thức tĩnh mà không cần sử dụng tên lớp. Đó là bởi vì các biến và phương thức tĩnh được mặc định là công khai. Và, vì chúng ta đang truy cập từ cùng một lớp, chúng ta không phải chỉ định tên lớp.

Khối tĩnh

Trong Java, các khối tĩnh được sử dụng để khởi tạo các biến tĩnh. Ví dụ,

 class Test ( // static variable static int age; // static block static ( age = 23; ) )

Ở đây chúng ta có thể thấy rằng chúng ta đã sử dụng một khối tĩnh với cú pháp:

 static ( // variable initialization )

The static block is executed only once when the class is loaded in memory. The class is loaded if either the object of the class is requested in code or the static members are requested in code.

A class can have multiple static blocks and each static block is executed in the same sequence in which they have been written in a program.

Example 3: Use of static block in java

 class Main ( // static variables static int a = 23; static int b; static int max; // static blocks static ( System.out.println("First Static block."); b = a * 4; ) static ( System.out.println("Second Static block."); max = 30; ) // static method static void display() ( System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("max = " + max); ) public static void main(String args()) ( // calling the static method display(); ) )

Output:

 First Static block. Second Static block. a = 23 b = 92 max = 30

In the above program. as soon as the Main class is loaded,

  • The value of a is set to 23.
  • The first static block is executed. Hence, the string First Static block is printed and the value of b is set to a * 4.
  • The second static block is executed. Hence, the string Second Static block is printed and the value of max is set to 30.
  • Và cuối cùng, các câu lệnh in bên trong phương thức display()được thực thi.

Lớp tĩnh lồng nhau

Trong Java, chúng ta có thể khai báo một lớp bên trong một lớp khác. Các lớp như vậy được gọi là các lớp lồng nhau. Các lớp lồng nhau có 2 loại:

  • Các lớp lồng nhau tĩnh
  • Các lớp lồng nhau không tĩnh

Ví dụ,

 class OuterClass ( // static nested class static class NestedClass (… ) // non-static nested class class InnerClass (… ) )

Để tìm hiểu thêm, hãy truy cập Lớp lồng nhau của Java.

thú vị bài viết...