Đối tượng Java đầu tiên của bạn

Mục tiêu của bài hướng dẫn này là giới thiệu cho bạn đối tượng đầu tiên của Java mà bạn hầu như chắc chắn sẽ gặp trên con đường nghề nghiệp.

Tạo một package

Hãy chuyển đến phối cảnh Duyệt Java (Java Browsing perspective) trong Eclipse. Chúng ta sẽ thiết đặt để tạo lớp Java đầu tiên của bạn. Bước thứ nhất là tạo một nơi cho lớp này tồn tại.

Thay vì dùng package mặc định, tốt hơn là ta hãy tạo một package riêng cho dự án Intro của mình. Nhấn chuột chọn File>New>Package. Thao tác này sẽ mở Trình thủ thuật tạo Package (xem hình 3)

Hình 3. Trình thủ thuật tạo package

 

Đặt tên cho package là intro.core (trong ô Name) và nhấn Finish. Bạn có thể thấy thông tin sau đây trong khung nhìn Packages trong vùng làm việc:

 

intro.core

Lưu ý rằng biểu tượng ở bên trái package trông mờ mờ -- nhìn giống như một dạng mờ xám đi của biểu tượng package. Đó là quy ước chung của giao diện người dùng trong Eclipse đối với những hạng mục trống. Package của bạn chưa có bất cứ lớp Java nào bên trong nên biểu tượng của nó bị mờ đi.

Khai báo một lớp

Bạn có thể tạo một lớp Java trong Eclipse bằng cách chọn File>New,, nhưng chúng ta sẽ dùng công cụ thay thế. Nhìn lên phía trên khung nhìn Packages để thấy thanh công cụ tạo các dự án, gói (package) và lớp. Nhấn chuột chọn công cụ New Java Class (chữ “C” màu xanh lục) để mở trình hướng dẫn tương tác New Java Class. Đặt tên lớp là Adult và chấp nhận các thiết lập mặc định bằng cách nhấp Finish. Bạn sẽ thấy có một vài thay đổi:

Lớp Adult xuất hiện trên khung nhìn Classes, phía bên phải của khung nhìn Packages (xem hình 4).

Hình 4. Vùng làm việc

 


  • Biểu tượng gói intro.core không còn bị mờ nữa.
  • Trình soạn thảo của Adult.java hiển thị bên dưới.

 

Tại thời điểm này, lớp trông như sau:

package intro.core;

public class Adult {

}

Eclipse sinh ra một cái vỏ hay một khung mẫu cho lớp của bạn, và bao gồm luôn câu lệnh package nằm ở ngay đầu. Thân của lớp hiện giờ là rỗng. Đơn giản là chính chúng ta phải thêm 'da thịt' vào. Bạn có thể cấu hình khung mẫu cho các lớp mới, phương thức mới, vân vân trong trình hướng dẫn tương tác Preferences mà bạn đã từng dùng trước đây (Window>Preferences ). Bạn có thể cấu hình khuôn mẫu cho mã lệnh trong đường dẫn đến các lựa chọn ưu tiên Java>Code Style>Code Templates. Thực tế, để đơn giản mọi thứ trong việc hiển thị mã lệnh, từ đây trở đi tôi đã loại bỏ tất cả các chú thích khỏi các khuôn mẫu này – nghĩa là bất kỳ dòng nào có dấu // ở trước hoặc bất kỳ dòng nào nằm trong cặp /* … */ hoặc cặp /** … **/. Từ bây giờ trở đi, bạn sẽ không nhìn thấy bất kỳ dòng chú thích nào trong mã lệnh nữa, trừ khi chúng ta đặc biệt thảo luận về cách dùng chúng ở phần sau.

Tuy nhiên, trước khi chúng ta tiếp tục, ta hãy minh họa cách thức mà IDE Eclipse làm cho công việc của bạn dễ dàng hơn. Trong trình soạn thảo, hãy sửa đổi từ class thành clas và chờ vài giây. Bạn nhận thấy là Eclipse sẽ gạch chân chữ này bằng một đường lượn sóng màu đỏ. Nếu bạn di chuột qua một mục được gạch chân, Eclipse sẽ bật một cửa sổ thông tin để báo cho bạn biết bạn đang mắc lỗi cú pháp. Eclipse giúp bạn bằng cách liên tục biên dịch mã lệnh của bạn và kín đáo cảnh báo bạn nếu có vấn đề xảy ra. Nếu bạn dùng công cụ dòng lệnh javac, bạn sẽ phải biên dịch mã lệnh và chờ xem lỗi. Điều đó có thể làm chậm việc phát triển chương trình của bạn. Eclipse loại bỏ rắc rối đó.

Các chú thích

Giống như hầu hết các ngôn ngữ khác, ngôn ngữ Java hỗ trợ các chú thích, mà đơn giản là các câu lệnh mà trình biên dịch sẽ bỏ qua khi nó kiểm tra cú pháp xem có đúng không. Java có nhiều kiểu chú thích:

 

//  Chú thích một dòng. Trình biên dịch bỏ qua đoạn văn bản đi sau cặp dấu gạch xiên.

/*  Chú thích nhiều dòng. Trình biên dịch bỏ qua đoạn văn bản nằm giữa hai dấu sao.  */

/**  Chú thích javadoc. Trình biên dịch bỏ qua đoạn văn bản nằm giữa hai dấu sao, và công cụ javadoc sẽ sử dụng chúng. */

|-------10--------20--------30--------40--------50--------60--------70--------80--------9|

|-------- XML error:  The previous line is longer than the max of 90 characters ---------|

Kiểu cuối cùng là đáng chú ý nhất. Nói rất ngắn gọn, công cụ javadoc đi kèm với bản phân phối SDK Java mà bạn đã cài đặt có thể giúp bạn sinh ra tài liệu HTML cho mã lệnh của bạn. Bạn có thể sinh ra tài liệu cho các lớp riêng của mình và chúng sẽ trông tương tự như những gì bạn thấy trong tài liệu API Java mà bạn đọc trong The Java API online. Một khi bạn đã chú thích hợp lý cho mã lệnh của mình, bạn có thể chạy lệnh javadoc từ dòng lệnh. Bạn có thể tìm thấy chỉ dẫn thực hiện việc này, và tất cả thông tin đã có sẵn về javadoc trong trang web về công nghệ Java.

Các từ dành riêng

Còn một mục nữa cần đề cập trước khi chúng ta bắt đầu viết mã lệnh để bộ biên dịch kiểm tra. Java có một số từ mà bạn không được dùng để đặt tên cho các biến. Sau đây là danh sách các từ này:

abstract

boolean

break

byte

case

catch

char

class

const

continue

char

class

default

do

double

else

extends

false

final

finally

float

for

goto

if

implements

import

int

instanceof

interface

long

int

native

new

null

package

private

protected

public

package

private

static

strictfp

super

switch

synchronized

short

super

this

throw

throws

true

try

transient

return

void

volatile

while

assert

true

false

null

 

 

 

                  

Danh sách này không dài, nhưng Eclipse sẽ tô đậm các từ này khi bạn gõ, bởi vậy bạn không phải ghi nhớ chúng. Tất cả trong danh sách được gọi là từ khóa Java. Trừ ba từ cuối là các từ dành riêng. Sự khác biệt không quan trọng đối với mục đích của chúng ta; bạn không thể sử dụng cả hai loại.

Giờ ta hãy xem một số mã lệnh thực sự.

Thêm các biến

Như tôi trước đây đã nói, một cá thể Adult biết tên, tuổi, chủng tộc và giới tính của nó. Chúng ta có thể bổ sung thêm các mẩu dữ liệu ấy cho lớp Adult của chúng ta bằng cách khai báo chúng dưới dạng các biến. Sau đó thì mọi cá thể của lớp Adult sẽ có các biến này. Mỗi Adult sẽ có giá trị khác nhau cho các biến này. Đó là lý do tại sao các biến của mỗi đối tượng lại thường được gọi là biến cá thể (instance variables) - chúng là cái để phân biệt mỗi cá thể của lớp. Ta hãy thêm biến, dùng định tố truy cập protected cho mỗi biến:

package intro.core;

public class Adult {

          protected int age;

          protected String name;

          protected String race;

          protected String gender;

}

Bây giờ thì mọi cá thể của Adult đều sẽ chứa những mẩu dữ liệu này. Lưu ý ở đây mỗi dòng mã lệnh kết thúc bằng dấu chấm phẩy (;). Ngôn ngữ Java yêu cầu điều đó. Cũng lưu ý thêm là mỗi biến có một kiểu dữ liệu. Ta có một biến kiểu số nguyên và ba biến kiểu chuỗi. Kiểu dữ liệu của các biến có hai dạng:

Các kiểu dữ liệu nguyên thủy

Các đối tượng (hoặc do người dùng định nghĩa hoặc là có sẵn trong ngôn ngữ Java), còn gọi là biến tham chiếu.

Kiểu dữ liệu nguyên thủy

Có chín kiểu dữ liệu nguyên thủy như bạn thường thấy:

Type

Size

Default value

Example

boolean

N/A

false

true

byte

8 bits

0

2

char

16 bits

'u/0000'

'a'

short

16 bits

0

12

int

32 bits

0

123

long

64 bits

0

9999999

float

32 bits with a decimal point

0.0

123.45

double

64 bits with a decimal point

0.0

999999999.99999999

Type

Size

Default value

Example

 

Chúng ta dùng kiểu int cho dữ liệu age vì chúng ta không cần giá trị thập phân và một số nguyên là đủ lớn để mô tả tuổi thực của con người. Ta dùng kiểu String cho ba biến khác vì chúng không phải là số. String là một lớp trong gói java.lang, bạn có thể truy nhập vào mã lệnh của lớp này một cách tự động bất cứ lúc nào bạn muốn (chúng ta sẽ đề cập về nó trong phần Strings). Bạn cũng có thể khai báo các biến là kiểu do người dùng định nghĩa, ví dụ như Adult.

Chúng ta định nghĩa mỗi biến trên một dòng riêng biệt, nhưng thực tế không cần phải làm như vậy. Khi bạn có hai hoặc nhiều hơn các biến có cùng kiểu, bạn có thể định nghĩa chúng trên cùng một dòng, chỉ cần ngăn cách chúng bằng dấu phẩy, như thế này:

 accessSpecifier dataType variableName1,  variableName2,  variableName3,...

Nếu chúng ta muốn khởi tạo các biến này khi khai báo chúng, ta chỉ cần thêm giá trị khởi tạo sau tên từng biến:

 accessSpecifier dataType variableName1 =  initialValue,

 variableName2 =  initialValue, ...

Phương thức main()

 kiểm tra các biến cá thể của nó:

package intro.core;

public class Adult {

          protected int age;

          protected String name;

          protected String race;

          protected String gender;

          public static void main(String[] args) {

                   Adult myAdult = new Adult();

                   System.out.println("Name: " + myAdult.name);

                   System.out.println("Age: " + myAdult.age);

                   System.out.println("Race: " + myAdult.race);

                   System.out.println("Gender: " + myAdult.gender);

          }

}

Trong thân của phương thức main(), chúng ta tạo một cá thể Adult, sau đó in ra giá trị của các biến cá thể. Hãy nhìn vào dòng đầu tiên. Đây là chỗ mà những người thuần túy chủ nghĩa hướng đối tượng khó chịu với ngôn ngữ Java. Họ cho rằng new nên là một phương thức của Adult và bạn phải gọi nó theo kiểu: Adult.new(). Dĩ nhiên tôi hiểu quan điểm của họ, nhưng ngôn ngữ Java không làm theo cách ấy, và đó là lý do để những người theo chủ nghĩa thuần túy có thể kêu ca hoàn toàn đúng rằng Java không thuần là hướng đối tượng. Hãy xem lại dòng đầu tiên một lần nữa. Nhớ rằng tất cả lớp Java đều có hàm tạo mặc định, là thứ mà ta đang dùng ở đây.

Sau khi chúng ta tạo một cá thể Adult, chúng ta lưu nó trong một biến cục bộ gọi là myAdult. Sau đó ta in ra các giá trị của các biến cá thể của nó. Trong hầu hết các ngôn ngữ, bạn có thể in mọi thứ ra màn hình. Ngôn ngữ Java cũng không ngoại lệ. Cách bạn làm việc này trong mã lệnh Java là gọi phương thức println() của luồng out của đối tượng System. Đừng lo lắng về chuyện bạn phải hiểu tất cả chi tiết của quá trình ấy vào lúc này. Chỉ biết rằng chúng ta đang sử dụng một lời gọi phương thức hữu ích để in ra một thứ gì đó. Với mỗi lời gọi, ta chuyển giao một xâu trực kiện (string literal) và nối thêm giá trị của biến cá thể của myAdult. Chúng ta sẽ quay lại xem chi tiết phương thức này về sau.

Thi hành mã lệnh trong Eclipse

Để thi hành mã lệnh này, bạn phải thực hiện một ít thao tác trong Eclipse. Nhấn chọn lớp Adult trong khung nhìn Types và nhấn chọn biểu tượng “người đang chạy (running man)” trên thanh công cụ. Bạn sẽ thấy hộp thoại Run, nơi cho phép bạn tạo ra cấu hình khởi chạy cho chương trình của mình. Chọn kiểu cấu hình muốn tạo ra là Java Application rồi chọn New. Eclipse sẽ chỉ rõ tên mặc định đặt cho cấu hình này là “Adult”, và thế là ổn. Nhấn Run để thấy kết quả. Eclipse sẽ hiển thị khung nhìn Console bên dưới bộ soạn thảo mã lệnh giống như ở hình 5.

Hình 5. Kết quả chạy chương trình

Lưu ý rằng các biến đều mang giá trị mặc định của chúng. Theo mặc định, bất kỳ biến cá thể nào dù là do người dùng định nghĩa hay có sẵn trong ngôn ngữ đều mang giá trị null. Khởi tạo tường minh các biến, đặc biệt là các đối tượng luôn luôn là một ý tưởng hay, nhờ đó bạn có thể chắc chắn về giá trị của các biến mà chúng có bên trong. Ta hãy quay lại và khởi tạo cho các biến những giá trị như sau:

Variable

Value

name

"Bob"

age

25

race

"inuit"

gender

"male"

 

Chạy lại mã lệnh bằng cách nhấn chọn một lần nữa vào biểu tượng người đang chạy. Bạn sẽ thấy giá trị mới hiện lên trên console.

Bây giờ thì hãy làm sao để Adult của chúng ta có khả năng nói cho những đối tượng khác biết về dữ liệu của nó.

Bài tiếp theo chúng tôi sẽ hướng dẫn các bạn về các phương thức truy cập của Java.

Theo dõi http://laptrinhtot.com để tiếp tục theo dõi các loạt bài mới nhất về Java nhé!

Tags: