Java Bài 4: Biến Và Hằng Trong Java

Posted by

Biến - banner

Được chỉnh sửa ngày 1/9/2017.

Chào mừng các bạn quay trở lại với bài học Java thứ 4 trong chuỗi bài học về lập trình ngôn ngữ Java của Yellow Code Books.

Với project HelloWorld mà bạn đã tạo ra ở bài trước. Hôm nay bạn hãy bắt đầu tìm hiểu về ngôn ngữ Java bằng việc tiếp cận hai khái niệm biếnhằng, với bài học bạn cũng sẽ được thực hành khai báo một số biếnhằng cơ bản. Và để dễ tiếp cận nhất có thể, với mỗi đoạn code thực hành, mình cũng sẽ đưa ra các trường hợp ĐÚNGSAI của code, để các bạn vừa hiểu nhanh mà cũng vừa hiểu chắc bài học. Mời các bạn bắt đầu bài học.

Biến – Variable

Việc đầu tiên tiếp cận với một ngôn ngữ lập trình, không riêng gì Java, bạn phải làm quen với khái niệm biến, các tài liệu tiếng Anh gọi biến là variable.

Khái Niệm Biến

Biến là các định nghĩa từ bạn, nó giúp hệ thống tạo ra các vùng nhớ để lưu giữ các giá trị trong ứng dụng. Mỗi biến đều có một kiểu dữ liệu riêng, kiểu dữ liệu này sẽ báo cho hệ thống biết biến đó có “độ lớn” bao nhiêu. Độ lớn của biến sẽ cho biết khả năng lưu trữ giá trị của biến. Bạn sẽ được nắm rõ về độ lớn lưu trữ của mỗi loại biến ở bài học này. Ngoài ra thì mỗi biến còn phải được bạn đặt một cái tên giúp hệ thống có thể quản lý, truy xuất dữ liệu trong vùng nhớ của biến đó.

Khai Báo Biến

Như khái niệm trên đây chắc bạn cũng đã nắm phần nào, việc khai báo một biến thực chất là việc bạn sẽ đặt tên cho biến, rồi đặt một kiểu dữ liệu cho biến, và có thể lưu trữ giá trị ban đầu vào cùng nhớ của biến.

Để khai báo một biến trong Java, bạn hãy ghi nhớ cú pháp sau:

kiểu_dữ_liệu  tên_biến;

hoặc

kiểu_dữ_liệu  tên_biến = giá_trị;

Mình giải thích một chút về cú pháp trên.

kiểu_dữ_liệu sẽ quyết định đến độ lớn của biến, các loại kiểu_dữ_liệu và các cách dùng sẽ được nói rõ hơn ở bên dưới bài học.
tên_biến là… tên của biến 🙂 , cách đặt tên cho biến sẽ được mình nói rõ hơn ở phần bên dưới luôn.
– Khi khai báo biến, bạn có thể “gán” cho biến một giá_trị ban đầu, việc gán giá trị này sẽ làm cho biến có được dữ liệu ban đầu ngay khi được tạo ra. Nếu một biến được tạo ra mà không có giá trị gì được gán, nó sẽ được gán giá trị mặc định, giá trị mặc định này sẽ tùy theo kiểu_dữ_liệu của biến mà chúng ta sẽ nói đến bên dưới.
– Cuối cùng, sau mỗi khai báo biến bạn nhớ có dấu “;” để báo cho hệ thống biết là kết thúc việc khai báo, nếu không có “;” hệ thống sẽ báo lỗi ngay.

Thực Hành Khai Báo Biến

Nào, giờ thì bạn hãy mở project HelloWorld vừa tạo ra ở bài trước, bạn thử gõ các dòng khai báo biến như sau nhé. Chỉ là gõ cho quen thôi. Hãy chú ý đến các dòng được tô sáng. Bạn sẽ có cơ hội được khai báo các biến ở các mục phía dưới.

public class MyFirstClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("Hello World!");

		double salary;
		int count = 0;
		boolean done = false;
		long earthPopulation;
	}

}

Đặt Tên Cho Biến

Như ví dụ ở trên, các tên biến được đặt tên là salary, count, done hay earthPopulation. Việc đặt tên cho biến đơn giản đúng không nào, đặt như thế nào cũng được, miễn sao bạn đọc lên được (ngôn ngữ của con người), và bạn thấy nó dễ hiểu và đúng với công năng của biến đó là được rồi.

Tuy nhiên thì việc đặt tên cho biến cũng không hoàn toàn tự do, có một số “luật”“lệ” đặt tên sau đây, nếu bạn mắc phải một trong các quy tắc đặt tên này thì hệ thống sẽ báo lỗi ngay đấy.

Quy Tắc 1

Ký tự bắt đầu của tên biến phải là chữ cái, hoặc dấu gạch dưới (_), hoặc ký tự đô la ($). Ví dụ cho việc đặt tên biến đúng như sau.

Đúng
int count;
int Count;
int _count;
int $count;

Còn đặt tên biến như sau sẽ bị lỗi. Vì các ký tự đầu tiên của chúng hoặc là một số, hoặc là một ký tự đặc biệt không được phép. Nếu không tin bạn cứ thử gõ vào Eclipse xem sao nhé.

Sai
int 5count;
int 5Count;
int #count;
int /count;

Quy Tắc 2

Không được có khoảng trắng giữa các ký tự của biến. Ví dụ đặt tên biến như sau là sai.

Sai
int this is count;

Nếu bạn muốn tên biến trên được tách biệt rõ ràng từng chữ cho rõ nghĩa thì có thể đặt như sau.

Đúng

int thisIsCount;
int this_is_count;
int This_Is_Count;

Đến đây thì cho mình nói ngoài lề xíu: trong trường hợp biến có nhiều từ như ví dụ trên, việc bạn chọn muốn đặt theo kiểu nào trong 3 cách đúng như trên đều được, nhưng mình khuyên bạn nên chọn cách đầu tiên thisIsCount. Với cách này thì chữ đầu tiên this được viết thường, các chữ cái ở mỗi từ tiếp theo sẽ viết hoa IsCount. Cách này không phải bắt buộc nhưng nó thành “lệ” chung cho lập trình Java, nếu bạn thực hiện cách đặt tên này thì việc bạn đọc code Java của người khác sẽ dễ dàng hơn nhiều do họ cũng sẽ viết giống như bạn. Lưu ý là đừng có chữ nào cũng viết hoa hết như ThisIsCount vì nó rất dễ nhầm lẫn với đặt tên cho class mà bạn sẽ học ở các bài sau, hay THIS_IS_COUNT vì nó lại nhầm với hằng số mà bạn cũng sắp được làm quen ở bài hôm nay.

Quy Tắc 3

Không chứa ký tự đặc biệt bên trong tên biến như !@#%^&*. Ví dụ đặt tên biến như sau là sai.

Sai

int c@unt;
int count#;
int count*count;

Quy Tắc 4

Không được đặt tên biến trùng với keyword. Keyword là các từ khóa mà ngôn ngữ Java dành riêng cho một số mục đích của hệ thống. Các keyword của Java được liệt kê trong bảng sau.

abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while

Ví dụ đặt tên biến như sau là sai.

Sai

boolean continue = true;
long class;
int final;

Tuy nhiên bạn có thể đặt tên biến có chứa keyword bên trong đó mà không bị bắt lỗi, như ví dụ sau.

Đúng

boolean continue1 = true;
long classMySchool;
int finalTarget;

Kiểu Dữ Liệu Của Biến

Như đã nói ở trên, mỗi biến đều phải có một kiểu_dữ_liệu kèm theo nó. Kiểu dữ liệu sẽ báo cho hệ thống biết biến đó có “độ lớn” bao nhiêu, độ lớn này sẽ cho biết khả năng lưu trữ giá trị của biến.

Việc chọn một kiểu dữ liệu cho biến là phụ thuộc ở bạn. Thông thường bạn nên dựa trên công năng của biến đó, chẳng hạn như biến thuộc kiểu ký tự hay kiểu số. Hoặc bạn có thể dựa trên khả năng lưu trữ giá trị của biến đó, như biến là số integer hay số long.

Chúng ta hãy bắt đầu làm quen với 8 kiểu dữ liệu “nguyên thủy” của biến. Gọi là kiểu dữ liệu nguyên thủy vì chúng là các kiểu dữ liệu cơ bản và được cung cấp sẵn của Java. Về mặt lưu trữ thì kiểu dữ liệu nguyên thủy lưu trữ dữ liệu trong chính bản thân nó, việc sử dụng kiểu này cũng rất đơn giản, và không dính líu gì đến hướng đối tượng cả. Ngược lại với kiểu dữ liệu nguyên thủy là kiểu dữ liệu “mở rộng” sẽ được mình nói ở các bài sau khi bạn đã nắm được kiến thức căn bản của Java. Các kiểu dữ liệu nguyên thủy của bài học hôm nay được liệt kê theo sơ đồ sau.

Kiểu dữ liệu của biến

Nhìn nhiều vậy thôi chứ các kiểu dữ liệu nguyên thủy mà chúng ta cần quan tâm chính là các ô màu xanh lá cây, bao gồm các kiểu int, short, long, byte, float, double, char, và boolean. Các ô màu khác chỉ là gom nhóm các kiểu dữ liệu lại để chúng ta dễ nhớ và dễ sử dụng hơn thôi

Chúng ta cùng nhau đi vào từng loại kiểu dữ liệu để biết rõ hơn.

Kiểu Số Nguyên

Kiểu này dùng để lưu trữ và tính toán các số nguyên, bao gồm các số nguyên có giá trị âm, các số nguyên có giá trị dương và số 0. Sở dĩ có nhiều kiểu số nguyên như trên, là vì tùy vào độ lớn của biến mà bạn sẽ khai báo kiểu dữ liệu tương ứng, chúng ta cùng xem qua bảng giá trị của các kiểu dữ liệu số nguyên như sau.

Kiểu Dữ Liệu Bộ Nhớ Lưu trữ Độ Lớn Của Biến
byte 1 byte Từ –128 Đến 127
short 2 bytes Từ –32,768 Đến 32,767
int 4 bytes Từ –2,147,483,648 Đến 2,147,483, 647
long 8 bytes Từ –9,223,372,036,854,775,808 Đến 9,223,372,036,854,775,807

Theo như bảng trên thì khi bạn thấy việc chọn lựa độ lớn cho kiểu là rất quan trọng, như với kiểu là byte, hệ thống sẽ chỉ cấp phát cho chúng ta vùng nhớ lưu trữ đúng 1 byte dữ liệu, với vùng nhớ này bạn chỉ được phép sử dụng độ lớn của biến từ -128 đến 127 mà thôi.

Ví dụ bạn khai báo biến như sau là hợp lệ.

Đúng

byte month = 5;
short salaryUSD = 2000;

Còn khai báo như sau sẽ vượt ra ngoài khả năng lưu trữ của biến và vì vậy bạn sẽ bị báo lỗi ngay.

Sai

byte day = 365;
short salaryVND = 40000000;

Do đó khi sử dụng kiểu dữ liệu cho biến bạn phải cân nhắc đến độ lớn lưu trữ của chúng. Bạn không nên lúc nào cũng sử dụng kiểu dữ liệu long cho tất cả các trường hợp vì như vậy sẽ làm tiêu hao bộ nhớ của hệ thống khi chương trình được khởi chạy. Bạn nên biết giới hạn của biến để đưa ra kiểu dữ liệu phù hợp. Ví dụ nếu dùng biến để lưu trữ các tháng trong năm, thì kiểu byte là đủ. Hoặc dùng biến để lưu tiền lương của nhân viên theo VND, thì dùng kiểu int, nhưng nếu chương trình của bạn lưu trữ toàn người giàu thì lương có thể được sử dụng kiểu long 🙂

Nếu không khai báo giá trị cho biến, thì biến kiểu số nguyên sẽ có giá trị mặc định là 0 (hoặc 0L đối với kiểu long).

Kiểu Số Thực

Kiểu này dùng để lưu trữ và tính toán các số thực, chính là các số có dấu chấm động. Cũng giống như kiểu số nguyên, kiểu số thực cũng được chia ra thành nhiều loại với nhiều độ lớn khác nhau tùy theo từng mục đích, như bảng sau.

Kiểu Dữ Liệu Bộ Nhớ Lưu trữ Độ Lớn Của Biến
float 4 bytes Xấp xỉ ±3.40282347E+38F
double 8 bytes Xấp xỉ ±3.40282347E+38F

Với sự thoải mái trong cấp phát bộ nhớ của kiểu số thực thì bạn không quá lo lắng đến việc phân biệt khi nào nên dùng kiểu float hay double. Ví dụ sau đây cho thấy trường hợp dùng kiểu số thực.

Đúng
float rating = 3.5f;
double radius = 34.162;

Sở dĩ với kiểu float ở trên phải để chữ f vào cuối khai báo float rating = 3.5f; là vì thỉnh thoảng chúng ta phải nhấn mạnh cho hệ thống biết rằng chúng ta đang xài kiểu float chứ không phải kiểu double, nếu bạn không để thêm f vào cuối giá trị thì hệ thống sẽ báo lỗi. Tương tự bạn cũng có thể khai báo double radious = 34.162d; nhưng vì hệ thống đã hiểu đây là số double rồi nên bạn không có chữ d trong trường hợp này cũng không sao.

Nếu không khai báo giá trị cho biến, thì biến kiểu số thực sẽ có giá trị mặc định là 0.0f đối với kiểu float0.0d đối với kiểu double.

Kiểu char

Kiểu char dùng để khai báo và chứa đựng một ký tự. Bạn có thể gán một ký tự cho kiểu này trong một cặp dấu nháy đơn như ‘a’ hay ‘B’ như ví dụ sau.

Đúng
char thisChar = 'a';

Bạn phải luôn nhớ là ký tự ‘a’ được khai báo ở trên phải nằm trong cặp nháy đơn chứ không phải nháy kép nhé. Nháy kép là dành cho chuỗi sẽ được nói đến ở bài học sau. Và nhớ là nếu không có nháy cũng sai. Ví dụ sau khai báo sai kiểu char.

Sai
char thisCharFail1 = "a";
char thisCharFail2 = b;
char thisCharFail3 = 'ab';

Ngoài việc khai báo như trên, kiểu char còn được dùng theo mã Unicode. Mã Unicode bắt đầu bằng ‘\u0000’ và kết thúc bằng ‘\uffff’. Lưu ý là với cách dùng kiểu mã Unicode này, bạn vẫn phải dùng nháy đơn cho việc khai báo. Ký hiệu \u cho biết bạn đang dùng với mã Unicode chứ không phải ký tự bình thường. Với cách khai báo theo kiểu mã Unicode này, bạn có thể đưa vào chương trình một số ký tự đặc biệt, hãy thử thực hành code như sau và in ra log, bạn sẽ thấy hiệu quả của Unicode nhé.

public class MyFirstClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char testUnicode1 = '\u2122';
		char testUnicode2 = '\u03C0';

		System.out.println("See this character " + testUnicode1 + " and this character " + testUnicode2);
	}

}

Kết quả in ra console như sau.

Biến - In ra console các mã Unicode

Kiểu boolean

Khác với C/C++, kiểu boolean trong ngôn ngữ Java chỉ được biểu diễn bởi hai giá trị là truefalse mà thôi. Do đó kiểu dữ liệu này chỉ được dùng trong việc kiểm tra các điều kiện logic, chứ không dùng trong tính toán, và bạn cũng không thể gán một kiểu số nguyên về kiểu boolean như trong C/C++ được.

Khai báo một kiểu boolean đúng như sau.

Đúng
boolean male = true;
boolean graduated = false;

Việc khai báo một biến boolean như sau là sai.

Sai
boolean male = 1;

Nếu không khai báo giá trị cho biến, thì biến kiểu boolean sẽ có giá trị mặc định là false.

Hằng Số

Hằng Số trong tài liệu tiếng Anh gọi là const, viết tắt của từ constant. Hằng cũng tương tự như biến, nhưng đặc biệt ở chỗ nếu một biến được khai báo là hằng thì nó sẽ không được thay đổi giá trị trong suốt chương trình.

Vì các ví dụ trên đây chỉ giúp cho các bạn khai báo một biến mà không đá động gì đến việc thay đổi giá trị biến đó, nhưng thực ra một biến có thể bị thay đổi giá trị nhiều lần trong suốt quá trình thực thi của ứng dụng, bạn sẽ làm quen với việc thay đổi giá trị của biến ở các bài sau. Còn hằng thì không có sự thay đổi nào cả, nếu bạn cố tình thay đổi hay gán lại giá trị mới của hằng sau khi nó được khai báo, bạn sẽ nhận được thông báo lỗi.

Để khai báo một hằng số, bạn cũng khai báo giống như biến nhưng thêm final vào trước khai báo. Bạn sẽ được biết nhiều hơn đến hằng số qua bài học riêng về từ khóa final. Giờ thì bạn có thể xem ví dụ sau để hiểu sơ về hằng.

final float PI = 3.14f;
final char FIRST_CHARACTER = 'a';
final int VIP_TYPE = 1;

Bạn nên tập khai báo hằng bằng các ký tự viết hoa như ví dụ trên đây, điều đó giúp chúng ta dễ dàng phân biệt được đâu là biến và đâu là hằng sau này.

Chúng ta vừa xem qua cách khai báo các biến và hằng. Nếu bạn vẫn còn mông lung về ngôn ngữ Java ở bài học này cũng không sao, mọi thứ chỉ mới bắt đầu, và rất cần nỗ lực từ phía bạn. Bạn sẽ được học sâu hơn các kiến thức về ngôn ngữ Java này ở các bài sau.

Cảm ơn bạn đã đọc các bài viết của Yellow Code Books. Bạn hãy đánh giá 5 sao nếu thấy thích bài viết, hãy comment bên dưới nếu có thắc mắc, hãy để lại địa chỉ email của bạn để nhận được thông báo mới nhất khi có bài viết mới, và nhớ chia sẻ các bài viết của Yellow Code Books đến nhiều người khác nữa nhé.

Bài Kế Tiếp

Bạn sẽ được học cách sử dụng các phép toán trong Java, và kết hợp với việc khai báo biến và hằng của bài học hôm nay để viết một số ví dụ tính toán thú vị.

Advertisements
Rating: 4.8/5. From 27 votes.
Please wait...

13 comments

    1. Chắc hẳn bạn biết rõ về C/C++ nên mới thắc mắc về con trỏ. Trong Java không còn khái niệm con trỏ nữa đâu bạn. Nhưng như vậy không phải là Java bỏ hẳn con trỏ đâu, việc sử dụng con trỏ chỉ còn được thực hiện ở các tầng dưới mà các lập trình viên Java không trực tiếp tương tác đến như bên C/C++. Bỏ con trỏ đi theo mình thấy cũng sẽ đỡ nhức đầu cho lập trình viên hơn ^^

    2. Trong Java không còn sử dụng con trỏ, theo mình biết khái niệm tham chiếu references trong Java cũng gần giống với con trỏ. Bạn có thể google “Phan biet giua pointer va references” để hiểu rõ hơn.

      1. Cảm ơn Ad và bạn Hải Ham Học đã giải đáp. Mình sẽ tìm hiểu thêm, nếu có gì thắc mắc sẽ hỏi tiếp 😀

  1. E dùng biến kiểu long nhập vào số 2 triệu sau đó dùng phương thức *5 thì nó lại ra số 1.0E7????? Ad giải thik gium mình vs

    1. Ôi, 2 triệu mà *5 thì kiểu long dư sức thể hiện bạn à. Vậy trường hợp của bạn có thể lý giải là bạn đã vô tình sử dụng số thực để tính toán trong biểu thức nào đó với số long kia, khiến hệ thống tự ép kiểu về số thực, nên mới ra kết quả 1.E07 đấy nhé.

Gửi phản hồi