[Java] Phạm vi và thời gian tồn tại của các biến
Hi anh/chị,
Em có đọc sách và hiểu được đoạn như sau :
Các biến được khai báo bên trong một phạm vi ({ …phạm vi…}) không thể được nhìn thấy từ bên ngoài phạm vi.
Theo em hiểu nôm na có nghĩa là : làm gì trong cái dấu { } thì ra bên ngoài không thằng nào thấy được nó.
Và em có làm 1 bài về số nguyên tố ( đã chạy được ):
1. for (i = 2; i < 100; i++) { 2. check = true; 3. for (count = 2; count < i; count++) { 4. if (i % count == 0) { 5. check = false; 6. } 7. } 8. if (check) { 9. System.out.println(" " + i); 10. } 11. }
(Em chưa biết cách up code nên anh chị chịu khó mỏi mắt tí )
Theo em hiểu, nếu có thằng check = false thì nó chỉ có tác dụng trong vòng IF thôi đúng không nhỉ? Vậy thì tại sao khi ra ngoài, cái thằng check = false lại bị kiểm tra là = false => không in ra i?
Lời của kẻ mu muội khó giải thích cặn kẽ vấn đề đang gặp, mong anh/chị kiên nhẫn giảng giải cho em hiểu sâu hơn về vấn đề này.
Em cám ơn .
Giải thích thế này nhé bạn
Biến check ở đây không phải được khai báo bên trong vòng for mà bên ngoài, vậy nó sẽ được coi như toàn cục đối với bên trong vòng for đấy.
À, vậy là em hiểu rồi, do nó được gọi từ đầu, nên giá trị của nó dù có ở phạm vi nhỏ thì vẫn nhận giá trị theo trình tự từ trên xuống dưới phải không ạ?
Để em test thử mấy con số xem .
Cám ơn anh rất nhiều, chúc anh năm mới vui vẻ.
Như thế này cho bạn dễ hiểu nhé
Các biến được khai báo bên trong một phạm vi ({ …phạm vi…}) không thể được nhìn thấy từ bên ngoài phạm vi.
Thì "phạm vi bạn nói có thể là phạm vi lớn và cả phạm vi nhỏ. Nhưng đối với các phạm vi lớn như Class, Interface,… thì nó được gọi là thuộc tính và nó mang theo các Phạm Vi Truy Cập như Private, Protected, Public -> thuộc tính có thể được truy cập bởi bất kì thành phần nào khác ngoài phạm vi chứa nó. Lúc này nó mang danh nghĩa là “Biến thành phần”
Còn đối với phạm vi nhỏ (chẳng hạn như phương thức hay một block code, nội dung của lệnh lặp hay nội dung của lệnh điều kiện ,… bla bla. ^^. Thì được gọi là biến nội tại (hay còn có tên khác là biến). Chúng thường không mang theo các Phạm Vi Truy Cập nên chúng được xem là “biến phục vụ”
Nói như vậy vẫn còn mập mờ nhỉ? Mình sẽ cho bạn VD:
Mình có đoạn code
thì như bạn thấy tùy thuộc vào phạm vi lớn hay nhỏ mà biến đó có thể truy cập hay không thể truy cập, và ta cũng sẽ chẳng thể lấy được biến của một phương thức ^^.
=> Biến có thể truy cập hoặc không truy cập tùy thuộc vào độ lớn của phạm vi và vị trí đặt biến.
Chúc bạn năm mới thành công trong học tập.
Cảm ơn anh đã giúp em hiểu hơn và biết thêm được nhiều thứ trong Java, em mới đang học căn bản, nhưng cứ đọc đi đọc lại, đọc nhiều em tin rằng sẽ sớm khá lên thôi .
Chúc anh năm mới vui vẻ, hạnh phúc và thành công.
P/s: FB https://www.facebook.com/hainam37k16.1
thật là mình khá ghét mấy câu như thế này .
mình biết thì k gọi là “phạm vi” . gọi là “tầm vực” . 1 tầm vực là 1 cặp { } . pascal la begin end . biến đã khai báo ở tầm vực cha . tầm vực con lấy sử dụng chứ k tạo mới
sorry bạn chứ lần đầu tiên mình nghe đến từ khóa tầm vực ^^, nghe nó cứ sida thế nào ấy nên gọi nó là scope, những khái niệm của java không nên dịch sang tiếng việt
mình đâu lấy từ java . cũng k dịch . mình chỉ nói những gì mình biết