Trang chủ » module » Static Trong Java Là Gì? Tại Sao Nó Lại Là Phương Thức Main?

Static Trong Java Là Gì? Tại Sao Nó Lại Là Phương Thức Main?

bởi Admin | 16:30 | Blog

Static trong Java là gì?

Static trong Java được sử dụng chủ yếu chính là để quản lý bộ nhớ. Các biến có thể áp dụng từ khóa Static, các phương thức, các khối, các lớp lồng (nested class). Static thuộc về lớp chứ không thuộc về instance của lớp.

Trong Java, Static bao gồm như sau:

  1. Biến Static: Nếu bạn khai báo biến là Static, thì biến đó sẽ được gọi là biến tĩnh, hoặc biến Static.
  2. Phương thức Static: Nếu bạn khai báo phương thức là Static, thì phương thức đó sẽ được gọi là phương thức Static.
  3. Khối Static: Các thành viên dữ liệu Static được sử dụng để khởi tạo

    Static-in-java-la-gi

    Static trong Java là gì

Biến Static trong Java

Biến Static có thể sử dụng để tham chiếu thuộc tính chung của mọi đối tượng (ví dụ: tên bệnh viện của bác sĩ, tên công ty của nhân viên…), lấy bộ nhớ chỉ một lần trong Class Area tại thời gian tải lớp đó.

Lợi thế của biến Static trong Java

Việc sử dụng biến Static giúp cho chương trình của bạn sử dụng bộ nhớ tiết kiệm và hiệu quả hơn. Ví dụ, tên trường học của sinh viên khi không sử dụng biến Static thì:

1

2

3

4
5
class Student{ 
     int rollno; 
     String name; 
     String college="Bách Khoa"; 
}

 

Nếu giả sử sinh viên trong trường có số lượng là 1000, thì instance của các dữ liệu sinh viên sẽ sử dụng bộ nhớ mỗi khi tạo đối tượng. Mọi sinh viên có thuộc tính riêng là rollno và name. Trong đó, thuộc tính chung của tất cả đối tượng là college. Khi Static chúng ta tạo ra thì trường sẽ lưu lại những biến này bằng cách chỉ sử dụng bộ nhớ một lần.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Student8 {

    int rollno;

    String name;

    static String college = "Bách Khoa";

 

    Student8(int r, String n) {

        rollno = r;

        name = n;

    }

 

    void display() {

        System.out.println(rollno + " - " + name + " - " + college);

    }

 

    public static void main(String args[]) {

        Student8 s1 = new Student8(123, "Đức");

        Student8 s2 = new Student8(234, "Trí");

 

        s1.display();

        s2.display();

    }
}

 

Kết quả:

123 - Đức - Bách Khoa

234- Trí - Bách Khoa

Sử dụng biến Static trong Java với chương trình đếm số

Các biến Static sẽ chỉ lấy bộ nhớ một lần, nếu như bất cứ đối tượng nào thay đổi giá trị của biến static, giá trị của nó vẫn sẽ được ghi nhớ.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Counter2 {

    static int count = 0; // sẽ lấy bộ nhớ chỉ một lần

 

    Counter2() {

        count++;

        System.out.println(count);

    }

 

    public static void main(String args[]) {

 

        Counter2 c1 = new Counter2();

        Counter2 c2 = new Counter2();

        Counter2 c3 = new Counter2();

 

    }

}

 

Kết quả:

1

2

3

Phương thức Static trong Java

Đối với bất cứ phương thức nào khi bạn sử dụng Static thì phương thức đó sẽ nghiễm nhiên được gọi là phương thức Static.

  • Đối tượng của lớp không bao gồm phương thức Static, bởi vì nó thuộc lớp.
  • Phương thức Static không cần tạo instance của một lớp
  • Cuối cùng, phương thức này có thể truy cập biến Static và thay đổi giá trị của chính nó

Phương thức Static trong Java được thể hiện:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31
public class Student9 {

    int rollno;

    String name;

    static String college = "Bách Khoa";

 

    static void change() {

        // Thay đổi thuộc tính static (thuộc tính chung của tất cả các đối tượng)

        college = "Đại Học Xây Dựng";

    }

 

    Student9(int r, String n) {

        rollno = r;

        name = n;

    }

 

    void display() {

        System.out.println(rollno + " - " + name + " - " + college);

    }

 

    public static void main(String args[]) {

        Student9.change();

 

        Student9 s1 = new Student9(123, "Đức");

        Student9 s2 = new Student9(234, "Trí");

        Student9 s3 = new Student9(345, "Tâm");

 

        s1.display();

        s2.display();

        s3.display();

    }

}

Kết quả:

123 - Đức - Đại Học Xây Dựng

234 - Trí - Đại Học Xây Dựng

345 - Tâm - Đại Học Xây Dựng

Phương thức Static bao gồm những hạn chế nào

Đối với phương thức Static còn tồn tại 2 hạn chế chính cần lưu ý:

  • Thứ nhất, Static không thể sử dụng biến non-static hay là gọi trực tiếp phương thức non-static.
  • Thứ hai, đối với ngữ cảnh Static từ khóa this và super không thể được áp dụng sử dụng

Ví dụ:

1
2
3
4
5
6
7
class B {

    int a = 40;// non static

 

    public static void main(String args[]) {
        System.out.println(a);
    }
}

Kết quả:

Compile Time Error

Khối Static trong Java

Khối Static trong Java sẽ được sử dụng nhằm khởi tạo thành viên dữ liệu Static và thực thi những phương thức main tại lúc tải lớp.

Ta có thể dễ dàng hình dung hơn qua ví dụ sau đây:

1
2
3
4
5
6
7
8
9
public class A2 {

    static {

        System.out.println("Khối static: hello world !");

    }

 

    public static void main(String args[]) {

        System.out.println("Main: hello world !");

    }

}

Kết quả:

Khối static: hello world!

Main: hello world !

Lớp Static (Static class)

Một class được đặt là Static chỉ khi nó nằm trong một lớp khác (nested class). Và đối với một nested static class có thể được truy cập mà không cần một object của outer class (lớp bên ngoài).

Ví dụ:

public class UsingStaticExample {

    private String subject;

    UsingStaticExample (String subject) {

        this.subject = subject;

    }

    // nested static class

    static class MyWebsite {

        public static String WEBSITE = "hanoi.codegym.vn";

    }

    public void print() {

        System.out.println("Subject = " + subject);

        System.out.println("Website = " + MyWebsite.WEBSITE);

    }

    public static void main(String[] args) {

        UsingStaticExample ex1 = new UsingStaticExample("Core Java");

        ex1.print();

    }

}

Kết quả:

Subject = Core Java

Website = hanoi.codegym.vn

Tại sao nói phương thức main trong Java là Static?

Để gọi Static thì không cần thiết phải tạo đối tượng, nếu như nó là phương thức non-static, thì JVM đầu tiên tạo đối tượng và tiếp theo đó gọi phương thức main() mà có thể gây ra vấn đề về cấp phát bộ nhớ cho bộ nhớ phụ.

Liệu có thể thực thi một chương trình mà không có phương thức main()? Câu trả lời là: có

Khối Static trong phiên bản trước của JDK là một trong các cách đó. Không phải là JDK 1.7

Ví dụ:

1
2
3
4
5
6
public class A3 {

    static {

        System.out.println("static block is invoked");

        System.exit(0);

    }

}

Kết quả:

(TH < jdk7)

static block is invoked
Kết quả: (TH >= jdk7)

Error: Main method not found in class A3, please define the main method as:

public static void main(String[] args)

 

Tài liệu tham khảo:

Tổng kết

Trên đây là những khái niệm cơ bản nhất về từ khóa Static trong Java. Sẽ có nhiều những trường hợp áp dụng khác nhau khi các bạn tham gia vào dự án thực tế. Nếu còn có bất kỳ thắc mắc hay đóng góp ý kiến, các bạn có thể để lại bình luận dưới đây. CodeGym Hà Nội sẽ cố gắng giải đáp và hỗ trợ cho các bạn. Hãy chờ đón những nội dung hữu ích trong bài viết tiếp theo nhé!

 

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

5 + 15 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM