1. Phạm vi của biến là gì?

Phạm vi của một biến là một phần của chương trình mà biến đó có thể truy cập được. Giống như C / C ++,… trong Java, tất cả các mã định danh đều được xác định phạm vi. Tức là phạm vi của một biến có thể được xác định tại thời điểm biên dịch và không phụ thuộc vào nơi chứa lệnh gọi hàm.

Mỗi biến được khai báo ra có một phạm vi hoạt động. Phạm vi của biến là nơi mà biến có thể được truy cập, điều này xác định cả tính thấy được và thời gian sống của biến
Các chương trình Java được tổ chức dưới dạng các class . Mỗi lớp là một phần của một số package . Các quy tắc phạm vi Java có thể được đề cập trong các danh mục sau nhé!

2. Các biến thành viên – phạm vi class

Các biến này phải được khai báo bên trong class (bên ngoài bất kỳ hàm nào). Chúng có thể được truy cập trực tiếp ở bất kỳ đâu trong class. Biến này thuộc về lớp, không thuộc về đối tượng của lớp đó và giá trị của biến này được chia sẻ giữa tất cả các đối tượng của lớp đó, nghĩa là giá trị của nó sẽ giống nhau ở tất cả các đối tượng.

Ví dụ:

class Main
{
    // tất cả các biến được định nghĩa bên trong một lớp
    // chúng đều là biến thành viên
    int a;
    private String b;
    void method1() {....}
    int method2() {....}
    char c;
}
  • Chúng ta có thể khai báo các biến lớp ở bất kỳ đâu trong lớp, nhưng bên ngoài các phương thức.
  • Quyền truy cập được chỉ định của các biến thành viên không ảnh hưởng đến phạm vi của chúng trong một lớp.
  • Các biến thành viên có thể được truy cập bên ngoài một lớp với các quy tắc sau
Package Subclass World
public Yes Yes Yes
protected Yes Yes No
Default (no modifier) Yes No No
private No No No

Ví dụ:

public class Test 
{ 
    void method1 () 
    { 
       // Biến cục bộ
       int x; 
    } 
}

Hay một chương trình Java cụ thể

class Main
{
    static int x = 11;
    private int y = 33;
    public void method1(int x)
    {
        Test t = new Test();
        this.x = 22;
        y = 44;
 
        System.out.println("Test.x: " + Test.x);
        System.out.println("t.x: " + t.x);
        System.out.println("t.y: " + t.y);
        System.out.println("y: " + y);
    }
 
    public static void main(String args[])
    {
        Test t = new Test();
        t.method1(5);
    }
}

Kết quả

Test.x: 22
t.x: 22
t.y: 33
y: 44

2. Biến nằm bên trong một phương thức

Khi một biến nằm trong một phương thức, nó có thể nằm trong một câu lệnh if else , trong một vòng lặp for , while , do while hoặc trong một câu lệnh switch . Chúng ta thường sử dụng biến này để lưu trữ một kết quả tính toán mang tính tạm thời và chúng là những biến có phạm vi nhỏ nhất. (những vòng lặp hay câu lệnh này mình sẽ nói ở bài sau và bài này mình cứ đề cập đến trước nhé)

Ví dụ:

class Main{
 
    private int a;
    private int b;
 
    public int doAdd() {
        if (a > 0 && b > 0) {
            int total = 0;
            total = a + b;
 
            return total;
        }
 
        return 0;
    }
}

Trong ví dụ trên biến total đã được định nghĩa nằm trong phương thức doAdd() và trong một câu lệnh if

Chúng ta không thể truy cập được biến được định nghĩa trong một phương thức từ bên ngoài phương thức đó, hoặc nếu nó được định nghĩa bên trong một câu lệnh if else , vòng lặp hoặc câu lệnh switch thì biến này cũng không thể truy cập được từ bên ngoài những câu lệnh đó.

Ví dụ trên thì biến total không thể truy cập từ bên ngoài câu lệnh if . Nhưng với ví dụ này sẽ cho các bạn thấy biến total cũng không thể truy cập từ bên ngoài phương thức.

 class Main{
 
    private int a;
    private int b;
 
    public int doAdd() {
        if (a > 0 && b > 0) {
            int total = 0;
            total = a + b;
 
            return total;
        }
 
        return 0;
    }
}
public int getTotal(){
        return total;
}

Tóm lại, một biến được định nghĩa trong một phương thức thì khả năng truy cập tới nó phụ thuộc vào vị trí của nó trong phương thức đó.

  • Nếu nó nằm trong một if else , một vòng lặp, một câu lệnh switch hay một block ( {} ) thì nó chỉ có thể truy cập bên trong những câu lệnh này mà thôi.
  • Còn nếu nó nằm bên ngoài tất cả những câu lệnh trên thì biến này có thể truy cập ở bất cứ đâu bên trong phương thức đó.
  • Những biến được định nghĩa trong một phương thức thì không thể truy cập từ các phương thức khác.

3. Biến là một tham số của một phương thức

Một biến được định nghĩa như là một tham số của phương thức thì khả năng truy cập của biến đó chỉ nằm trong phương thức này.

Ví dụ:

class Main{
 
    public int add(int a, int b) {
        int total = 0;
        total = a + b;
 
        return total;
    }
}

Ở đây biến ab được định nghĩa như là một tham số của phương thức add() . Chúng chỉ có thể truy cập từ bên trong phương thức này. Nếu chúng ta thử truy cập chúng từ bên ngoài phương thức add thì sẽ bị lỗi.

Những biến được định nghĩa như là một tham số của phương thức thì nó có truy cập ở bất kỳ đâu trong một phương thức, bên trong một câu lệnh if else , vòng lặp hay câu lệnh switch . Do đó các bạn thấy những biến này có phạm vi truy cập lớn hơn những biến được định nghĩa trong phương thức rất nhiều.

4. Biến nằm bên trong một đối tượng

Biến nằm bên trong một đối tượng, hay tiếng Anh còn gọi là instance variables . Nó sẽ có giá trị trong một vòng đời của một đối tượng. Chúng được định nghĩa bên trong một lớp nhưng ở bên ngoài tất cả các phương thức và nó có thể được truy cập bởi các phương thức không phải static nằm bên trong lớp đó.

Ví dụ: biến a là một biến instance variable

class Main{
 
    private int a;
 
    public int getA() {
        return a;
    }
}

Phạm vi của một biến nằm bên trong một đối tượng rộng hơn biến nằm bên trong một phương thức hay là một tham số của phương thức. Bởi vì nó có thể được truy cập bên trong tất cả các phương thức nằm trong lớp đó và có thể được truy cập từ các lớp khác nếu nó được định nghĩa với access modifier phù hợp.

5. Hằng số trong Java – Constant

Trong cuộc sống sẽ có những thức không bao giờ thay đổi được. Ví dụ như ngày sinh nhật bạn, một ngày có 24 giờ, … Và trong Java cũng tương tự như vậy thôi. Hằng số là những giá trị không bao giờ thay đổi trong suốt quá trình sử dụng. Là một giá trị bất biến trong chương trình.

Trong Java có các loại hằng sau:

  • Hằng số nguyên
  • Hằng số thực
  • Hằng ký tự
  • Hằng chuỗi ký tự

Việc khai báo hằng số thì khá đơn giản. Ta chỉ cần sử dụng từ khóa static final đặt trước tên hằng số

[Phạm vi truy cập] static final [kiểu dữ liệu] [tên hằng số] = [giá trị];

Ví dụ:

class Main {
  public static void main(String[] args) {
    final int myNum = 19;
   //myNum = 20; sẽ tạo ra một lỗi
    System.out.println(myNum);
  }
}

Kết quả

19