1. Trang chủ
  2. » Công Nghệ Thông Tin

Tổng quan về Lập Trình Java

75 395 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 75
Dung lượng 243,5 KB

Nội dung

Tổng quan về Lập Trình Java, tài liệu hướng dẫn cơ bản về lập trình, ngôn ngữ lập trình, cũng như các thuật toán lập trình, cùng với ngôn ngữ lập trình Java, tài liệu chi tiết, dành cho các bạn nghiên cứu ,học tập về Java

Trang 1

Chơng I lập trình là gì ?

Đối với đại đa số mọi ngời, hình ảnh về chiếc máy tính hiện ra nh một trò mathuật Đó là một thế giới quyền lực vô hình và thờng đợc cảm nhận nh một thực thể toànnăng có khả năng, với một chút tác động của con ngời, trả lời cho những diễn biến th-

ơng mại, chính trị, khoa học, và rất nhiều phơng diện khác trong cuộc sống của chúng

ta Những chiếc máy tính làm gợi nhớ sự lo ngại không quen thuộc; những lầm lỗi củacon ngời thờng đợc che giấu bằng những lời nguỵ biện tỷ nh “máy tính đã nghỉ” hoặc

“đó phải là sai sót của máy tính” Song le, một chiếc máy tính thì không có gì hơn làmột tập hợp vô hồn các dây nhợ và thành phần silicon đợc tổ chức nh thế nào đó saocho nó có thể thực hiện nhanh chóng những thao tác đơn giản nh cộng hai con số vớinhau Thế thì làm thế nào nó có đợc sức mạnh ghê gớm nh vậy ? Bàn tay tài ba nào đãbiến tập hợp những thành phần điện tử này thành một công cụ vạn năng ?

Lập trình chính là để thực hiện trò ma thuật đó Một chơng trình là một tập hợp

các hớng dẫn (directions) chính xác những việc cần làm cho máy tính; nh vậy chơng

trình là phơng tiện trung gian đợc dùng để giao tiếp với máy tính

Các chơng trình có thể đợc viết trên nhiều ngôn ngữ lập trình (programming

languages)- những ngôn ngữ đặc tả các hớng dẫn cho máy tính Trong cuốn sách nàychúng ta sử dụng ngôn ngữ Java

Công việc trớc tiên khi lập trình là phải sáng sủa hoá bài toán tới mức có thể

Chính xác yêu cầu của bài toán là gì ? Nó có thể đợc chia thành những vấn đề nhỏ hơn

để dễ quản lý ra sao ? Thuật toán nào đợc dùng để giải quyết ? Cách cài đặt thuật toán

vào chơng trình ? Chơng trình có làm việc hay không ? Cách trình bày đã trong sánghay cha ? Có nhanh không ? Có dễ thay đổi khi cần thiết ? Có yêu cầu quá nhiều tàinguyên của hệ thống ? Đó là những thách thức đối với các lập trình viên- những ngời

thiết kế và viết chơng trình

Con chuột máy trong mê cung

Chúng ta bắt đầu bài học bằng một bài toán nhỏ chứa những yếu tố cơ bản của bất

kỳ một đề án lập trình nào: thực hiện những chỉ thị (instructions) lên một con chuột

máy để giúp nó thoát khỏi một mê cung ở đây, mê cung là một khu hình chữ nhật đợc

bố trí các phòng hình vuông trong đó; hai phòng kề nhau có thể đợc ngăn cách bởi mộtbức tờng hoặc mở thông với nhau Chúng ta đặt con chuột ở lối vào mê cung với một đ-ờng kẻ đậm mô tả các bức tờng, và đờng chấm chấm mô tả đờng thông qua

Con chuột cũng giống nh một chiếc máy tính, nó chỉ biết làm theo những chỉ thị

đơn giản xác định nào đó: step forward đi vào phòng tiếp theo, turn right rẽ phải,

turn left rẽ trái Chúng ta phải lập trình cho nó bằng cách viết tỉ mỉ các chỉ thị mà nó

phải làm theo để thoát ra ngoài mê cung Với trờng hợp đơn giản này, các chỉ thị sẽ là:

Máy tính và ngôn ngữ lập trình

Những chiếc máy tính mà bạn sẽ học cách lập trình cho chúng cũng giống nh lũchuột máy ở trên Chúng hiểu cách đáp lại một danh mục các chỉ thị đơn giản gọi là tập lệnh (instruction set) Công việc viết một chơng trình là diễn đạt cách giải quyết bằng thuật toán cho một vấn đề bằng tập lệnh máy tính Đơng nhiên, tập lệnh của các máy

tính thì phức tạp hơn tập các chỉ thị chuột rất nhiều Các tập lệnh thay đổi qua các máykhác nhau, song chúng đều có những điểm chung sau:

• Chúng có thể thực hiện đợc những thao tác số học đơn giản trên số nguyên

và số thập phân; có khả năng lu giữ các kết quả trung gian tạm thời

Trang 2

• Chúng có những thuận lợi khi làm việc với các chuỗi chữ cái, ký hiệu, số; và

có thể so sánh bằng nhau hay tơng đơng

• Chúng có khả năng nhận thông tin (input) từ những nguồn dữ liệu nh bànphím, đĩa từ, điện thoại, băng từ hay các máy tính khác; có khả năng gửithông tin (output) tới những thiết bị nh máy đầu cuối, máy in, đĩa, băng từhay các máy tính khác

Cũng nh việc kết hợp các chỉ thị đơn giản có thể đa chú chuột máy thoát khỏi một

mê cung, một sự phối hợp thông minh các chỉ lệnh đơn giản của máy tính có thể thựchiện đợc những công việc phức tạp nh thể là chúng có phép lạ vậy u thế lớn của máytính là có thể thực thi với tốc độ vài triệu chỉ lệnh trên một giây Dù cho khi nó thựchiện những lệnh đơn giản, việc thi hành đợc thực hiện quá nhanh và kết quả có thể tinh

vi đến mức đáng ngạc nhiên

Trong thời thơ ấu của máy tính, các chơng trình đợc viết bởi những tập lệnh đơngiản này- đợc gọi là ngôn ngữ máy (machine language) Ngày nay, chúng ta sử dụng

một ngôn ngữ lập trình mức cao (high- level programming languages), giống nh ngôn

ngữ mà chúng ta đã dùng để lập trình cho chú chuột máy, và máy tính sẽ tự động

chuyển đổi kết quả thành ngôn ngữ riêng của nó để thực thi

Có nhiều ngôn ngữ lập trình mức cao Java là một trong số đó; các ngôn ngữ khác

nh BASIC, C++, Pascal, Tất cả chúng đều chia sẻ một tính chất quan trọng, cũng giống

nh ngôn ngữ của chuột máy, rằng các ngôn ngữ phải đợc sử dụng theo những quy tắcchặt chẽ Điểm khác biệt với ngôn ngữ tự nhiên, với tính đa nghĩa và tinh tế của nó, làcác ngôn ngữ lập trình đều không mềm dẻo; và giao tiếp với máy tính là công việc vấtvả nhất cho những lập trình viên mới vào nghề

Java đợc thiết kế đặc biệt để lập trình an toàn trên Internet, và nó nhanh chóng trởnên đợc a chuộng tuyệt đối Java cũng là một ngôn ngữ rất giàu có, vì thế những bài học

để nắm vững ngôn ngữ này sẽ gắn với việc lập trình trên bất kỳ một ngôn ngữ nào màbạn đã nói lời từ biệt Hơn nữa, với tính năng “lập trình an toàn”, Java giúp ngời mớihọc tránh đợc những cạm bẫy thờng có trong các ngôn ngữ khác Cuối cùng, lập trìnhtrên Java, đặc biệt là cho các trình duyệt Internet, là rất lý thú! Nhiều ví dụ trong cuốnsách này kéo theo những chơng trình mà bạn có thể đa vào những trang Web của mình

để cả thế giới cùng thởng thức!

Chơng trình và thuật toán

Ví dụ về chú chuột máy đã chỉ ra một cách rõ ràng rằng, trớc khi bắt đầu viết mộtchơng trình (trên Java hay bất kỳ một ngôn ngữ nào khác), bạn cần phải hiểu đích xácbạn muốn chơng trình đó làm cái gì và làm nh thế nào Trừ khi bạn đã nghiên cứu kỹ l-

ỡng thuật toán, còn thì việc viết một chơng trình chắc chắn sẽ là một thảm hoạ, và trongtrờng hợp tồi nhất là không thể thực hiện đợc

Trong cuốn sách này chúng tôi sẽ hớng dẫn bạn cách thiết kế các thuật toán và đachúng vào Java Có ba công việc riêng rẽ ở đây: học “ngữ pháp” và “cú pháp” Java, họcnhững kinh nghiệm đầu tiên đợc bàn luận về kiểu mẫu viết chơng trình, học cách thiết

kế và thực hiện các thuật toán Trớc tiên, viết những chơng trình theo đúng cú pháp ờng nh là công việc khó khăn nhất Viết những chơng trình đúng cú pháp là vấn đề quantrọng trong việc nắm bắt tập các quy tắc về ngữ pháp Sử dụng thành thạo cú pháp Java

d-là việc rất khó bởi vì máy tính d-là thứ hoàn toàn không khoan nhợng đối với bất kỳ mộtsai sót nào

Việc viết chơng trình sử dụng một kiểu mẫu tốt là một công việc khó bởi vì có rất

ít những quy tắc tuyệt đối mà hầu hết là những nguyên lý chung thờng đợc sử dụng.Tính tổ chức, sự tỉ mỉ, sự nhạy bén mang tính kinh nghiệm và một chút óc sáng tạo lànhững yếu tố cần thiết để viết một chơng trình kiểu mẫu Cuối cùng, sau khi bạn đã làmchủ đợc những rắc rối về mặt ngôn ngữ, thì công việc thứ ba của chúng ta- thiết kế vàthực thi những thuật toán- là nhiệm vụ mang tính thách thức nhất, thú vị nhất và quantrọng nhất Nó đòi hỏi tài năng và những kỹ xảo trong giải quyết vấn đề Trong cuốn

Trang 3

sách này bạn sẽ đợc học nhiều những kỹ thuật mà thờng là có thể tìm thấy sự phối hợpcủa chúng trong những công việc khác nhau.

Netscape Communicator hay Sun’s HotJava Các Applet điển hình là cho phép ngời sử

dụng điều khiển sự thực thi thông qua một giao diện đồ họa ngời sử dụng (Graphical

User Interface- GUI), đó là một tuyển tập các thành phần (components) nh button và scrollbar trong một cửa sổ Một khi bạn đã viết một Applet, bạn không chỉ có thể thực

thi nó trong trình duyệt của mình, mà còn có khả năng thực thi trên những trình duyệtkhác, của những ngời khác Tơng tự, bạn có thể thực thi những Applet mà những lập

trình viên khác phát triển Khả năng này thực sự đã đ World Wide Web vào cuộc sốngcủa chúng ta

Chúng tôi sẽ hớng dẫn bạn cách làm thế nào để viết các ứng dụng và các Applet.

Viết các Applet thì khoái hơn, nhng các ứng dụng thì lại giống hơn với các ngôn ngữ lập

trình truyền thống nh BASIC Trong mọi trờng hợp, sự khác biệt giữa chúng chủ yếu chỉmang tính hình thức; cái khó khi viết một chơng trình vẫn là công việc thiết kế thuậttoán cơ sở của nó

Biên dịch và thông dịch#

Hãy nói về cơ chế Sau khi thiết kế và viết chơng trình – ứng dụng hay applet –trên giấy, bạn bắt đầu tiến hành gõ nội dung của nó vào một file trên máy tính và gỡ rối

(debugging) cho nó – loại trừ những lỗi có thể gặp trong giai đoạn lập trình Một file

đợc hiểu tơng tự nh là một “thùng chứa điện tử” mà ở đó các thông tin nh văn bản, dữliệu hay các chơng trình có thể đợc lu trữ Việc soạn thảo và sửa chữa chơng trình củabạn trên máy tính đợc thực hiện thông qua một trình soạn thảo (editor), một chơng trình

đợc hỗ trợ có khả năng hiểu những chỉ thị nh chèn và xoá các dòng ký tự, di chuyểnchúng qua lại, và tìm kiếm những mẫu tự đặc biệt Các trình soạn thảo cho phép l u vàphục hồi dữ liệu thông qua đĩa (disk), một thành phần nhớ chính của máy tính Học

cách sử dụng một trình soạn thảo sẽ giúp bạn tiến hành viết và gỡ rối chơng trình đợc dễdàng hơn

Nhớ rằng chơng trình mà bạn viết và gõ vào máy tính là chơng trình Java, mộtngôn ngữ lập trình mức cao, cho phép các lập trình viên diễn giải những t tởng của anh

ta theo những thuật ngữ phức tạp nhng trong sáng và dễ thể hiện Những ví dụ khác vềngôn ngữ lập trình mức cao là BASIC, Pascal, và C++ Hầu hết các ngôn ngữ mức cao

đều cần phải đợc chuyển đổi thành một ngôn ngữ cơ sở hơn có khả năng đợc thực thitrực tiếp bởi phần cứng máy tính Java khác với đa số các ngôn ngữ lập trình mức cao.Bởi vì một trong các mục tiêu của Java là đạt tới khả năng độc lập phần cứng (platform-

independence), Java sẽ không đợc chuyển đổi thành một ngôn ngữ mã máy cụ thể nào.Thay vì nh vậy, Java đợc chuyển đổi thành một ngôn ngữ trung gian gọi là Java Bytecode Các Java Bytecode sau đó đợc thông dịch theo cùng một phơng pháp chính

xác trên tất cả các máy tính, vì vậy một chơng trình Java sẽ làm những công việc giốngnhau cho dù nó đợc chạy trên một máy IBM PC, Apple Macintosh, hay bất kỳ một máytính nào khác

Khi đã có một file chơng trình chứa mã Java, bạn sẽ dùng hai chơng trình khác

đ-ợc hỗ trợ sẵn: một trình biên dịch (compiler) có nhiệm vụ chuyển đổi chơng trình của

bạn thành một chơng trình theo ngôn ngữ Java Bytecode, và một trình thông dịch

(interpreter), để thực thi các Java Bytecode này Một tính năng đặc biệt hấp dẫn của

Trang 4

Java là rất nhiều các trình duyệt Internet hiện đại đều có kết hợp với những trình thôngdịch Java.

Những bớc thực hiện mà bạn phải làm để biên dịch và chạy chơng trình Java củabạn phụ thuộc vào hệ thống mà bạn đang sử dụng và chơng trình của bạn là một ứngdụng hay một Applet Trờng hợp đơn giản nhất là khi bạn viết một ứng dụng (stand-alone program) trên một hệ thống hớng dòng lệnh (command-oriented systems), nh

DOS hay UNIX Trong trờng hợp này, bạn dể chơng trình của mình trong một file cótên là whatever.java (whatever có thể là bất kỳ, nhng java phải là java) Gõ dònglệnh:

Nếu chơng trình của bạn có lỗi cú pháp (syntactic errors, grammatical errors),

nghĩa là khi có những quy tắc văn phạm của Java không đợc tôn trọng, công việc biêndịch chơng trình thành các Bytecode không thể hoàn thành, và trình biên dịch sẽ cảnhbáo cho bạn – thờng là bằng những thông báo cộc lốc và hết sức không thân thiện Bạnphải tìm xem chỗ nào trong chơng trình cần phải thay đổi và dùng trình soạn thảo đểsửa lỗi, sau đó cố gắng biên dịch lại Bạn có thể sẽ mất một vài lần sửa chữa để việcbiên dịch thành công

Song le, một chơng trình đợc biên dịch thành công (không có lỗi) thì cha đủ đảmbảo để chơng trình có thể làm việc một cách đúng đắn Có thể bạn đã viết những đoạnmã rất đúng cú pháp nhng chơng trình lại không làm việc chính xác nh bạn mong đợi.Những lỗi nhận đợc trong quá trình thực hiện chơng trình đợc gọi là các lỗi logic (logic

errors hay run-time errors); cũng nh các lỗi cú pháp, chúng cần đợc sửa chữa lại Các lỗilogic có thể đợc phát sinh do đơn giản là một lỗi đánh máy hay do sai lầm trong thuậttoán

Lập trình hớng đối tợng: thăm lại chú chuột trong mê cung

Java có những tính năng đáng ca ngợi Trung tâm của những tính năng này đó làJava là một ngôn ngữ hớng đối tợng (object - oriented language) Điều này có nghĩa là

Java cổ vũ – thậm chí ép buộc – mô hình lập trình hớng đối tợng (OOP – Object Oriented Programming.) OOP là một cách nghĩ trong giải quyết vấn đề – một kiểu mẫu (paradigm) lập trình Trong OOP, một chơng trình đợc xem xét nh là một tập các

-đối tợng (objects) tơng tác lẫn nhau bằng cách gửi các thông điệp (messages) cho nhau.

Chẳng hạn, sử dụng OOP, chúng ta sẽ tiếp cận chú chuột máy của chúng ta theocách sau đây Mê cung và chuột – mỗi thứ là một đối tợng Một đối tợng thứ ba – gọi

quan sát viên (observer)- có nhiệm vụ hiển thị cấu trúc của mê cung trên màn hình

máy tính và chỉ ra con đờng mà chú chuột đã dùng để tẩu thoát khỏi mê cung

Để quan sát viên có thể hiển thị cấu trúc mê cung, nó phải có khả năng nhận ranhững bức tờng đợc sắp xếp ở trong đó Thông tin này thu đợc bằng cách gửi thông điệptới mê cung – nhớ rằng mê cung là một đối tợng - , “hỏi” nó, với mỗi một căn phòngxác định phải chăng có một bức tờng chắn ở các hớng Bắc, Nam, Tây, Đông Bằng cáchhỏi han có hệ thống về các phòng, quan sát viên có thể vẽ kiến trúc mê cung lên màn

Trang 5

hình Thêm vào đó, quan sát viên sẽ gỉ thông điệp tới chuột máy, hỏi xem di chuyển tiếptheo của nó là gì, và sử dụng câu trả lời để tái hiện con đờng thoát khỏi mê cung.

Nh chúng ta đã biết, chuột máy phải có khả năng xác định xem có phải nó đang

đối diện với một bức tờng hay không Để làm điều này, chuột ta phải biết đợc phơng ớng hiện tại của nó (Bắc, Nam, Tây, Đông) và nó đang ở tại vị trí nào trong mê cung Sửdụng các thông tin này, nó sẽ gửi một thông điệp tới mê cung, hỏi xem phải chăng cómột bức tờng đang nằm ở hớng đó của căn phòng đó

h-Cả ba đối tợng nói trên phải có một cách nào đó để gọi tên các phòng trong mêcung Chẳng hạn có thể đánh số các phòng bởi một cặp số nguyên (cột, hàng) chỉ ra sốhiệu cột và hàng của phòng

Chúng ta thử quan sát giải pháp OOP này Mê cung phải đợc chuẩn bị để nhận cácthông điệp nh “Cho tớ biết, mê cung, có phải có một bức tờng hớng Đông ở căn phòng(3, 2) ?” Đơng nhiên, khi chúng ta viết thông điệp này trên Java, nó sẽ ngắn gọn hơn rấtnhiều – tỷ nh “checkWall (EAST, 3, 2” Mê cung có thể trả lời “đúng” hoặc “sai”.Việc đặc tả cách ứng xử (behavior) của mê cung liên quan tới sự mô tả chi tiết những

kiểu thông điệp mà mê cung có thể đáp lại Đặc tả này đợc gọi là một giao diện

(interface) Một giao diện mô tả tất cả mọi thứ về mê cung mà “thế giới bên ngoài” cầnphải biết để tơng tác với nó Tuy nhiên, giao diện lại không đề cập gì đến cách mà đối t-ợng thực sự đợc thực thi Đó là che giấu thông tin (information hiding) – một trong

những đặc tính của OOP Một ví dụ về đối tợng mouse đợc cho trên hình 1.2

Chú chuột phải đặc tả giao diện của nó Trong chơng trình đơn giản của chúng ta,

chú chuột phải đáp lại một thông điệp hỏi: “Cho tớ biết, chuột máy, di chuyển tiếp theocủa cậu là gi ?”, hoặc ngắn gọn hơn, “tellMove ()” Chuột ta sẽ trả lời “Bắc”, “Nam”,

“Tây”, hoặc “Đông” (Quan sát viên, kẻ gửi thông điệp này, có thể sẽ phải thực hiệnmột kiểm tra kép để chắc chắn rằng con chuột ranh mãnh không cố gắng để đào tẩu quamột bức tờng!) Chú ý rằng chuột máy phải chứa trong nó thuật toán thực sự mà chúng

ta đã khai thác ở phần trớc, song cả mê cung lẫn quan sát viên đều không thể “nhìn”thấy thông tin đợc che giấu này Tất cả những gì chuột ta cần dùng để khám phá ra con

đờng tẩu thoát đợc mã hóa bên trong đối tợng mouse

Sự phá phách của lũ chuột – Tính trừu tợng

Giả sử chúng ta muốn cho thông qua mê cung hai con chuột khác nhau – mộtcon bắt đầu tại một cửa mở trong mê cung và con còn lại tại cửa mở đối diện Chúng ta

Move one step

Where are you ?Where I am: (3,2)

Where I am heading: North

Where I am: (3,2)

Where I am heading: North

Hình 1.2: Một thể hiện của lớp Mouse.

Trang 6

giả thiết rằng lũ chuột có thể trèo qua nhau kho chúng tìm đờng thoát khỏi mê cun Mỗicon chuột là một đối tợng riêng biệt và mỗi một trong chúng có thể ở tại những địa

điểm khác nhau trong những thời điểm khác nhau Tuy nhiên, mỗi con chuột đều có

cách ứng xử trừu tợng (abstract behavior) giống nhau Cách ứng xử chung này đợc đặc

tả trong Java bởi giao diện chung của lũ chuột Khái niệm về một lớp (class) đơn giản là

một giao diện cùng với sừ thực thi chi tiết của giao diện đó Mỗi đối tợng chuột đợc gọi

là một thể hiện (instance) của lớp Tên của một thể hiện đợc dùng khi gửi thông điệp tới

đôí tợng đó Chẳng hạn, nếu gọi tên của lũ chuột là speedyvà greedy, quan sát viên cóthể hỏi về di chuyển tiếp theo của speedy bằng cách gửi thông điệp

speedy.tellMove() Quan hệ giữa lớp Mouse và hai thể hiện của nó đợc minh hoạtrên hình 1.3

Bạn có thể tự hỏi liệu OOP có thể dung nạp nhiều hơn một loại chuột hay không.Câu trả lời là có thể Trong trờng hợp này, một số cách ứng xử của hai loại chuột có thểtơng tự nhau, thậm chí chúng có thể có những giao diện giống nhau Tuy nhiên, cónhững sự thực thi khác nhau trong những phần của giao diện, và kết quả là những cáchứng xử khác nhau Trong OOP tính năng này gọi là sự chuyên biệt hoá (specialization),

và nó đợc hỗ trợ bởi những cơ chế OOP quan trọng của lớp con và tính kế thừa Các chủ

đề này sẽ đợc xem xét đầy đủ ở chơng 12

Cuối cùng, đôi khi các thông điệp đợc gửi tới không chỉ những thể hiện của lớp

mà là chính bản thân lớp đó Chẳng hạn, chúng ta có thể yêu cầu lớp Mouse lu giữ thôngtin về số thể hiện đã đợc tạo ra, và chúng ta sẽ hỏi số lợng này bằng thông điệp

Mouse.tellHowMany() Một cách tơng tự, lớp có thể lu giữ những thông tin về cấu tạobên trong của nó (vì vậy là cấu tạo của tất cả các thể hiện của nó.) Chẳng hạn, lớp

Mouse có thể chỉ ra rằng các thể hiện của nó đều có bốn chân, trong khi lớp

Chimpanzee (Tinh tinh) thì có hai chân Với ý nghĩa này, lớp đóng vai trò nh là một

“hoạ đồ” của các thể hiện

Tại sao phải lập trình hớng đối tợng ?

Nếu bạn đã từng lập trình trên BASIC, một ngôn ngữ rất phổ biến cho ngời mớihọc, thì việc tán chuyện về những thứ nh lớp và đối tợng dờng nh là một công việc quávô bổ chỉ để hoàn thành một nhiệm vụ giản đơn Tại sao lại có sự phiền phức này ?Câu trả lời đã đợc chúng đề cập ở phần đầu của chơng này: Chúng ta cần viếtnhững chơng trình dễ đọc và dễ thay đổi Lập trình hớng đỗi tợng là một cách cấu trúchoá chơng trình để đáp ứng những tiêu chuẩn này Đặc biệt, các lớp, đôí tợng, giao diện

và tính năng che giấu thông tin cho phép từng phần trong chong trình có thể đợc viết vàsửa đổi một cách độc lập, một u điểm vô giá khi viết những chơng trình lớn Với nhữngchơng trình đồ sộ – 100.000 dòng hoặc hơn – điều này gần nh là bắt buộc

Trang 7

Chơng II những thành

phần cơ bản của Java

Trong chơng này chúng ta sẽ bàn luận về những thành phần cơ bản của một chơngtrình Java Một chơng trình có thể đợc đọc và hiểu sâu sắc thậm chí bởi những ngời cha

hề biết lập trình, nh là đọc và hiểu một câu truyện ngắn hay một bài thơ vậy Thực ra,

b-ớc đầu tiên để học viết một chơng trình là học cách đọc chúng Nếu chơng trình là đơn

giản và đợc tổ chức tốt, việc thởng thức nó quả thật rất thú vị

ý rằng nếu bạn đang sử dụng một môi trờng phát triển tích hợp (IDE), nh mô tả ở chơng

I, các phơng thức kích hoạt chơng trình của bạn sẽ theo một cách khác

Bạn phải gõ chơng trình này vào trong một file có tênHello.java(các chữ thờng

và chữ hoa là rất quan trọng) Sau đó bạn biên dịch chơng trình bằng dòng lệnh:

javac Hello.java

Mỗi lớp yêu cầu một file độc lập Java hạn chế rằng tên mà bạn dùng theo sau từ khoá class phải đợc dùng nh là tên cơ

sở của file chứa chơng trình đó Phần mở rộng của file là

.java Nên nhớ việc tên của lớp và của file chơng trình phải

hoàn toàn giống nhau, kể cả cách viết hoa và thờng.

Bạn chạy chơng trình bằng dòng lệnh:

Trang 8

chú thích (comment) Các dòng chú thích bắt đầu bởi hai dấu slash, //, đợc dùng để giải

thích cho những ngời đọc mã chơng trình, máy tính sẽ bỏ qua chúng

Nh vậy, “khu vực thực thi” của chơng trình bao gồm các dòng 1, 3, 6, 7, 8, 9, 10.Dòng 1 gọi là tiêu đề lớp (class heading) cần phải có ở đầu tất cả các chơng trình: nó

bao gồm từ khoá class và tên của lớp (phải giống với tên của phần đầu file chơngtrình.) Dòng 6 gọi là method heading giới thiệu phơng thức (hoặc hàm) duy nhất của

chơng trình – tên là main Một phơng thức tên main đại diện cho những thao tác chínhcủa ứng dụng – là những gì đợc thực thi khi chơng trình chạy Phần heading method

này sẽ luôn luôn xuất hiện chính xác nh trên trong tất cả các ứng dụng của bạn.

Bây giờ, hãy xem xét một chơng trình nhận thông tin vào từ ngời sử dụng Nó sẽhỏi ngời sử dụng một nhiệt độ ở thang đo Fahrenheit và chuyển đổi thành nhiệt độCentigrade Chúng tôi muốn có một hội thoại tơng tự nh sau:

Please type the temperature (deg F): 68

68 deg F is 20.0 deg C

Câu trả lời của ngời sử dụng đợc hiển thị tiếp sau lời mời vào dữ liệu

1 class Temperature

2 {

Trang 9

3 // chuyển đổi nhiệt độ từ thang đo F sang C

đến dòng 13

Phần làm việc của chơng trình là từ dòng 7 đến dòng 13 Dòng 7 là một mô tả

(declararion) chỉ ra rằng chơng trình sẽ sử dụng một biến tên là temperature; biến này,

nh chúng ta sẽ thấy, dùng để chứa dữ liệu vào của ngời sử dụng Phần làm việc chínhcủa chơng trình đợc thực hiện bởi sáu điều lệnh khả thi (executable statement) ở các

dòng từ 8 đến 13 Chơng trình sau khi biên dịch sẽ thực thi các điều lệnh này – chỉ

đơn giản là làm theo những gì chúng chỉ dẫn – lần lợt từng lệnh một Nói chung tất cảcác chơng trình Java đều đòi hỏi các mô tả và các điều lệnh khả thi để thực hiện trongthời gian chay

Trong chơng trình này, sáu điều lệnh chỉ dẫn làm hai kiểu công việc: gửi các ký

tự ra màn hình cuối (các dòng 8, 10, 11, 12, 13) và nhận dữ liệu vào từ ngời sử dụng(dòng 9) Dòng 8 đợc thực hiện trớc tiên, in ra một lời mời yêu cầu ngời sử dụng nhậpdữ liệu Sau đó dòng 9 đợc thực hiện, khiến máy tính tạm thời chờ ngời sử dụng gõ vàomột số (và phím Enter) Số này đợc lu trong biến temperature

Trong ngôn ngữ Java, chúng ta nói rằng giá trị này đợc gán nh là một giá trị của biến temperature, hay đơn giản là đợc gán cho biến temperature Định danh tợng tr-

ng temperature đợc “mô tả” bởi điều lệnh ở dòng 7

Các dòng10 và 11 đợc thực hiện tiếp theo Dòng 10 in ra gía trị đã đựơc gán chobiến temperature

Trang 10

Tiếp theo là dòng 12 Nó lấy giá trị gọi là temperature và thực hiện một vàithao tác số học để tính ra giá trị nhiệt độ C tơng ứng Chú ý rằng phơng thức print làmviệc giống với phơng thức println, ngoại trừ việc nó không tự động xuống dòng.

Vào ra đơn giản

Cách xử lý hiển thị dữ liệu, đa ra máy in hoặc trên màn hình máy tính, đợc gọi là

output Trong Java phơng thức System.out.print() và System.out.println() lànhững cách đơn giản nhất để sản sinh output: Chúng hiển thị các ký tự trên màn hình,thờng đợc tham chiếu nh là một stdout, dòng ra chuẩn (standard output stream) hay console Trong chơng trình ở trên, dòng mã:

System.out.print(temperature + "deg F is");

Dấu “+” trong lệnh trên có tác dụng nh một tác tử nối kết (concatenation

operator), sẽ đặt giá trị của biến temperature và chuỗi “deg F is” kề nhau

Tuy rằng xuất dữ liệu trong Java đợc thực hiện một cách dễ dàng, việc vào dữ liệu

(input) không hẳn cũng đơn giản nh thế Java không cung cấp một phơng thức đơn giảnnào để nhận dữ liệu khi nó đợc gõ vào bởi một ngời ngồi trớc bàn phím máy tính (Thực

ra, có những cách nhận dữ liệu input đơn giản từ ngời sử dụng trong các Applet mà bạn

sẽ đợc thấy ở chơng III.) Để đơn giản hóa vấn đề, chúng ta đã viết những phơng thức đểnhận dữ liệu từ bàn phím Chúng ta sẽ sử dụng phơng thức Keyboard.readInt() đểnhận một số nguyên là giá trị đợc gõ vào từ bàn phím; sử dụng phơng thức

Keyboard.readDouble()để nhận một số thập phân Bạn sẽ không thể hiểu đợc mã củacác phơng thức này cho tới khi bạn biết thêm nhiều điều về Java; mã đầy đủ của chúng

đợc cho ở phụ lục D.7

Dòng mã:

temperature = Keyboard.readInt();

sẽ khiến chơng trình dừng lại và đợi ngời sử dụng gõ một số từ bàn phím rồi sau

đó gán số đọc đợc cho biến temperature Đơng nhiên, trớc khi nhận dữ liệu, chúng ta

có một lời mời (prompting) tới ngời sử dụng:

System.out.print("Please type the temperature (deg F): ");

Trang 11

Biến và các điều lệnh gán

Chúng ta tiếp tục với chơng trình nhiệt độ ở trên

Dòng mã:

int temperature;

sẽ mô tả rằng temperature là một biến (variable) Các biến có tầm quan trọng

mang tính quyết định trong lập trình máy tính, vì thế chúng tôi sẽ dành chút thời gian

để giải thích về bản chất của chúng và cách mà chúng đợc sử dụng

Bảng 2.1: Các từ khoá trong Java.

Một biến nh temperature có thể đợc xem nh một thùng chứa (container) chứa

một giá trị nào đó Sự mô tả (declaration) tạo ra thùng chứa này; vì vậy, tất cả các biến

đều phải đợc mô tả (trớc khi chúng có thể đợc sử dụng.) Ban đầu - chỉ sau khi đợc mô tả

- biến là thùng chứa rỗng, và việc in giá trị của nó là phạm một sai lầm (Tất nhiên, về

kỹ thuật, nó chứa một cái gì đấy, song bạn sẽ không tin tởng vào việc sử dụng giá trị

này.) Chẳng bao lâu nó sẽ đợc chứa một giá trị bằng một điều lệnh gán (assigment

statement), là dòng mã chứa tên biến, một dấu bằng (=) và một biểu thức Chẳng hạn,sau điều lệnh gán:

temperature = 32

Biến temperaturesẽ chứa gía trị 32

Các biến có thể thay đổi gía trị của chúng qua những điều lệnh gán, song chúngluôn luôn chứa đúng một giá trị đích xác nào đó Bởi vì các điều lệnh trong chơng trình

đợc thực thi liên tiếp nhau (one - by - one), nên nội dung của các biến vẫn đợc giữnguyên trừ khi chúng bị thay đổi bởi một điều lệnh gán Vì lý do này, nội dung của biến

là giá trị đợc gán bởi điều lệnh gán gần nhất thay đổi giá trị của nó

Chúng ta có thể mô tả hai biến trên cùng một dòng:

Trang 12

int fahrTemp, centTemp;

Từ khoá int trong mô tả chỉ ra rằng các biến chỉ chứa thành phần số nguyên(không có phần thập phân) Đó là một tên kiểu (type name) Các biến đợc mô tả bằng

một tên kiểu theo sau là tên biến

Không phải tất cả các tên biến đều hợp lệ Chẳng hạn, có một lỗi trong mô tả sau:

Một kiểu quan trọng của các giá trị dữ liệu, phân biệt với các giá trị đơn giản nh

integer, double, và character, đợc gọi là các đối tợng (object) Các đối tợng có mối

quan hệ chặt chẽ với các lớp (class) Những khái niệm phức tạp về lĩnh vực này sẽ đợc

bàn luận chi tiết ở chơng V Tuy nhiên, cấu trúc của Java không cho phép bạn bỏ quatính năng này dù chỉ trong những chơng trình hết sức đơn giản Vì vậy một giới thiệutóm tắt về đối tợng và những vấn đề liên quan thiết nghĩ là cần thiết Mục đích củachúng ta ở đây là củng cố hơn nữa các khái niệm về lập trình hớng đối tợng đã đợc đềcập ở chơng I và nắm đợc một vài ký hiệu của Java Đừng lo lắng nếu bạn không thểhiểu hết mọi phơng diện

Chúng ta đã biết đến khái niệm lớp Mỗi chơng trình mà chúng ta đã viết là một

lớp Các chơng trình này, đơng nhiên là đang còn rất đơn giản, đều chứa một lớp (nhắclại rằng dòng cuối cùng của chơng trình chứa một dấu ngoặc đóng (}) để kết thúc lớp).Nói chung, một chơng trình Java (ứng dụng hay Applet) bao gồm nhiều lớp Trong tr-ờng hợp các ứng dụng, một (và chỉ một) lớp phải chứa phần định nghĩa phơng thức

main

Chúng ta sẽ viết các chơng trình đa lớp (multi-class) trong chơng V tuy nhiên,nắm đợc các khái niệm lúc này là rất cần thiết, bởi vì Java cung cấp cho chúng ta mộttập các lớp vô cùng hữu dụng; để sử dụng chúng, chúng ta cần hiểu đợc một vài khíacạnh của lớp

Mỗi lớp C định nghĩa một tập các giá trị đợc gọi là các đối tợng kiểu C, hoặc đơngiản hơn, các đối tợng C Bạn mô tả các biến chứa các đối tợng C cũng giống nh khi bạnmô tả các biến của các kiểu dữ liệu quen thuộc khác Chẳng hạn:

C u, v, w;

mô tả u, v, w là các biến kiểu C

Nếu C và D là hai lớp khác nhau, các đối tợng của chúng có kiểu khác nhau, vàJava, nh thờng lệ, luôn kiếm chuyện với những kiểu gán ghép không đúng luật Chẳnghạn, nếu bạn mô tả một biến kiểu D:

D t;

Trang 13

Khi đó câu lệnh gán sau là không hợp lệ:

u = t;

t = u;

Các đối tợng (của bất kỳ một lớp nào) đợc phân biệt với các kiểu dữ liệu đơn giản,vì thế câu lệnh gán u = 10 cũng gây ra một lỗi

Khi một biến kiểu C đợc mô tả, nh lệ thờng một thùng chứa rỗng đợc tạo ra Bạn

có thể tạo một đối tợng C thực sự bằng cách sử dụng toán tử new:

u = new C(các tham số);

Sau new là tên lớp và các tham số (số tham số và kiểu tơng ứng là phụ thuộc vàolớp) Câu lệnh này tạo một đối tợng mới và kích hoạt một phơng thức gọi là phơng thức kiến tạo (constructor) của lớp để khởi đầu cho đối tợng Đó là cách duy nhất để khởi tạo

các đôí tợng

Nếu u là một đối tợng kiểu C, bạn sẽ thờng thấy các phơng thức đợc áp dụng cho

u sử dụng một dấu chấm phân cách: u.method( ) Không giống nh đa số các lời gọiphơng thức, ở đây tất cả các tham số đợc đặt trong dấu ngoặc đơn, với một dấu chấmphân cách giữa tên lớp và tên phơng thức Điều này làm gợi nhớ lại cách truy vấn lũchuột của chúng ta, “speedy.tellMove” Các phơng thức nh vậy đợc gọi là các phơng thức thể hiện (instance method).

Tuy nhiên không phải lúc nào việc áp dụng phơng thức cho các đối tợng cũng sử

dụng dấu chấm phân cách – bạn cũng sẽ gặp những lời gọi với cú pháp thông thờng.Khi mô tả một phơng thức mới, đồng thời chúng ta cũng chỉ ra cách mà nó đợc gọi có

sử dụng dấu chấm phân cách hay không Xem chơng 4 để biết thêm chi tiết

Chẳng hạn, bạn sẽ thấy trong chơng III, một Applet tạo ra một đối tợng có kiểu

TextField. TextField là một lớp đợc cung cấp cùng với trình biên dịch Java; các đốitợng của nó nh là những khu vực hiển thị trên màn hình để gõ văn bản vào Khi kiến tạomột đối tợng kiểu này, tham số là chiều rộng của trờng văn bản (theo số ký tự):

TextField name = new TextField(20);

Một trong những phơng thức của TextField sử dụng dấu chấm phân cách là

setText, đợc dùng để điền văn bản vào đối tợng Chẳng hạn, nếu bạn muốn thiết lập

đối tợng name một giá trị đặc biệt nào đó, có lẽ là một gía trị mặc định để ngời sử dụngchấp nhận hoặc thay đổi, bạn có thể viết:

name.setText("Trinh Dang Giang");

Một cách khác, nhng không thông dụng bằng là dùng dấu chấm phân cách đểnhận về một giá trị nh là một thành phần của đối tợng Chẳng hạn, Java cung cấp mộtlớp gọi là Dimension, mà các đối tợng của nó tợng trng cho kích cỡ (size) của các hình thù (shape) hai chiều Một kích cỡ nh vậy bao gồm chiều rộng và chiều cao Mỗi đối t-

ợng Dimension chứa các giá trị width và height (kiểu int) mà chúng ta có thể nhận

đợc sử dụng một dấu chấm phân cách Về mặt kỹ thuật, các giá trị này đợc gọi là các

biến thể hiện (instance variable) của Dimension, do mối đối tợng kiểu Dimension đều

có chúng; chúng tôi sẽ giải thích về các biến thể hiện trong chơng V

Lớp String

Trang 14

Một lớp quan trọng, đặc biệt hữu dụng và là thành phần của hệ thống Java, đó làlớp String Thứ nhất, không nh tất cả những lớp khác, ở đó các đối tợng chỉ có thể đợctạo ra bằng cách sử dụng new, các đối tợng String đợc tạo theo cách viết String nhthông thờng – một chuỗi các ký tự đợc bao bởi hai dâú nháy kép – nh chúng ta đãtừng vài lần sử dụng Thứ hai, có một toán tử có thể đợc dùng trên các đối tợng String,

đó là toán tử + Nếu t1 và t2 là những xâu (string), thì t1 + t2 là xâu viết liên tiếp

t1 rồi đến t2:

String t1 = "To be",

t2 = "or not to be.";

System.out.print(t1 + t2); // To be or not to be.

Thực ra chúng ta đã từng sử dụng toán tử ghép chuỗi (concatenation) này trong

một vài các điều lệnh print trớc đây Nếu n là một biến int, t1+n sẽ chuyển đổi n

thành một chuỗi rồi ghép nối hai chuỗi với nhau (đây là một trờng hợp khác mà ở đóJava không kén cá chọn canh giữa những kiểu dữ liệu khác nhau nh thờng lệ)

Các xâu cũng có những phơng thức khác, chẳng hạn nh length, có sử dụng dấuchấm phân cách, trả về một số nguyên là số lợng các ký tự trong xâu (kể cả dấu cách) Chúng tôi đã nhấn mạnh về

Phơng thức lớp và biến lớp

Nhắc lại rằng lớp Mouse trong chơng I cho phép có những phơng thức lớp, nh

Mouse.howManyLeg() Đó là những phơng thức không liên kết với một đối tợng cụ thểnào, mà là với tất cả các đối tợng Mouse nói chung Tơng tự nh vậy, nhiều lớp địnhnghĩa sẵn của Java cung cấp những phơng thức lớp Một ví dụ là phơng thức parseInt;

đó là một phơng thức lớp của lớp Integer (Bạn không đợc nhầm lẫn với kiểu nguyênthuỷ int, mặc dù cả hai đều liên quan tới “các số nguyên” mà chúng ta đã biết.) Chú ýdạng mà chúng ta kích hoạt phơng thức này, Integer.parseInt() Cách sử dụng dấuchấm phân cách ở đây hoàn toàn khác với khi sử dụng để kích hoạt các phơng thức lớp:

Integer là một lớp chứ không phải là một đối tợng.

Cũng giống nh việc các đối tợng có các liên kết với các gía trị gọi là biến thể hiện(nh width và height trong các đối tợng Dimension), các lớp có các liên kết với cácgiá trị gọi là biến lớp Các phơng thức lớp và các biến lớp không quan trọng bằng cácphơng thức thể hiện và các biến thể hiện, vì vậy chúng tôi sẽ giải thích đầy đủ về chúngtrong chơng VIII

o.meth(các tham số); nhận một gía trị của biến ivar bằng cách viết o.ivar

Hoàn toàn tơng tự, các lớp cũng có các phơng thức riêng (các phơng thức lớp) vàcác biến riêng (các biến lớp) của mình Gọi phơng thức cmeth bằng cách viết

C.cmeth(các tham số); nhận giá trị của biến cvar bằng cách viết C.cvar Chú ý rằng

Trang 15

trong các lời gọi này, C thực sự là một lớp, chứ không phải là một đối tợng, vì vậy một

phơng thức lớp có thể đợc gọi hay một biến lớp có thể đợc sử dụng ngay cả khi không

có một đối tợng nào của lớp đợc tạo ra

Các kiểu mẫu (prototypes)

Khi trình diện các phơng thức mới, thật là có ích khi bạn định danh kiểu của cáctham số và giá trị trả về, cũng nh chỉ ra rằng đó là phơng thức thể hiện hay phơng thứclớp Với kiểu mẫu cho các phơng thức lớp, chúng ta sử dụng một dấu chấm phân cáchgiữa tên lớp và tên phơng thức, nh khi dùng để kích hoạt chúng Chẳng hạn:

điều lệnh gán), cũng nh các điều lệnh xuất dữ liệu

Các chơng trinh Java luôn luôn bao gồm các điều lệnh đợc thực thi liên tiếp nhau(one after another) Có rất nhiều điều lệnh hơn là những điều lệnh mà chúng ta đã biết.Chẳng hạn,

Trang 16

Chơng III Applet

Hầu hết những độc giả của cuốn sách này đều quen thuộc với World Wide Web.Bạn dùng nó mỗi khi sử dụng một trình duyệt Web, nh NCSA Mosaic, NetscapeCommunicator,IE,…Các trình duyệt đa bạn tới thăm những trang home page (còn gọi là

Web page) đựơc cài đặt bởi những ngời sử dụng khác trên những máy tính khác trênWeb Những trang này chứa các văn bản và hình ảnh, và đôi khi, cả âm thanh và hình

ảnh sinh động Máy tính cung cấp những home page gọi là máy chủ (server), hoặc httpserver, cho hypetext transport protocol server Máy tính của bạn là máy khách (client),mặc dù, có thể nó đồng thời là máy chủ của những máy khách khác Mỗi home page cómột địa chỉ, chỉ ra server mà nó đợc định vị và nơi đợc định vị trên server Địa chỉ nàygọi là URL (uniform resource locator)

Các home page đợc viết bằng một ngôn ngữ gọi là ngôn ngữ đánh dấu liên vănbản (HTML), là ngôn ngữ không giống Java một chút nào Các trang HTML đợc viếttrong một file giống nh các chơng trình Java Chúng không đợc biên dịch, song khi mộtmáy tính trên Web yêu cầu một tài liệu HTML, nó nhận đợc văn bản trên file và dùng

nó để tạo ra hình ảnh trên bộ hiển thị của trình duyệt Trong phần sau, chúng tôi cungcấp cho bạn một tour nhanh về ngôn ngữ này, đủ để bạn có thể tạo một home page đơngiản với văn bản và hình ảnh

HTML

Chúng tôi sẽ hớng dẫn bạn cách viết những tài liệu HTML đơn giản với văn bản

và hình ảnh Nếu cảm thấy thích thú với ngôn ngữ này, bạn có thể tìm đọc một cuốnsách chuyên về lập trình HTML, hoặc xem nguồn của các trang Web mà bạn lớt qua.Tất cả các trình duyệt đều cung cấp một cách để làm việc này

Trang Web đơn giản nhất chỉ chứa văn bản Sau đây là một ví dụ:

7 My name is Napoleon I, Emperor of France.

8 I’m just learning HTML, so please be patient.

9.

10 </BODY>

11 </HTML>

Trang 17

Đó là chỗ của Java Java có thể đợc sử dụng để viết các applet, là những chơng

trình máy tính chạy trên cửa sổ của một trang Web

“Hello!”

Chơng trình Java cho một Applet luôn có một dạng đặc biệt Bạn sẽ nhận thấyrằng các chơng trình ứng dụng và các Applet không thực sự khác nhau nhiều lắm Tuynhiên, chúng đòi hỏi một số sự thay đổi và vì vậy, trong những Applet nhỏ bạn có thểthấy chúng hơi lạ mắt một chút

Cũng giống nh các ứng dụng, một Applet có tên trùng với tên của file chơng trìngchứa nó (ngoại trừ phần mở rộng .java) File này chứa một lớp với tên đã đợc chỉ ra.Tuy nhiên, lớp này không có một phơng thức main, thay vào đó là một phơng thức init

Trang 18

8 add(new Label("Hello!"));

9 }

10 }

Rõ ràng có một số khác biệt so với chơng trình Hello trớc đây:

• Các dòng 1, 2 và 3 là hoàn toàn mới Sau này bạn sẽ thấy chúng sẽ luôn

đ-ợc bao hàm vào theo cách nh vậy

• Dòng 4 có các từ mới là extends Applet Hai từ này luôn phải đợc bổsung vào sau tên của Applet Xem chơng 12

• Không có phơng thức main mà chỉ có phơng thức init Luôn luôn phải

nh vậy (Mặc dù chúng ta thờng thấy có cả những phơng thức khác nữa)

• Thay cho lời gọi phơng thức System.out.println là dòng lệnh add(new Label("Hello!")) Lable là một lớp đợc cung cấp cùng với trình biêndịch Java Dòng lệnh này tạo một đối tợng mới kiểu Label và bổ sung nóvào Applet, vì vậy sẽ đợc hiển thị trên cửa sổ Applet

Java API

Trong chơng II, chúng ta đã biết rằng Java đến cùng với những phơng thức đã đợc

định nghĩa sẵn nh println(String s) và Math.sqrt(double d) Chúng ta lại vừamới thấy thêm hai ví dụ nh vậy nữa: lớp Label và phơng thức add Các lớp và phơngthức đợc cung cấp cùng với trình biên dịch Java (hay bất kỳ trình biên dịch của bất kỳngôn ngữ nào) đợc gọi là giao diện lập trình ứng dụng (API – ApplicationProgramming Interface) Trong mọi trờng hợp, chúng đợc cung cấp để hỗ trợ cho việclập trình các chơng trình ứng dụng và các Applet

Java API gồm có một tập hợp rất lớn các lớp (vài trăm), mỗi lớp với nhiều phơngthức, một số các giao diện (interface) và ngoại lệ (exception) Tất cả chúng đợc tổ chứctrong các gói (package) Hiện nay (1998 – ngời dịch) Java API bao gồm khoảng hơn

20 gói Chúng bao gồm các lớp và phơng thức để làm mọi chuyện từ việc sinh số ngẫunhiên tới việc tải các file âm thanh và truy cập các site trên Internet Tuy nhiên, chúng

ta chỉ sử dụng một số nhỏ các gói này (Mà trên thực tế chỉ là bốn gói java.applet,

java.awt, java.awt.event và java.lang.) Ba trong bốn gói này đã xuất hiện trong

điều lệnh import trong chơng trình của chúng ta Các điều lệnh import này đợc mô tả

để chỉ ra rằng tất cả các lớp trong các gói này là sẵn có cho chơng trình của chúng ta

Ba gói này chứa mọi thứ cần thiết cho tất cả các Applet trong cuốn sách này, vì thế chỉcần ba điều lệnh import nh trên là đủ cho mọi Applet

Có một nguyên nhân giải thích tại sao chúng ta không cần sử dụng điều lệnh

import cho gói java.lang Đây là gói duy nhất đợc nhập tự động vào tất cả các chơngtrình Java; việc viết điều lệnh import java.lang.* là không cần thiết Gói này chứanhững lớp nh Math và String, là những lớp cơ bản mà mọi ngời thờng xuyên sử dụng,bất kể khi viết một chơng trình ứng dụng hay một Applet

Bản thân gói java.applet chứa lớp Applet , là lớp đợc tham chiếu tới trongcụm từ extends Applet Cụm từ này biểu thị rằng lớp đợc định nghĩa cho Applet (nhHelloApplet) là một lớp con (subclass) của lớp Applet Điều này sẽ đợc giải thích ở ch-

ơng 12 Tất cả vấn đề bây giờ là nó cho phép chúng ta sử dụng một phơng thức Applet:

add

Trang 19

Gói java.awt lại là chuyện khác Nó chứa nhiều lớp rất hữu dụng cho nhữngApplet của chúng ta Awt là viết tắt của abstract windowing toolkit (Bộ công cụ cửa sổtrừu tợng) ở đây chúng ta cần làm quen với một thuật ngữ mới là giao diện đồ hoạ ngời

sử dụng (GUI – graphical user interface) Các GUI nh button, menu, text,…mà mỗitrong chúng có một lớp liên quan Chẳng hạn, lớp Button; một button đợc định vị trênmột Applet bằng cách tạo một đối tợng Button và bổ sung vào Applet Ví dụ, bạn sẽ bổsung các button Yes và No vào một Applet bằng các dòng mã sau trong phơng thức

init:

Button yesButton = new Button("Yes");

Button noButton = new Button("no");

TextField new Textfield(10) Tạo một trờng văn bản khả

soạn thảo với độ rộng 10

ký tự

Button new Button("push me") Tạo một button với nhãn

push me

Label new Label("intro") Tạo một nhãn intro

Bảng 3.1: Một số lớp trong góijava.awt.

Trớc khi bắt đầu với Applet tiếp theo, chúng tôi cần ghi chú một chút về cách màchúng ta sẽ dùng để thực thi các Applet Kể từ bây giờ trở đi, chúng ta sẽ không chạycác Applet trong những trang Web mà sử dụng một chơng trình gọi là appletviewer

Đó là một trình duyệt chuyên dụng chỉ hiểu một số nhỏ các tài liệu HTML – văn bản

và các thẻ APPLET Tài liệu HTML đơn giản này (TempApplet.html) dùng để hiển thịApplet TempApplet (Xem mã của Applet này ở phần sau.)

<HTML>

<HEAD>

Trang 20

appletviewer TempApplet.html

Add(yesButton);

Việc dùng trình appletviewer sẽ làm giảm thời gian và bộ nhớ hơn so với sửdụng một trình duyệt Kể từ bây giờ chúng ta sẽ luôn hiển thị các Applet bằng tiện íchnày Chúng tôi không cần chỉ ra các tài liệu HTML tơng ứng với các Applet mà chỉcung cấp các thuộc tính HEIGHT, WIDTH trong các thẻ APPLET mà chúng tôi sử dụng,

để bạn có thể chắc chắn rằng các Applet của bạn trông giống nh những hình minh hoạtrong cuốn sách này

Về sơ lợc, các thủ tục để viết và chạy một Applet có thể tóm tắt nh sau (giả sử têncủa Applet là GreatFun)

1 Viết Applet Trong một file có tên GreatFun.java, viết các điều lệnh

import và sau đó định nghĩa lớp GreatFun Lớp này phải có một phơngthức init

public void init () ( )

3 Để file GreatFun.class trong cùng th mục với home page của bạn

4 Bổ sung cặp thẻ sau vào home page của bạn:

<APPLET CODE = "GreatFun.class" WIDTH = integer HEIGHT = integer>

Trang 21

tFahr = new TextField(10);

lCent = new Label("I’’ll tell you what that is in C");

// Tæ chøc ba thµnh phÇn

add(new Label("Please type the temperature (deg F):"));

add(tFahr);

add(lCent);

Trang 23

Chơng IV tạo quyết định

Các chơng trình thờng phải quyết định thi hành giữa một số các hành động khácnhau Chẳng hạn, việc tính thuế bảo hiểm xã hội đợc tính theo 12,4 phần trăm thu nhập,nếu thu nhập không vợt quá $57.600, theo công thức sau:

Công thức này có thể biểu diễn bằng cú pháp Java nh sau:

57600 đợc thực hiện Chú ý rằng chỉ có một lệnh gán đợc thực thi mà thôi

Công thức nói trên đợc chèn vào ứng dụng hoàn thành dới đây:

Trang 24

15 tax = TAX_RATE * MAXIMUM_WAGES;

16 System.out.print ("Bảo hiểm xã hội của bạn là: $" + tax);

17 }

18 }

Một điều lệnh if chọn một trong hai phơng án thi hành dựa trên một điều kiện

đúng/sai nào đó Điều lệnh if là một điều lệnh Java đơn đợc chia thành hai phần khácnhau – từ khoá if tiếp theo là một điều kiện đợc đặt trong dấu ngoặc đơn và điều lệnh

sẽ đợc thực thi nếu điều kiện là đúng; từ khoá else đợc đặt tiếp theo cùng với điều lệnh

sẽ đợc thực thi nếu điều kiện là sai:

if (diều kiện)

điều lệnh (cho phơng án “thì”)

else

điều lệnh (cho phơng án “ngợc lại”)

Mỗi phơng án có thể là một điều lệnh đơn hoặc một điều lệnh phức hợp đợc baotrong cặp dấu ngoặc { } Chỉ có một phơng án chọn lựa đợc thực thi; phơng án cònlại sẽ đợc bỏ qua Nếu không có điều gì cần làm trong phơng án “else”, từ khóa else

Trang 25

You are aligible to vote.

sẽ đợc in ra nếu age lớn hơn hoặc bằng 18, còn nếu không (age <18), không cógì đợc thực thi

Mối phơng án trong điều lệnh if ở ví dụ tính bảo hiểm xã hội là cực kỳ đơn giản.Sau đây là một ví dụ về việc dùng các điều lệnh phức hợp trong các phơng án chọn lựa

Có hai số nguyên dơng, firstNumber và secondNumber, chúng ta sẽ tính thơng và số

d trong phép chia số lớn cho số bé:

if (firstNumber <= secondNumber)

{

quotient = secondNumber / firstNumber;

remainder = secondNumber % firstNumber;

}

else

{

quotient = firstNumber / secondNumber;

remainder = firstNumber % secondNumber;

(MINIMUM_WAGE <= wages) && (wages <= MAXIMUM_WAGE)

có nghĩa là

MINIMUM_WAGE ≤ wages ≤ MAXIMUM_WAGE

Các toán tử quan hệ có ý nghĩa toán học của chúng, còn các toán tử logic cần mộtvài giải thích Toán tử ! đặt trớc một biểu thức Boolean thực hiện phần bù cho gía trị củabiểu thức đó Toán tử && kết hợp hai biểu thức Boolean và chỉ đúng (true) trong trờnghợp cả hai biểu thức đều đúng Toán tử ||, một cách tơng tự, chỉ sai (false) trong trờnghợp cả hai biểu thức đều sai

Trang 26

To¸n häc Java ý nghÜa

B¶ng 4.2: C¸c to¸n tö Boolean trong Java.

Chóng ta cïng xem mét vÝ dô vÒ viÖc sö dông to¸n tö && vµ !

if (!(®iÒu kiÖn-1))

Trang 27

Chú ý rằng toán tử || cho giá trị true khi ít nhất một trong hai thành phần của nó

là true Điều đó không luôn có nghĩa là nó đại diện cho liên từ “hoặc” trong ngôn ngữhàng ngày; chúng ta dùng “hoặc” hàm ý loại trừ tình huống cả hai trờng hợp đều đúng(true.) Chẳng hạn, trong câu nói nổi tiếng của Patrick Henry, “Tự do hay là chết”, ý của

ông ta rõ ràng là không muốn chọn cả hai Vì lý do này toán tử || đợc gọi là hoặc baogồm (inclusive or), còn toán tử ^đợc gọi là hoặc loại trừ, vì nó chỉ đúng trong trờng hợpmột và chỉ một thành phần của nó là đúng

Chúng ta đã đề cập đến quy tắc u tiên đối với các toán tử số học trong chơng II.Các luật này cần phải đợc mở rộng đối với các toán tử Boolean (Xem bảng 4.3) Chú ýrằng trong các biểu thức không có dấu ngoặc đơn song có nhiều hơn một toán tử cùngmức u tiên thì các mức u tiên này đợc đánh giá từ trái qua phải Tuy vậy, tốt hơn hết lànên sử dụng dấu ngoặc Phong cách này giúp cho máy tính và những ngời khác có cơhội hiểu đợc dụng ý lập trình của bạn

Biểu thức:

(MINIMUM_WAGE ≤ wages ≤ MAXIMUM_WAGE)

sẽ trả về một lỗi biên dịch trong Java Nh mô tả trong phần chú thích của bảng 4.3, các toán tử có cùng mức u tiên sẽ đợc

đánh giá từ trái qua phải Do vậy biểu thức trên có nghĩa là:

((MINIMUM_WAGE ≤ wages) ≤ MAXIMUM_WAGE)

gía trị của điều kiện (MINIMUM_WAGE wages) là một biểu thức Boolean, trong khi giá trị của MAXIMUM_WAGE là một biểu thức nguyên, và một biểu thức Boolean không thể đợc đem so sánh với một biểu thức nguyên Để kết hợp những toán tử quan hệ một cách đúng đắn, bạn phải sử dụng các toán tử Boolean:

(MINIMUM_WAGE ≤ wages) && (wages ≤ MAXIMUM_WAGE)

Không có dấu ngoặc đơn, các toán tử đợc u tiên theo thứ tự sau:

Trang 28

6 &&

Các toán tử đồng mức u tiên đợc đánh giá từ trái qua phải

Bảng 4.3 : Các quy tắc u tiên mở rộng với các toán tử số học, quan hệ và Boolean.

Xem thêm phụ lục C

Chúng tôi đã cảnh báo với bạn rằng các số có kiểu double không phải luôn luôn đợc trình diễn chính xác trong máy tính Hậu quả nghiêm trọng của nó là các toán tử quan hệ có thể gây ra những kết quả không đợc mong đợi Chẳng hạn, biểu thức quan hệ:

1.0/5.0 +1.0/5.0 +1.0/5.0 - 0.6 == 0.0

có gía trị false.

Việc đánh giá các toán tử Boolean && và || có một chút phức tạp Biểu thức A

&& B đợc đánh giá nh sau: đầu tiên A đợc đánh giá; nếu A là true, thì B đợc đánh giá

và kết quả của biểu thức sẽ là true nếu B là true hoặc ngợc lại Tuy nhiên, nếu A làfalse, thì không cần phải đánh giá Bnữa, bởi vì A && Bphải là false bất kể giá trị của B

là gì: Bkhông đợc đánh giá Điều này cho phép chúng ta viết, chẳng hạn nh sau:

B phải là true bất kể giá trị của B là gì: B không đợc đánh giá

Bạn phải nhớ rằng dấu bằng đơn ( = ) đợc sử dụng trong một

điều lệnh gán và một dấu bằng kép ( == ) là một toán tử quan

hệ Một lỗi thờng xảy ra là bạn viết nh sau:

Trang 29

báo nào đợc sinh ra!

Đôi khi những biểu thức Boolean phức tạp hơn cần đợc dùng để diễn tả một điềukiện Hãy xem xét tình huống sau đây Cho một năm, một tháng và một ngày trongtháng đó, tìm số ngày đã trôi qua từ đầu năm tới ngày đã cho

dayNumber = (month - 1) * 31 + day;

Trang 30

if (((year % 4) == 0) && ((year % 100) != 0))

Giá trị của biểu thức quyết định

Tạo quyết định gỡ rối

Trang 31

và gỡ rối cho các phần nhỏ này, sau đó tập hợp chúng lại thành một chơng trình duynhất Đóng gói trong Java là một kỹ thuật mạnh tuyệt đối.

Lập trình hớng đối tợng

Lập trình hớng đối tợng hỗ trợ một cách nhìn về những chơng trình nh là tập hợpcủa những đối tợng tơng tác lẫn nhau Quan điểm nền tảng về một đối tợng là nó đợcbao gồm bởi những giá trị gọi là các thuộc tính (atributes) hoặc biến thể hiện (instancevariables), và các thao tác thực hiện trên các giá trị này, đợc gọi là các phơng thức thểhiện (instance methods.)

Một đối tợng là một tập hợp các thuộc tính và thao tác

• Một đối tợng đóng gói (encapsulates) các giá trị dữ liệu trong mộtthực thể đơn nhất

• Cách ứng xử của đối tợng (object’s behavior) thờng đựoc sử dụng lại(reused) trong những tình huống khác nhau

• Một đối tợng thờng đợc hình thành từ những đối tợng khả dẫn xuất.Chúng ta sẽ khảo sát cơ chế thừa kế (inheritance) trong chơng XII.Tất cả những chơng trình trớc đây của chúng ta đều rất đơn giản với những kiểudữ liệu quen thuộc- các số nguyên và số dấu phẩy động Các dữ liệu này đợc thao táctrên các hàm số học quen thuộc, đợc in ra bởi phơng thức System.out.print, đợc lutrong các biến, đợc truyền vào các phơng thức, và đợc trả về nh là kết quả của lời gọiphơng thức

Song thế giới thì đầy rẫu những kiểu khác nhau của dữ liệu mà Java không thểcung cấp tất cả chúng Vì lý do này một trong những công việc chính trong lập trình là

định nghĩa các kiểu đối tợng mới

Trang 32

method definitions

}

Java quy ớc tên của lớp đợc viết bằng những chữ hoa và thờng, với chữ cái đầutiên đợc viết hoa Phần mô tả (declarations) bao gồm các hằng tợng trng (symbolicconstants) và các biến thể hiện, phần kiến tạo (constructor) chứa đoạn mã tạo lập vàkhởi đầu các đối tợng, và phần định nghĩa phơng thức (method) chứa mã thao tác các

đối tợng này Các phần định nghĩa đợc quy ớc viết theo thứ tự trên, tuy nhiên Java sẽchấp nhận chúng theo một thứ tự bất kỳ

Trong chơng này, chúng tôi giới thiệu các lớp và các thành phần của chúng: cácphơng thức kiến tạo, các biến thể hiện, và các phơng thc Chúng ta bắt đầu với một thảoluận về các phơng thức, sau đó xem xét vài ví dụ về các lớp Chúng ta cũng sẽ thảo luận

về tính khả biến (mutability) và bất biến (immutability) của dữ liệu

Phơng thức

Sự đóng gói mã đợc gọi là phơng thức Nh bạn đã biết, có hai loại phơng thức:

ph-ơng thức thể hiện (instance methods) và phph-ơng thức lớp (class methods) Một ví dụ vềphơng thức lớp là Math.sqrt; chú ý rằng nó đợc kích hoạt bằng cách lấy tên của lớp kếthợp với tên của phơng thức Các phơng thức lớp không gia nhập với một đối tợng riêngbiệt nào Một ví dụ về phơng thức thể hiện là phơng thức setText của lớp TextField.Một ví dụ về lời gọi phơng thức này là tFahr.setText(fahr + ""), trong đó tFahr

là một đối tợng của kiểu TextField

Cũng nh việc các phơng thức lớp và phơng thức thể hiện đợc gọi theo những cáchkhác nhau, chúng cũng đợc định nghĩa khác nhau Thực ra, bạn đã từng định nghĩa cácphơng thức lớp rồi: main luôn luôn là một phơng thức lớp Tuy nhiên, trong chơng này,chúng ta chỉ khảo sát về những phơng thức thể hiện Các phơng thức lớp (và các biếnlớp) sẽ đợc xem xét đầy đủ ở chơng VIII ở đây chúng tôi đa ra một giới thiệu tóm tắt

về các phơng thức thể hiện; phần chi tiết xin xem ở phần sau, sau khi bạn đã biết cách

Trang 33

ý tởng cơ sở là một phơng thức chứa một chuỗi các điều lệnh sẽ đợc thực thi khiphơng thức đợc kích hoạt Các điều lệnh này có thể bao hàm các lời gọi tới những ph-

ơng thức khác Khi một phơng thức f gọi một phơng thức g, Java bắt đầu thực thi các

điều lệnh của g, song nhớ rằng đấy là giai đoạn trung gian trong quá trình thực thi f.Khi g hoàn thành, nó trở về (returns) tiếp tục thực thi f, bắt đầu ở nơi nó rời bỏ Xemhình 5.1

Hầu hết các phơng thức chúng ta đã biết đều trả về một giá trị nh là kết quả thựcthi của chúng Tuy nhiên, đôi khi một phơng thức không trả về một giá trị nào cả, vàchúng ta gọi trờng hợp này là có kiểu trả về là void Sự phân biệt giữa hai trờng hợp làrất quan trọng Một lời gọi tới một phơng thức không có gía trị trả về (void) lập thànhmột điều lệnh Java và có thể đợc thực thi trong bất kỳ một ngữ cảnh (context) nào màmột điều lệnh Java có thể đợc sử dụng Một lời gọi tới một phơng thức có trả về một giátrị lập thành một giá trị của kiểu trả về bởi phong thức (int, double, ) và có thể đợcdùng trong bất kỳ một ngữ cảnh nào mà một giá trị Java của kiểu đó có thể đợc sửdụng, nh trong một biểu thức

Để trả về một giá trị từ một phơng thức, sử dụng điều lệnh:

return value;

Khi điều lệnh này đợc thực thi, nó trở về từ phơng thức và giá trị value đợc trả về.Chẳng hạn, giả sử lớp Mouse có một phơng thức tellCol trả về số hiệu cột ở đó hiệnthời chuột đợc định vị (Giả thiết rằng vị trí của chuột đợc đánh số bởi các hàng và cột)

Nó cần đợc định nghĩa trong lớp Mouse nh sau:

boolean checkWall (int dir, int col, int row)

với 3 tham số hình thức dir, col và row, kiểu int

Khi một phơng thức đợc gọi, lời gọi sẽ cung cấp các giá trị cho mỗi tham số Cácgiá trị này đợc gọi là các tham số thực sự (argument.) Chẳng hạn, nếu trickyMaze làmột đối tợng Maze, checkWall có thể đợc gọi nh sau:

trickMaze.checkWall (0,3,2);

Trang 34

Các tham số thực sự đợc gán cho các tham số hình thức và sau đó các điều lệnhtrong phơng thức đợc thực thi Sự tơng ứng về số tham số, thứ tự và kiểu tham số giữacác tham số hình thức và các tham số thực sự là bắt buộc Tuy nhiên, quy tắc này có cácngoại lệ; chẳng hạn, một giá trị int sẽ đợc tự động chuyển thành một giá trị double,nếu cần thiết.

Các phơng thức thể hiện cũng có thể có các biến địa phơng (local variables) Cácbiến này đợc mô tả bên trong phơng thức, nh các biến chúng ta đã định nghĩa trong ph-

ơng thức main

Lớp thực sự đầu tiên mà chúng tôi chọn để giới thiệu có kiểu dữ liệu quen thuộcvới bạn, đó là giờ và phút trong một ngày Bạn có thể đoán đợc rằng một gía trị của kiểu

Time nh là hai số nguyên : hour thuộc đoạn [0,23] và minute thuộc đoạn [0,59] Giả

sử rằng sếp của bạn yêu cầu bạn thực hiện một lớp Time có các phơng thức sau:

• Time addMinute(int m) Cộng m phút vào một đối tợng Time

• void printTime() In gía trị của một đối tợng Time

• Time(int h, int m) Phơng thức kiến tạo, khởi tạo một đối tợng Time mớitại h giờ và mphút

Các phơng thức và phơng thức kiến tạo của lớp lập thành giao diện (interface) củalớp đó Lý do để sếp của bạn yêu cầu bạn thiết kế giao diện này có thể là anh ta đã đặthàng văn phòng Payroll viết một chơng trình mới sẽ sử dụng chúng

Dạng toàn thể của Time là:

ta có thể bàn luận về hai khía cạnh này một cách hoàn toàn riêng rẽ!

Các khách hàng của Time ( Time ’s Clients)

Các phơng thức sử dụng lớp Timeđợc gọi là các khách hàng (client) của nó

Trang 35

Điều quan trọng là bạn phải nhận thức đợc rõ ràng những vai trò riêng của các lớp

và các khách hàng Các lớp có những quyền hạn (rights) xác định, cũng nh các kháchhàng Hình 5.2 liệt kê một vài quyền hạn hữu ích của chúng

Giả sử có lớp Time với giao diện nh trên, một biến dawn có thể đợc mô tả nh sau:

Quyền hạn của khách hàng Quyền hạn của lớp

Mô tả các biến của kiểu lớp Định nghĩa giao diện chung cho lớp

Tạo các thể hiện của lớp sử dụng các

ph-ơng thức kiến tạo lớp Che giấu mọi chi tiết của sự thực thi đốivới các khách hàng.Gửi thông điệp tới các thể hiện của lớp

bằng cách kích hoạt các phơng thức thể

hiện đợc định nghĩa trong lớp

Bảo vệ các dữ liệu “nội bộ” (internal data)khỏi sự truy cập từ các khách hàng

Biết giao diện chung của lớp (tên các

ph-ơng thức thể hiện, số và kiểu các tham số,

các kiểu giá trị trả về.)

Thay đổi chi tiết của việc thực thi mọilúc, miễn là những phần còn lại của giaodiện chung không bị ảnh hởng

Biết đợc các phơng thức thể hiện nào sửa

đổi (alter, mutate) thể hiện

Hình 5.3: Quyền hạn của khách hàng và lớp

dawn = new Time (5,35)

Điều lệnh này kích hoạt phơng thức kiến tạo Time, tạo một hộp cho một đối tợngkiểu Time và điền vào chúng giá trị 5:35 A.M

Câu lệnh gán khiến cho biến dawn chứa đối tợng mới đợc tạo

Trên thực tế, có một sự khác biệt quan trọng giữa các đối tợng và các gía trị đơngiản nh các số nguyên Các biến kiểu int hay double chứa các số nguyên hay dấu phẩy

động Các biến kiểu lớp nh Time chỉ chứa tham chiếu (references) tới các đối tợng; cònbản thân đối tợng thì đợc định vị ở một nơi khác (gọi là heap)

Có thể viết các điều lệnh mô tả và kiến tạo trên cùng một dòng:

Time dawn = new Time (5,35);

Mô tả một biến của một lớp đợc định nghĩa bởi ngời sử dụng chỉ đơn thuần xác định một tham chiếu tới một đối tợng kiểu lớp đó chứ không kiến tạo hay khởi tạo đối tợng Các đối tợng chỉ có thể đợc kiến tạo bằng cách gọi một trong những phơng thức kiến tạo của lớp

Trang 36

Sau khi tạo các đối tợng của lớp, khách hàng có thể kích hoạt các phơng thức thểhiện của lớp, sử dụng dấu chấm phân cách:

Object Method (arguments)

Trong ngôn ngữ hớng đối tợng, việc này đợc mệnh danh là gửi một thông điệp(message) tới một đối tợng, và đối tợng đợc gọi là ngời nhận thông điệp (receiver).Chẳng hạn, hai lời gọi phơng thức hợp lệ của lớp Time:

Time dusk = dawn.addMinute(60*12);

dawn

Hình 5.5: Biến dawn sau khi khởi tạo

hour 5 minute 35 dawn

addMinute(60*12)

Trang 37

class Time

{

private int hour, minute;

public Time(int h, int m)

else if (hour == 12) && (minute == 0)

System.out.print("Gi÷a tra!");

else

{

Ngày đăng: 03/08/2014, 00:11

HÌNH ẢNH LIÊN QUAN

Hình 1.2: Một thể hiện của lớp  Mouse . - Tổng quan về Lập Trình Java
Hình 1.2 Một thể hiện của lớp Mouse (Trang 5)
Bảng 2.1: Các từ khoá trong Java. - Tổng quan về Lập Trình Java
Bảng 2.1 Các từ khoá trong Java (Trang 11)
Bảng 4.1: Các toán tử quan hệ trong Java - Tổng quan về Lập Trình Java
Bảng 4.1 Các toán tử quan hệ trong Java (Trang 26)
Bảng 4.2: Các toán tử Boolean trong Java. - Tổng quan về Lập Trình Java
Bảng 4.2 Các toán tử Boolean trong Java (Trang 26)
Hình 5.5: Biến dawn sau khi khởi tạo - Tổng quan về Lập Trình Java
Hình 5.5 Biến dawn sau khi khởi tạo (Trang 36)
Hình 8.1: Lớp và các biến lớp  a ,  b ; các biến thể hiện  x ,  y . - Tổng quan về Lập Trình Java
Hình 8.1 Lớp và các biến lớp a , b ; các biến thể hiện x , y (Trang 47)
Bảng 12.1: Một số gói hữu dụng đợc định nghĩa sẵn trong Java. - Tổng quan về Lập Trình Java
Bảng 12.1 Một số gói hữu dụng đợc định nghĩa sẵn trong Java (Trang 55)
Bảng A.1: Các kiểu dữ liệu nguyên thuỷ. - Tổng quan về Lập Trình Java
ng A.1: Các kiểu dữ liệu nguyên thuỷ (Trang 64)
Bảng A.2: Các toán tử cấp bit. - Tổng quan về Lập Trình Java
ng A.2: Các toán tử cấp bit (Trang 66)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w