Top Banner
Bài 0 /* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí" trên diễn đàn Android.Vn, bạn có thể vào đây đọc để hiểu hơn về khóa học và tham gia ngay cùng mọi người */ Tiêu đề bài viết không phải để nói Java là số 1 vì bất cứ ngôn ngữ lập trình nào cũng có ưu và nhược điểm, chúng ta cần có cái nhìn thật khách quan về Java để có quyết định đúng đắn, tùy theo từng cá nhân! Đặc điểm ngôn ngữ Java, Java có thể làm được những gì và nhu cầu việc làm của lập trình viên Java??? Dưới đây là một chút ít thông tin mình tổng hợp từ trên mạng, các bạn sau khi đọc bài viết này xong, nên tìm hiểu thêm để tìm ra ý kiến của cá nhân, và xác định có theo Java không? Chọn thì theo mảng nào? Vì Java rất rộng. Mình mong các bạn biết rõ những thông tin đó để yên tâm chọn Java 1, Đặc điểm của Java - Đơn giản, trong sáng, kiến trúc thiết kế rất tốt và còn đang phát triển mạnh mẽ. - Hướng đối tượng. - Khắc phục nhiều nhược điểm của các ngôn ngữ trước đó. - Độc lập phần cứng và hệ điều hành, lập trình 1 lần, chạy được trên nhiều platform khác nhau.
176

Basic Java - Android.vn

Feb 08, 2016

Download

Documents

fukoff

Free course from Android.vn
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Basic Java - Android.vn

Bài 0

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn

Phí" trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Tiêu đề bài viết không phải để nói Java là số 1 vì bất cứ ngôn ngữ lập trình nào cũng có ưu và nhược

điểm, chúng ta cần có cái nhìn thật khách quan về Java để có quyết định đúng đắn, tùy theo từng cá

nhân!

Đặc điểm ngôn ngữ Java, Java có thể làm được những gì

và nhu cầu việc làm của lập trình viên Java???

Dưới đây là một chút ít thông tin mình tổng hợp từ trên mạng, các bạn sau khi đọc bài viết này xong,

nên tìm hiểu thêm để tìm ra ý kiến của cá nhân, và xác định có theo Java không? Chọn thì theo mảng

nào? Vì Java rất rộng. Mình mong các bạn biết rõ những thông tin đó để yên tâm chọn Java

1, Đặc điểm của Java

- Đơn giản, trong sáng, kiến trúc thiết kế rất tốt và còn đang phát triển mạnh mẽ.

- Hướng đối tượng.

- Khắc phục nhiều nhược điểm của các ngôn ngữ trước đó.

- Độc lập phần cứng và hệ điều hành, lập trình 1 lần, chạy được trên nhiều platform khác nhau.

Page 2: Basic Java - Android.vn

Vd: 1 chương trình bạn lập trình bằng Java, code1 lần, nhưng cũng có thể chạy trên Window, linux,

.v.v. Chỉ cần hệ thống đó có máy ảo Java là đều chạy được. Như vậy sẽ tiết kiệm công sức cho lập

trình viên, cũng như có thể phục vụ được các hệ thống phân tán, có nhiều máy với phần cứng khác

nhau, hệ điều hành khác nhau

- Bảo mật .

- Phân tán. (Phần thứ 3 mình viết rồi đấy)

- Đa luồng.

- Động.

- Cộng đồng hỗ trợ mạnh, do là công nghệ mở.

(Mình chỉ ghi tóm tắt, gạch đầu dòng, với những bạn mới bắt đầu, nên google thêm với những từ

khóa trên nhé!)

- Java thường bị coi là chậm, nhưng gần đây, tốc độ chương trình java đã và đang được cải thiện

đáng kể!

2, Java thường dùng làm những gì?

- Java có thể dùng viết lên các web site lớn, các hệ thống phân tán, các chương trình đa nền tảng.

- Trong thế giới di động, đầu tiên phải kể đến là những úng dụng, game java trên các điện thoại

feature phone có lẽ quá quen thuộc với các bạn (file cài dạng *.jar)

- Hiện tại, sang thế hệ smart phone, thì từ khi hệ điều hành di động Android lên ngôi, những ứng

dụng, game trên Android hầu hết đều được viết bằng Java - SDK (file cài dạng *.apk)

Page 3: Basic Java - Android.vn

- Và còn nhiều hơn nữa

3, Nhu cầu việc làm lập trình viên Java

- Có thể nói nếu bạn đủ khả năng, thì không lo thiếu việc, thu nhập cũng không thấp

- Mình vừa lên google tìm với từ khóa “tuyển lập trình viên java”, dưới đây là vài kết quả mới đăng

mình tìm thấy, vẫn còn hạn nộp hồ sơ (ngày tìm : 28/5/2013)

Page 4: Basic Java - Android.vn

Bạn cũng có thể tự tìm kiếm google với từ khóa “tuyển lập trình viên di động” hoặc “tuyển lập trình

viên Android”! để có cái nhìn tổng quan hơn về công việc liên quan tới Java

Page 5: Basic Java - Android.vn

Bài viết tổng hợp từ cá nhân mình, có thể còn thiếu xót, ai có kinh nghiệm, chia sẻ thêm cùng

mọi người

Page 7: Basic Java - Android.vn

Để bắt đầu học lập trình Java, cơ bản thì máy bạn cần cài bộ JDK và một IDE , chú ý là bạn hãy đọc hết bài rồi mới download nhé!

1, Bộ cài JDK và giới thiệu máy ảo Java (JVM): JavaDevelopmentKit (JDK - Bộ công cụ cho người phát triển applet Java hay những ứng dụng Java - bộ công cụ này được

phát hành miễn phí gồm có trình biên dịch, trình thông dịch, trình giúp sửa lỗi (debugger, trình chạy applet và tài liệu nghiên

cứu.

Dowload bộ cài JDK tại đây

Bạn chọn ” Accept License Agreement “ rồi chọn phiên bản phù hợp với hệ điều hành bạn đang dùng.

- Còn về máy ảo Java, mình sẽ minh họa bằng 1 ví dụ ngoài lề như này để các bạn dễ hiểu: Chẳng hạn bạn là người chỉ biết tiếng Việt, nhưng bạn muốn giao tiếp với toàn thế giới, như vậy, hoặc là bạn cần một người phiên dịch hiểu biết tất tần tật các thứ tiếng trên thế giới hoặc là bạn cần tập hợp những người phiên dịch, mỗi người hiểu một thứ tiếng và có thể dịch được tiếng Việt sang tiếng của họ, bạn đi đến nước nào thì liên hệ và giúp bạn giao tiếp . Tất nhiên, cách thứ nhất là không khả thi, chắc chắn bạn sẽ phải chọn cách 2 thôi.

- Và máy ảo Java cũng vậy, nó là tập hợp những người “phiên dịch” – tức là các bộ cài trên từng thiết bị, từng hệ điều hành, có bản cho Linux, bản cho Window, bản cho máy tính, bản cho mobile, .v.v…v. Nhưng người ta chỉ cần gọi chung chúng là máy ảo Java là đủ. Chương trình Java bạn viết ra, nhờ có máy ảo Java, nó có thể chạy được trên nhiều nền tảng khác nhau, không phụ thuộc vào phần cứng, hệ điều hành, chỉ cần môi trường đó cài máy ảo Java là có thể sử dụng được chương trình của bạn. Đây là cái mà những nhà phát triển Java luôn hướng tới và cũng là một ưu điểm của Java mà mình đã viết ở bài mở đầu, theo mình, nó có lẽ là ưu điểm tuyệt vời nhất của Java.

Page 8: Basic Java - Android.vn

- Khái niệm: Máy ảo Java là một phần mềm dựa trên cơ sở máy tính ảo. Nó có tập hợp các lệnh logic để xác định các hoạt động của máy tính. Người ta có thể xem nó như một hệ điều hành thu nhỏ. Nó thiết lập các lớp trừu tượng cho: Phần cứng bên dưới, hệ điều hành, mã đã biên dịch. Trình biên dịch chuyển mã nguồn thành tập các lệnh của máy ảo mà không phụ thuộc vào phần cứng cụ thể. Trình thông dịch trên mỗi máy sẽ chuyển tập lệnh này thành chương trình thực thi.

Và khi bạn cài JDK, thì máy bạn đã có máy ảo Java rồi nhé!

2, IDE

- IDE là Môi trường phát triển tích hợp, nó giống như một công cụ soạn thảo chương trình Java, và hỗ trợ cho bạn trong quá trình lập trình. - Về IDE lập trình Java thì có rất nhiều: Jcreator, Jbuilder, Eclipse, Netbeans, .v..v..v

- Tuy nhiên hiện tại thì mình thấy mọi người thường dùng Netbeans và Eclipse nhiều hơn, và bạn nên biết cả 2 công cụ này. Bài sau sẽ hướng dẫn các bạn dùng cả 2 . Còn cá nhân mình thì thường dùng Netbeans để code Java.

Destination URL: https://netbeans.org/downloads/

Page 9: Basic Java - Android.vn

Bạn chọn bản SE cho nhẹ, nó cũng đã cơ bản đáp ứng đủ nhu cầu lập trình Java trong khóa học! Các bạn phải cài JDK trước rồi mới cài IDE không thì sẽ có lỗi !

Chú ý:

Về bản chất thì bạn phải cài 2 công cụ như vậy, nhưng mới đây, trên trang chủ oracle đã có bản “2 trong 1”, nó là sự kết hợp giữa JDK và Netbeans, nghĩa là bạn chỉ cần download 1 gói duy nhất về cài đặt là đã cơ bản đủ công cụ học lập trình Java, rất tiện lợi . Nhưng mình vẫn phải viết đầy đủ như trên để mai này các bạn có thể tùy chỉnh, chọn IDE phù hợp.

Destination URL download tại đây! Bạn chọn vào ” Accept License Agreement “ rồi chọn phiên bản phù hợp với hệ điều hành bạn đang dùng.

Tiếp theo là video hướng dẫn tất cả các thao tác từ download, đến cài đặt và tạo chương trình Java đầu tiên với mỗi công cụ trên.

Ngoài ra, mình bổ sung thêm 2 video rất hay nữa của anh Việt bên blog StudyAndShare, các

bạn mới bắt đầu với Java nên xem hết nhé!

Page 10: Basic Java - Android.vn

Bài tập về nhà cho những bạn mới làm quen Java:

Download và cài thử các công cụ trên, tạo project "Hello Word" mới với mỗi

IDE tương tự như trong Video

Page 11: Basic Java - Android.vn

Bài 2: Biên dịch và thực thi Java source bằng Command

Line (cmd) Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 30/5/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 4,062

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Sau khi học xong Bài 1, các bạn đã có thể chạy được chương trình HelloWord bằng các IDE eclipse hoặc Netbeans, ở bài này, mình sẽ hướng dẫn bổ sung cho các bạn một cách khác để biên dịch và thực thi Java source mà không cần tới IDE, chỉ cần máy bạn đã cài JDK là dùng được, chúng ta sẽ làm điều này bằng các dòng lệnh trên Cmd

Đầu tiên bạn thiết lập biến môi trường:

Bước 1: My computer >Nháy chuột phải > Properties > Advanced > Environment Bước 2: Tại mục "System variables" bạn tìm tới "Path" rồi chọn "Edit"

Bước 3: Tìm đường dẫn tới thư mục bin của java, máy mình là: C:\Program Files\Java\jdk1.7.0_21\bin Chèn đường dẫn trên vào cuối ô “Variable value”

Nhớ là đường dẫn của bạn phải có 2 dấu chấm phẩy 2 bên, như này: Mã:

; C:\Program Files\Java\jdk1.7.0_21\bin;

Bước 4: Ok và lưu lại.

Page 12: Basic Java - Android.vn

Chúng ta kiểm tra việc thiết lập biến môi trường có thành công hay không bằng cách mở cửa sổ Run lên (ấn tổ hợp phím Window + r ), gõ cmd rồi ấn Enter Bạn gõ thử 2 câu lệnh sau. Mã:

javac

Mã:

java

Nếu màn hình hiện như sau là việc thiết lập biến môi trường của bạn đã thành công.

Page 13: Basic Java - Android.vn
Page 14: Basic Java - Android.vn

Bây giờ, chúng ta chuyển sang việc biên dịch và thực thi chương trình Java

Đầu tiên bạn đưa dấu nhắc về thư mục chứa file java bạn mới tạo, chẳng hạn để đưa dấu nhắc về ổ D bạn dùng lệnh: Mã:

d:

Ở đây mình lưu file ViDu.java ở ổ D, bên trong có file Vidu.Java là chương trình Hello word. Khi dấu nhắc đã ở thư mục chứa file java, gõ lệnh javac + tên file.java để biên dịch chương trình thành file class, ví dụ như sau: Mã:

javac ViDu.java

(Bạn để ý sẽ có file cùng tên file java, nhưng có đuôi là *.class được tạo ra cùng thư mục) Sau đó gõ tiếp lệnh java + tên file. ở đây mình gõ

Mã:

java ViDu

Chương trình thực thi và hiện kết quả lên màn hình Cmd “Hello the gioi Java!”,

Page 15: Basic Java - Android.vn

Và tiếp theo là video hướng dẫn toàn bộ quá trình trên của Android.Vn

Chúc các bạn thành công

Page 16: Basic Java - Android.vn

Bài tập về nhà: Dùng lệnh Javac, java để biên dich và thực thi chương trình Hello Word.

Page 17: Basic Java - Android.vn

Bài 3: Cách khai báo biến , hằng và các kiểu dữ liệu trong

Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 31/5/13.

Theo dõi chủ đề

Trang 1 / 41 234Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 6,302

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Biến trong Java

- Biến là vùng nhớ dùng để lưu trữ các giá trị của chương trình.

- Mỗi biến gắn liền với một kiểu dữ liệu và một định danh duy nhất gọi là tên biến.

- Tên biến thông thường là một chuỗi các ký tự (Unicode), ký số.

- Tên biến phải bắt đầu bằng một chữ cái hoặc một dấu gạch dưới hay dấu dollar.

- Tên biến không có khoảng trắng ở giữa tên.

- Trong java, biến có thể được khai báo ở bất kỳ nơi đâu trong chương trình.

- Tên biến không được trùng với các từ khóa trong Java. (Ví dụ từ khóa : abstract, assert, boolean,

break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends final,

finally, float, for,goto, if , implements , import, instanceof, int, interface, long, native, new, package,

Page 18: Basic Java - Android.vn

private, protected, public, return, short , static, strictfp, super, switch, synchronized, this throw,

throws, transient, try, void, volatile, while.)

- Ví dụ:

Tên biến đúng: a , _a, A, _b, _B, $d, hoTen, _giaTri, sinhVien1, sinhVien2

Tên biến sai: 5a , hoc sinh, 1gia tri, if, try

- Lưu ý: Trong Java phân biệt chữ hoa chữ thường, vì vậy chúng ta cần lưu ý khi đặt tên cho các

biễn, các đối tương dữ liệu cũng như các xử lý trong chương trình.

2, Khai báo biến trong Java.

Cấu trúc câu lệnh khai báo biến trong java như sau: [Kiểu dữ liệu] [tên biến];

Ví dụ: Mã:

int giaTri; // Khái báo biến có tên là “giaTri”, kiểu dữ liệu là int – kiểu số nguyên. String hoTen; //Khai báo biến có tên là “hoTen”, kiểu dữ liệu là String – Là một chuỗi ký tự.

- Ngoài ra còn có thêm từ khóa (public, private, ….) trước dòng khai báo biến (vd: private String

hoTen), phần này mình sẽ nói khi chúng ta sang phần hướng đối tượng trong Java.

- Để gán giá trị cho biến ta chỉ việc dùng cú pháp Tên biến = giá trị, hoặc gán ngay trong quá trình

khai báo ví dụ: Mã:

int giaTri; giaTri = 5;

Hoặc Mã:

int giaTri = 5;

Để in một chuỗi văn bản hoặc giá trị ra màn hình Console ta dùng lệnh dạng như sau: Mã:

System.out.print(“Giá trị của biến là: ”+ giaTri1 + giaTri2); // giaTri1 và giaTri2 là 2 biến đã khai báo và gán giá trị.

3, Giới thiệu các kiểu dữ liệu trong Java

Trong Java có 2 nhóm kiểu dữ liệu, thứ nhất là kiểu dữ liệu nguyên thủy (dữ liệu cơ sở) và thứ 2 là

nhóm kiểu dữ liệu mở rộng: (photo)

Page 19: Basic Java - Android.vn

Ở trong bài này bài này mình sẽ chỉ giới thiệu các kiểu dữ liệu nguyên thủy, còn những kiểu mở rộng

sẽ được viết vào bài hướng đối tượng trong Java.

a, Kiểu số nguyên:

Page 20: Basic Java - Android.vn

b, Kiểu số thực:

c, Kiểu dữ liệu ký tự (char)

-Đây là kiểu dữ liệu về kí tự mỗi biến char sẽ có giá trị là một kí tự Unicode.

Ví dụ: ’a’,’b’, ‘d’,’$’,…

-Chú ý, giá trị để gán cho các biến được đặt trong dấu nháy đơn ‘ ’, không phải là nháy kép “ ” nhé.

Vd: char kyTu; // Khai báo biến kyTu kiểu char

kyTu = ‘a’; // Gán giá trị biến kyTu là ký tự ‘a’

- Giá trị khởi tạo mặc định của kiểu char là null

d) Kiểu dữ liệu Boolean

- Đây là kiểu dữ liệu chỉ nhận một trong 2 giá trị true hoặc false (đúng hoặc sai)

- Giá trị khởi tạo mặc định của kiểu boolean là false

Page 21: Basic Java - Android.vn

4, Hằng

- Hằng là một giá trị bất biến trong chương trình

- Tên hằng được đặt theo qui ước giống như tên biến.

- Hằng số nguyên: trường hợp giá trị hằng ở dạng long ta thêm vào cuối chuỗi số chữ “l” hay “L”. (ví

dụ: 1L, 5L, 3L)

- Hằng số thực: truờng hợp giá trị hằng có kiểu float ta thêm tiếp vĩ ngữ “f” hay “F”, còn kiểu số

double thì ta thêm tiếp vĩ ngữ “d” hay “D”.

- Hằng Boolean: java có 2 hằng boolean là true, false.

- Hằng ký tự: là một ký tự đơn nằm giữa nằm giữa 2 dấu ngoặc đơn.

Ví dụ: ‘a’: hằng ký tự a

Một số hằng ký tự đặc biệt (photo)

- Hằng chuỗi: là tập hợp các ký tự được đặt giữa hai dấu nháy kép “ ”. Một hằng chuỗi không có ký

tự nào là một hằng chuỗi rỗng.

Ví dụ: “Ban dang tham gia khoa hoc Java mien phi tai Android.Vn”

Lưu ý: Hằng chuỗi không phải là một kiểu dữ liệu cơ sở nhưng vẫn được khai báo và sử dụng trong

các chương trình.

Cú pháp khai báo hằng: final + kiểu dữ liệu + tên hằng = giá trị cần gán, ví dụ: Mã:

final int NAM_SINH = 1992;

VIDEO HƯỚNG DẪN

Tham khảo video dưới đây của anh Việt bên blog StudyAndShare

Bài tập làm ngay khi đọc xong bài này, bạn thử làm bằng cách bình luận phía dưới, mình sẽ

chấm điểm cho từng bài của từng bạn để đánh giá kết quả học bài này của mỗi bạn

Page 22: Basic Java - Android.vn

Bài 1: Trong những tên biến sau, tên biến nào khai báo sai: a , c, _a, 3a, %s, *d, _e, class, _else,

super, $super, ^void, $goTo, Public, Return, If, _case, New, $new;

Bài 2: Khai báo 2 biến nguyên (int), gán giá trị bất kỳ cho 2 biến, tính tổng 2 số, gán tổng vào

biến t, in giá trị biễn t ra ngoài màn hình.

Bài 3: Khai báo hằng PI = 3.14 kiểu số thực, với biến r là bán kính đường tròn – kiểu số thực,

được gán vào trong thân chương trình, hãy viết chương trình tính diện tích và chu vi hình tròn,

in kết quả ra màn hình.

(Chú ý: Các bạn nên tự giác làm bài tập, hoàn thiện rồi đăng lên, các bài bạn đã làm, nên để

codetrong thẻ code - chọn thẻ PHP cho rõ ràng và để ẩn code trong thẻ ẩn spoiler, để khi click

vào mới hiện code lên , trước khi thử sức tự làm, bạn không nên nhìn code của các bạn khác đã đăng

nhé )

Page 23: Basic Java - Android.vn

Bài 4: Toán tử và biểu thức, hàm toán học trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 5/6/13.

Theo dõi chủ đề

Trang 1 / 51 2345Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 5,111

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Toán tử số học:

Ví dụ: PHP:

public class SoHoc {

public static void main(String[] args) {

int a, b, du, nguyen;

Page 24: Basic Java - Android.vn

a = 10;

b = 3;

du = a % b;

nguyen = a / b;

System.out.println("Phần dư (a:b) là: " + du);

System.out.println("Phần nguyên (a:b) là: " + nguyen);

a++;

System.out.println("Giá trị a đã tăng lên 1, giá trị mới là: " + a);

b--;

System.out.println("Giá trị của b đã giảm đi 1, giá trị mới là: " + b

);

System.out.println("Với 2 giá trị a, b mới trên, Tích (a x b) = " + a

* b);

}

}

Lưu ý: Với 2 câu lệnh a= a+1 và a++ có kết quả là như nhau, nhưng về bản chất có sự khác biệt: a = a+1 là gán a bằng giá trị a+1, còn phép a++ là tăng a lên 1, phép a++ đỡ tốn tài nguyên hơn, cú pháp ngắn gọn, các bạn nên chọn cách này để chương trình tối ưu hơn

2, Toán tử trên quan hệ, logic:

Ví dụ:

PHP:

public class QuanHeLogic {

public static void main(String[] args) {

boolean soSanh;

int a, b;

a = 5;

b = 10;

soSanh = (a == b);

System.out.println("Kết quả so sánh " + a + "=" + b + " không? " + so

Sanh);

soSanh = (a < b);

Page 25: Basic Java - Android.vn

System.out.println("Kết quả so sánh " + a + "<" + b + " không? " + so

Sanh);

soSanh = (a!=b);

System.out.println("Kết quả so sánh " + a + "#" + b + " không? " + so

Sanh);

soSanh = (a >= b);

System.out.println("Kết quả so sánh " + a + ">=" + b + " không? " + s

oSanh);

soSanh = (a < b)||(a==b);

System.out.println("Kết quả so sánh " + a + "<=" + b + " không? " + s

oSanh);

soSanh = !true;

System.out.println("Biến soSanh được gán bằng giá trị phủ định của tr

ue, giá trị đó là: "+soSanh);

}

}

3, Toán tử trên bit:

- Ở kiến thức cơ bản, chúng ta chưa nghiên cứu sâu vào những toán tử này, mình chỉ chú ý tới 2 phép đó là dịch trái, dịch phải. Hiểu cơ bản thì dịch trái dịch phải n bit cho kết quả giống việc bạn nhân với 2^n và chia cho 2^n (dịch trái – nhân, dịch phải - chia) - Vd số 16: Dịch trái đi 2 bit thì kết quả là nhân 16 x 2^2 = 64

Dịch phải đi 3 bit thì kết quả là chia 16 : (2^3) = 2

- Vậy tại sao có phép nhân, phép chia rồi, chúng ta lại cần biết 2 phép này. Vì 2 phép này tiết kiệm tài nguyên hệ thống hơn là bạn dùng phép chia thông thường. Nói chung, khi có thể, bạn nên dùng 2 phép này để chương trình chạy nhanh hơn. Nó cũng thể hiện tính chuyên nghiệp trong cách lập trình của bạn! (Phần này đa số các bạn học CNTT cơ bản đều được học, mình sẽ không giải thích nhiều, bạn nào chưa hiểu có thể tìm trên mạng xem. Nếu thấy không ổn, mình sẽ viết 1 bài viết nói về phần này!) Để biết cú pháp và cách sử dụng 2 phép này, bạn tham khảo chương trình dưới đây: PHP:

public class PhepDich {

public static void main(String[] args) {

int a, dichPhai1, dichPhai2, dichTrai1, dichTrai2;

a = 16;

Page 26: Basic Java - Android.vn

dichTrai1 = a << 1;

dichTrai2 = a << 2;

System.out.println("Giá trị a ban đầu: " + a);

System.out.println("Khi a dịch trái 1 bit thì giá trị là: " + dichTra

i1);

System.out.println("Khi a dịch trái 2 bit thì giá trị là: " + dichTra

i2);

System.out.println("\n"); // Xuống dòng

dichPhai1 = a >> 1; // Dịch phải 1 bit

dichPhai2 = a >> 2; // Dịch phải 2 bit

System.out.println("Giá trị a ban đầu: " + a);

System.out.println("Khi a dịch phải 1 bit thì giá trị là: " + dichPha

i1);

System.out.println("Khi a dịch phải 2 bit thì giá trị là: " + dichPha

i2);

}

}

4, Toán tử ép kiểu:

- Ép kiểu rộng (widening conversion): từ kiểu nhỏ sang

kiểu lớn (không mất mát thông tin) - Ép kiểu hẹp (narrow conversion): từ kiểu lớn sang kiểu

nhỏ (có khả năng mất mát thông tin)

<tên biến> = (kiểu_dữ_liệu) <tên_biến>;

Bạn hãy tham khảo chương trình nhỏ sau:

PHP:

public class EpKieu {

public static void main(String[] args) {

float soThuc;

int soNguyen;

soThuc = 10.6f;

soNguyen = (int) soThuc;

System.out.println("Số thực vào là: " + soThuc);

System.out.println("Số nguyên ép kiểu từ số thực là: " + soNguyen);

}

}

5, Một số hàm toán học:

Các bạn thao tác như sau, gõ “Math.” (có dấu chấm phía cuối), rồi ấn Ctrl + “cách”, IDE sẽ gợi ý cho bạn sẽ thấy rất nhiều hàm toán học có sẵn trong Java, bạn kéo xuống và chọn cái bạn cần.

Page 27: Basic Java - Android.vn

Vd: Math.min(a,b): tìm giá trị nhỏ nhất của 2 số a và b

Math.sqrt(b): tính căn của số b

Bạn xem ví dụ để hiểu một số hàm này PHP:

public class ToanHoc {

public static void main(String[] args) {

float a = -3.2f;

float b = 16.4f;

float triTuyetDoi;

float can;

float min;

triTuyetDoi = Math.abs(a);

System.out.println("Giá trị tuyệt đối của a là: "+triTuyetDoi);

can = (float) Math.sqrt(b);

System.out.println("Căn của b là: "+can);

min = Math.min(a, b); // Hàm tìm giá trị nhỏ nhất của 2 số

System.out.println("Giá trị nhỏ nhất của 2 số a và b là: "+min);

}

}

Ngoài bài viết trên, bạn cũng nên tham khảo thêm 1 video khá ngắn gọn và dễ hiểu của anh Việt bên Blog StudyAndShare

Bài tập về nhà:

Page 28: Basic Java - Android.vn

Bài 1: Các biến a, b, c là các số nguyên. Gán giá trị cho các biến. Tìm phần nguyên khi chia các số này cho 2, tìm phần dư khi chia các số này cho 3, in kết quả ra màn hình. Tăng giá trị a, b, c mỗi biến lên 1, in giá trị 3 số ra màn hình.

Bài 2: Giải phương trình 2ax+b = 8c với a, b, c là số thực – được gán giá trị trong chương trình, x cũng là số thực, là giá trị cần tìm. Sau khi tính x in kết quả ra màn hình, ép kiểu x về số nguyên, in kết quả ép kiểu của x ra màn hình!

Bài 3: Cho a, b, c là độ dài 3 cạnh tam giác, a, b, c được gán giá trị trong chương trình. Viết chương trình tính diện tích s của tam giác, in kết quả ra màn hình. Tìm số đo 3 góc của tam giác đó, in kết quả ra màn hình.

(Chú ý: Các bạn nên tự giác làm bài tập, hoàn thiện rồi đăng lên, các bài bạn đã làm, nên để code trong thẻ code - chọn thẻ PHP cho rõ ràng và để ẩn code trong thẻ ẩn spoiler, để khi click vào mới hiện code lên , trước khi thử sức tự làm, bạn không nên nhìn code của các bạn khác đã đăng nhé )

Page 29: Basic Java - Android.vn

Bài 5: Cấu trúc if ..else, biểu thức boolean và coding style

trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 20/8/13.

Theo dõi chủ đề

Trang 1 / 21 2Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 3,416

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Page 30: Basic Java - Android.vn

1, Cấu trúc điều kiện if … else

Bây giờ, chúng ta bắt đầu vào chủ đề chính của bài viết này:

Với những bạn đã từng học lập trình pascal, c, hoặc 1 ngôn ngữ nào đó, thì có lẽ quá quen thuộc với

cấu trúc này. Chỉ có 1 chú ý nhỏ nếu như bạn nào mới chỉ học pascal đó là các khối lệnh trong Java

được đặt trong 2 dấu ngoặc nhọn: { <khối lệnh> } thay vì Begin <khối lệnh> End như trong pascal.

Dạng 1: PHP:

if (<điều_kiện>){

<khối_lệnh>;

}

Dịch ra ngôn ngữ nói thì nó là “Nếu ….thì….”

<điều_kiện> ở đây là dạng logic, nghĩa là nó chỉ có thể là đúng hoặc sai.

Ví dụ: Nếu số a chia hết cho 2 thì in ra thông báo đây là số chẵn. Chúng ta sẽ viết chương trình như

sau: PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

int a = 6;

if (a % 2 == 0) {

System.out.println("Thống báo: a là số chẵn");

}

}

}

Page 31: Basic Java - Android.vn

Dạng 2: PHP:

if (<điều_kiện>){

<khối _lệnh1>;

}else{

<khối _lệnh2>;

}

Dịch ra ngôn ngữ nói thì nó là: “Nếu ….thì…còn không thì ….”

Ví dụ yêu cầu : Nếu số a chia hết cho 2 thì in ra thông báo đây là số chẵn, còn không thì báo đây là

số lẻ. Chúng ta viết chương trình như sau: PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

int a = 7;

if (a % 2 == 0) {

System.out.println("Thống báo: a là số chẵn");

}else{

System.out.println("Thông báo: a là số lẻ");

}

}

}

2, Biểu thức Boolean

Phần này, anh Việt bên Blog StudyAndShare nói rất kỹ rồi, các bạn tham khảo video nhé!

3, Coding style – Cách viết mã lệnh trong Java

- Mình bổ sung thêm phần này vào trong bài này vì nó cũng ngắn gọn thôi, tuy vậy nó lại rất quan

trọng, nó giúp code Java của bạn đẹp, dễ nhìn, dễ hiểu, dễ sửa lỗi. Tất nhiên bạn có thể viết theo quy

cách bạn thích nhưng dưới đây là quy cách mà nhiều lập trình viên áp dụng. Có đôi chỗ bạn thấy có

những khái niệm chưa gặp bao giờ, bạn hãy bỏ qua, mai này quay lại đọc

- Tên biến, tên phương thức: Bắt đầu bằng chữ cái thường, các từ liền nhau, trừ từ đầu tiên, những từ

sau viết hoa chữ cái đầu. Ví dụ: ten, hoTen, lop, namSinh, maSinhVien, …v.v.

- Tên hằng: Viết in hoa, các từ cách nhau bởi dấu “_”, ví dụ: PI , HANG_SO, NAM_SINH, …

- Tên Object, tên class (lớp) viết hoa chữ cái đầu của mỗi từ, viết liền nhau, ví dụ: QuanLySinhVien,

HangHoa, ViDuDemo, …..

Tham khảo thêm video của anh Việt bên blog StudyAndShare

Ngoài ra, để hiểu kỹ, sâu hơn, bạn có thể đọc thêm 1 bài viết riêng về vấn đề này, nhưng khi mới bắt

đầu, để đỡ bị rối do chưa biết nhiều khái niệm, bạn nên bỏ qua , nhưng mình vẫn liệt kê vì mai này

chắc chắn bạn phải đọc lại , xem bài viết chi tiết về cách viết mã lệnh tại đây.

Page 32: Basic Java - Android.vn

Cách viết mã lệnh cho ngôn ngữ Java tốt

Bài tập về nhà:

Bài 1: Gán giá trị cho biến a trong chương trình. a là số nguyên. Xét xem a có chia hết cho 5 không,

nếu có báo ra màn hình là chia hết cho 5, nếu không, hãy tìm thương và số dư và in ra màn hình.

Bài 2: Với a, b, c là các số thực được gán trong chương trình, kể cả số âm và dương. Hãy báo ra màn

hình đây có phải là độ dài của 1 tam giác không, nếu có thì đó là của loại tam giác nào.

Bài 3: Giải phương trình bậc 2: ax^2 + bx + c = 0 với a, b, c là các số thực được gán giá trị trong

chương trình. In kết quả các nghiệm ra màn hình. (Nếu a = 0 báo ra màn hình đây không phải là phương trình bậc 2 và in nghiệm)

Page 33: Basic Java - Android.vn

Bài 6: Cấu trúc Switch Case trong Java! Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 7/6/13.

Theo dõi chủ đề

Trang 1 / 41 234Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 4,312

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Cấu trúc Switch…Case:

Page 34: Basic Java - Android.vn

Đơn giản, khi chúng ta cần xử lý các sự kiện liên quan tới nhiều trường hợp giá trị của biến, nếu dùng if - else nhiều thì code sẽ dài, lặp, không mạch lạc, nên chúng ta dùng cấu trúc Switch Case để thay thế! Nó không phải là cách tốt nhất nhưng là phù hợp với nhiều tình huống!

Trong Java, cấu trúc Switch Case được viết như sau: PHP:

switch (<biến>) {

case <giátrị_1> :

<khối_lệnh_1>;

break;

case <giátrị_2>:

<khối_lệnh_2>;

break;

….

case <giátrị_n>:

<khối_lệnh_n>;

break;

default:

<khốilệnhdefault>;

}

Và nó hoạt động như trong hình dưới:

Page 35: Basic Java - Android.vn

Ví dụ: Với yêu cầu sau: Viết chương trình, gán biến nguyên a là 1 giá trị bất kỳ. Nếu

a = 1 thì in ra màn hình là "Chủ nhật", a = 2 thì in ra "Thứ Hai", ..... a = 7 thì in ra

"Thứ Bảy". Nếu a không trong khoảng [1 ; 7] thì báo "Bạn đã gán sai giá trị, chỉ được

gán số nguyên từ 1 tới 7". Chương trình sử dụng Switch Case sẽ được viết như sau: PHP:

public class SwitchDemo {

public static void main(String[] args) {

int a = 3;

switch (a) {

case 1:

System.out.println("Chủ nhật");

break;

case 2:

System.out.println("Thứ Hai");

break;

case 3:

System.out.println("Thứ Ba");

break;

case 4:

System.out.println("Thứ Tư");

break;

case 5:

System.out.println("Thứ Năm");

break;

case 6:

System.out.println("Thứ Sáu");

break;

case 7:

System.out.println("Thứ Bảy");

Page 36: Basic Java - Android.vn

break;

default:

System.out.println("Bạn đã gán sai giá trị, chỉ được gán số n

guyên từ 1 tới 7");

break;

}

}

}

Chú ý:

- Kiểu dữ liệu của biến trong switch chỉ hỗ trợ kiểu dữ liệu: int, byte, short,char, từ JDK 7, hỗ trợ thêm kiểu String và các giá trị truyền vào trong mỗi case thì phải trùng kiểu dữ liệu với biến trong switch.

- Lệnh "break" trong cấu trúc này không phải là bắt buộc phải có thì chương trình mới chạy, bạn có thể không dùng "break" với trường hợp nhất định, nhưng khi đó, chương trình sẽ chạy hết các khối lệnh trong các "case" tiếp theo sau, kể từ khi chương trình tìm được "case" có giá trị truyền vào thỏa mãn, tới khi hết "case" hoặc gặp lệnh "break".

Bạn nên tham khảo 2 video của anh Việt bên Blog StudyAndShare để hiểu rõ

hơn về cấu trúc này:

Bài tập về nhà:

Bài 1: Gán biến a là 1 trong các số ngu yên từ 0 đến 9. Viết chương trình in ra tên các chữ số nhập vào bằng tiếng Anh. Ví dụ gán a bằng 1 thì chương

Page 37: Basic Java - Android.vn

trình chạy sẽ in ra “1 đọc là One”, gán a = 2 thì in ra “2 đọc là Two”

Bài 2: Khai báo 2 biến nguyên “thang” và “nam” gán giá trị là tháng và năm.Yêu cầu “thang” thuộc tập hợp [1..12], năm không được âm. - Nếu gán sai tháng thì báo “Bạn đã nhập sai tháng”, nếu gán sai năm thì báo “Bạn đã gán sai năm”. Khi 1 trong 2 thông tin bị gán sai, những câu lệnh sau sẽ không chạy! - Nếu năm đó là năm nhuận thì in ra thông báo: Đây là năm nhuận. không thì báo ra là năm thường. - Dựa vào thông tin năm đó là năm nhuận hay không và giá trị của tháng đó là tháng nào để báo ra tháng đó có bao nhiêu ngày.

Page 38: Basic Java - Android.vn

Bài 7: Nhập xuất dữ liệu trên giao diện Console Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 16/6/13.

Theo dõi chủ đề

Trang 1 / 41 234Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 3,713

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

- Mặc dù nếu giới thiệu theo thứ tự này thì có vẻ hơi sớm, vì nó liên quan đến khái

niệm đối tượng, input – output trong java (là 1 phần dài dài) nhưng do tiếp theo những

bài liên quan tới mảng, các vòng lặp sắp tới, sẽ phải nhập nhiều dữ liệu, chúng ta

không thể cứ gán giá trị trong chương trình.

Nói đơn giản, thì việc nhập dữ liệu này nó giống như ở lập trình pascal, C cơ bản –

thường thì nhập dữ liệu qua màn hình ms-dos (với java nếu bạn dùng câu lệnh java,

javac trong cmd thì nó cũng sẽ giống như vậy, nhưng bất tiện) .

- Ở đây, chúng ta có 1 giao diện tích hợp vào IDE, nơi mà ở những bài trước, các bạn

in kết quả ra (lệnhSystem.out.println…), và bây giờ, chúng ta nhập dữ liệu vào bằng

chính màn hình đó.

- Có nhiều cách để làm được điều này, nhưng ở bài này, mình sẽ giới thiệu cách mà

theo mình là ngắn gọn dễ hiểu nhất để nhập và lấy được các kiểu dữ liệu thông dụng :

kiểu nguyên, kiểu thực, kiểu chuỗi. (Đi sâu hơn, mình sẽ nói trong phần input – output

, chắc là vài bài nữa mới tới).

Đầu tiên là bạn phải thêm gói này vào ở đầu chương trình

Page 39: Basic Java - Android.vn

PHP:

import java.util.Scanner;

Trong chương trình, bạn tạo 1 đối tượng Scanner, tên đối tượng bạn tự đặt, ở đây tên

đối tượng mình đặt là “nhapDuLieu” PHP:

Scanner nhapDuLieu = new Scanner(System.in);

Sau đó, để đọc cả dòng văn bản (dùng nó để đọc chuỗi ký tự) ta dùng lệnh

nhapDuLieu.nextLine(), gán vào biến nào đó giá trị, vd mình dùng biến “ten” – kiểu

String PHP:

ten = nhapDuLieu.nextLine();

Tương tự, để đọc kiểu dữ liệu dạng số nguyên, số thực dùng lệnh : PHP:

nhapDuLieu.nextInt();

nhapDuLieu.nextFloat();

Bạn thử tự tìm hiểu thêm bằng cách gõ tên đối tượng Scanner rồi tìm gợi nhớ, ví dụ

nhapDuLieu. + Ctrl + Cách (space)

Bài demo: PHP:

package demo.android.vn;

import java.util.Scanner;

public class AndroidVn {

public static void main(String[] args) {

int tuoi;

String ten;

Scanner nhapDuLieu = new Scanner(System.in);

System.out.print("Nhập Tên: ");

ten = nhapDuLieu.nextLine();

System.out.print("Nhập Tuổi: ");

tuoi = nhapDuLieu.nextInt();

System.out.println("\nTên Vừa Nhập:" + ten+"\n");

System.out.println("Tuổi Vừa Nhập: " + tuoi);

}

}

Kết quả màn hình Console:

Page 40: Basic Java - Android.vn

Bài tập về nhà:

Bài 1: Từ màn hình console, nhập dữ liệu của 1 sinh viên là họ và tên, năm sinh,

điểm toán, lý , hóa (kiểu số thực). Dựa vào điểm trung bình 3 môn in ra đó là học sinh giỏi, khá hay trung bình

Page 41: Basic Java - Android.vn

Bài 8: Cấu trúc lặp while, do while, for trong Java! Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 16/6/13.

Theo dõi chủ đề

Trang 1 / 31 23Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 3,127

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Dạng 1: while(…)

while(điều_kiện_lặp){

khối_lệnh;

}

Xét điều kiện trước, đúng rồi mới thực hiện khối lệnh. Vd: PHP:

public class AndroidVn {

public static void main(String[] args) {

int i;

i = 0;

while (i < 10) {

System.out.print(" "+i++);

}

System.out.println("...i = "+i);

i = 15;

Page 42: Basic Java - Android.vn

while (i < 10) {

System.out.print(" "+i++);

}

System.out.println("...i = "+i);

}

}

Dạng 2: do{…}while;

do{

khối_lệnh;

}while(điều_kiện);

Thực hiện khối lệnh trước, rồi xét điều kiện, nếu sai thì không thực hiện nữa. Như

vậy, ngay cả điều kiện sai từ lần đầu, từ khối lệnh luôn được thực hiện ít nhất 1 lần.

Vd: PHP:

public class AndroidVn {

public static void main(String[] args) {

int i = 0;

do {

System.out.print(" " + i++);

} while (i < 10);

System.out.println("...i = " + i);

i = 15;

do {

System.out.print(" " + i++);

} while (i < 10);

System.out.println("...i = " + i);

}

}

Dạng 3: for(…)

for(khởi_tạo_biến_đếm;đk_lặp;tăng_biến){

<khối_lệnh>;

}

Vd: PHP:

public class AndroidVn {

public static void main(String[] args) {

int i;

for (i = 0; i < 10; i++) {

System.out.print(" " + i);

Page 43: Basic Java - Android.vn

}

System.out.println("\n..i = " + i);

}

}

Để hiểu hơn các cấu trúc, các bạn tham khảo thêm

Video của Blog StudyAndShare

Bài tập về nhà:

Bài 1: Từ màn hình console, nhập dữ liệu của biến a là 1 trong các số từ 1 đến 9. In

ra màn hình bảng nhân tương ứng với số vừa nhập. Giống hình bên bài 1 của hình

phía dưới:

Bài 2: In ra toàn bộ bảng cửu chương giống hình bài 2 trong hình phía dưới:

Page 44: Basic Java - Android.vn
Page 45: Basic Java - Android.vn

Bài 9: Mảng trong Java! Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 28/6/13.

Theo dõi chủ đề

Trang 1 / 31 23Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 6,446

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Khái niệm mảng

Mảng là tập hợp nhiều phần tử có cùng tên, cùng kiểu dữ liệu

và mỗi phần tử trong mảng được truy xuất thông qua chỉ số của

nó trong mảng.

2, Khai báo mảng

Page 46: Basic Java - Android.vn

<kiểu dữ liệu> <tên mảng>[];

hoặc

<kiểu dữ liệu>[] <tên mảng>;

Ví dụ cách cách khai báo mảng: PHP:

int arrInt1[];

int[] arrInt2;

int[] arrInt3, arrInt4, arrInt5;

3, Cấp phát bộ nhớ cho mảng

Để cấp phát bộ nhớ cho mảng trong Java ta cần dùng từ khóa

new. (Tất cả trong Java đều thông qua các đối tượng). Chẳng

hạn để cấp phát vùng nhớ cho mảng trong Java ta làm như sau: PHP:

int arrInt = new int[100];

4, Khởi tạo mảng

Chúng ta có thể khởi tạo giá trị ban đầu cho các phần tử của

mảng khi nó được khai báo.

Ví dụ: PHP:

int arrInt[] = {1, 2, 3};

char arrChar[] = {‘a’, ‘b’, ‘c’};

String arrString[] = {“Nguyen Van A”, “Vu Van B”, “Vu Van C”’};

5, Truy cập mảng

Chỉ số mảng trong Java bắt đầu từ 0. Vì vậy phần tử đầu tiên có

chỉ số là 0, và phần tử thứ n có chỉ số là n - 1. Các phần tử của

mảng được truy xuất thông qua chỉ số của nó đặt giữa cặp dấu

ngoặc vuông ([]).

Ví dụ: PHP:

int arrInt[] = {1, 2, 3};

int x = arrInt[0]; // x sẽ có giá trị là 1.

int y = arrInt[1]; // y sẽ có giá trị là 2.

int z = arrInt[2]; // z sẽ có giá trị là 3.

Lưu ý: Trong những ngôn ngữ lập trình khác (C chẳng hạn),

một chuỗi được xem như một mảng các ký tự. Trong java thì

khác, java cung cấp một lớp String để làm việc với đối tượng

dữ liệu chuỗi cùng khác thao tác trên đối tượng dữ liệu này.

Code ví dụ:

Page 47: Basic Java - Android.vn

PHP:

public class ViDuArray {

public static void main(String[] args) {

int arrInt[];

arrInt = new int[4];

arrInt[0] = 9;

arrInt[1] = 17;

arrInt[2] = 13;

arrInt[3] = 14;

String arrString[] = {"Vu Van A", "Nguyen Van B", "Nguyen Van C"};

System.out.println("Mảng số nguyên: ");

for (int i = 0; i < 4; i++) {

System.out.print(arrInt[i] + " ");

}

System.out.println("\nMảng các chuỗi: ");

for (int i = 0; i < 3; i++) {

System.out.println(arrString[i] + " ");

}

System.out.println("");

}

}

6, Mảng nhiều chiều! (Theo dõi đoạn cuối video dưới)

Các bạn nên xem thêm video của anh Việt bên blog StudyAndShare, video giảng

về mảng trong Java khá ngắn gọn, dễ hiểu!

Bài tập về nhà:

Bài 1: Số sinh viên nhập từ bàn phím. Khai báo 1 mảng gồm danh sách họ tên sinh

Page 48: Basic Java - Android.vn

viên. Tên từng sinh viên nhập từ bàn phím. Sau khi nhập xong, chương trình hỏi nhập

tên sinh viên muốn tìm kiếm. Tìm và in ra kết quả là có trong danh sách hay không.

Bài 2: Sắp xếp 1 dãy n số nguyên nhập vào từ bàn phím theo thứ tự tăng dần!

Bài 3: Nhập các phần tử của 2 ma trận cùng số hàng số cột vào từ bàn phím. In 2 ma

trận ra màn hình. Tính tổng 2 ma trận! In kết quả ra màn hình!

Page 49: Basic Java - Android.vn

Bài 10: Break và Continue trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 7/7/13.

Theo dõi chủ đề

Trang 1 / 21 2Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 3,022

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Lệnh break:

Trong cấu trúc switch chúng ta dùng câu lệnh break để thoát thỏi cấu trúc switch trong cùng chứa nó.

Tương tự như vậy, trong cấu trúc lặp, câu lệnh break dùng để thoát khỏi cấu trúc lặp trong cùng chứa

nó.

Trong thực tế, đặc biệt là các bài tìm kiếm, sẽ dùng break để thoát vòng lặp khi chúng ta đã tìm thấy

kết quả, tránh việc lặp tới tận cùng của vòng lặp, gây lãng phí tài nguyên, vì thế giúp chương trình

chạy nhanh hơn!

Page 50: Basic Java - Android.vn

Ví dụ 1 : Tìm kiếm số thứ tự của phần tử có giá trị là 10 trong 1 mảng các số nguyên: Show Spoiler

2, Lệnh continue:

Hiểu đơn giản, chúng ta thường dùng continue để bỏ qua vòng lặp hiện tại khi gặp điều kiện nào đó

để tiếp tục sang vòng lặp tiếp theo! Còn bản chất, vì nó cũng là 1 lệnh nhảy, nó nhảy xuống vị trí kết

thúc ("}") của khối lệnh trong vòng lặp chứa nó và bỏ qua tất cả các câu lệnh sau nó (Những câu lệnh

thuộc cùng khối lệnh với continue của vòng lặp)

Ví dụ 2: Tìm kiếm và in ra số thứ tự và giá trị các phần tử có giá trị nhỏ hơn 35 trong mảng các số

nguyên! Show Spoiler

Page 51: Basic Java - Android.vn

3, Nhãn (label):

Không giống như C/C++, Java không hỗ trợ lệnh goto để nhảy đến 1 vị trí nào đó của chương trình.

Java dùng kết hợp nhãn (label) với từ khóa break và continue để thay thế cho lệnh

goto. Tuy nhiên, ta cũng chỉ có thể sử dụng label đối với các vòng lặp mà thôi! PHP:

label:

for (…){

for (…){

if (<biểu thức điều kiện>){

break label;

}

else{

continue label;

}

}

}

Lệnh “label:”

Xác định vị trí của nhãn và xem như tên của vòng lặp ngoài. Nếu <biểu thức điều kiện> đúng thì lệnh

break label sẽ thực hiện việc nhảy ra khỏi vòng lặp có nhãn là “label”, ngược lại sẽ tiếp tục vòng lặp

có nhãn “label” (khác với break và continue thông thường chỉ thoát khỏi hay tiếp tục vòng lặp trong

cùng chứa nó).

Ví dụ 3: Bài sau đây nhập xuất ma trận, tìm kiếm chỉ số của phần tử tìm thấy đầu tiên theo yêu cầu! Show Spoiler

Bài tập về nhà:

Bài 1: Nhập 1 danh sách họ tên sinh viên 1 lớp học vào 1 mảng n phần tử. Sắp xếp

Page 52: Basic Java - Android.vn

theo thứ tự a, b, c ... rồi dùng thuật toán tìm kiếm nhị phân, tìm kiếm chính xác tên sinh viên vừa nhập và in ra màn hình số thứ tự của sinh viên đó!

Page 53: Basic Java - Android.vn

Bài 11: Thời gian hệ thống trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 7/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,687

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Tính thời gian chạy 1 đoạn lệnh trong chương trình

a, Tính thời gian theo mini giây: (10^(-3)s) Trong đối tượng System có phương thức "currentTimeMillis()", ta dùng nó để đánh dấu 1 mốc thời

gian tại

vị trí đặt câu lệnh. Để tính thời gian chạy xong 1 đoạn lệnh, ta đặt 2 biến để lấy ra 2 mốc

thời gian rồi lấy hiệu của chúng là tính được tổng thời gian chạy chương trình.

Ví dụ: Chương trình sau sẽ tính thời gian theo mini giây để máy tính sin của 100000 giá trị truyền

vào: PHP:

public class JavaDemoAndroidVn {

public static void main(String[] args) {

//Vd1

long start = System.currentTimeMillis();

for (int i = 1; i <= 100000; i++) {

System.out.println(Math.sin(i));

}

long end = System.currentTimeMillis();

long t = end - start;

System.out.println("Tổng thời gian: " + t + " millisecond");

Page 54: Basic Java - Android.vn

}

}

b, Tính thời gian theo nano giây (10^(-9)s) Tương tự như trên, chỉ khác là ta sẽ dùng phương thức "nanoTime()" trong đối tượng System thay vì

dùng phương thức "currentTimeMillis()"

2, Lấy thời gian từ hệ thống

Bạn xem ví dụ sau, sẽ lấy thời gian từ giờ, phút, giây và ngày, tháng, năm từ hệ thống và hiển thị ra

bên ngoài: PHP:

public class JavaDemoAndroidVn {

public static void main(String[] args) {

//Vd2

//Lay gio he thong

Date thoiGian = new Date();

//Khai bao dinh dang ngay thang

SimpleDateFormat dinhDangThoiGian = new SimpleDateFormat("HH:mm:ss dd

/MM/yyyy ");

//parse ngay thang sang dinh dang va chuyen thanh string.

String hienThiThoiGian = dinhDangThoiGian.format(thoiGian.getTime());

System.out.println("" + hienThiThoiGian);

}

}

Các bạn nên tham khảo Video của anh Việt bên Blog StudyAndShare

Bài tập về nhà:

Các bạn làm lại các ví dụ trên cho thành thạo!

Page 55: Basic Java - Android.vn

Bài 12: Class (lớp) và đối tượng trong Java! Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 12/7/13.

Theo dõi chủ đề

Trang 1 / 21 2Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 3,235

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Để có kiến thức tổng quan và một vài khái niệm mới trong lập trình hướng đối tượng

Trước tiên, bạn hãy đọc thật kỹ bài này:

Lập trình hướng đối tượng với công nghệ Java

Rồi xem video anh Việt bên blog StudyAndShare:

Ở bài này, mình sẽ chỉ viết về class trong Java và chúng ta bắt đầu thực hành, làm bài tập nhỏ để làm

quen với class.

1. Khái niệm class (lớp):

Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong đó bao gồm

dữ liệu của đối tượng (fields hay properties) và các phương thức (methods) tác động lên thành phần

dữ liệu đó gọi là các phương thức của lớp.

Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp (class instance).

Lớp trong java gần giống như bản ghi trong lập trình C hoặc pascal, nhưng tất nhiên nó cao cấp hơn.

Ví dụ 1: Ta khai báo 1 lớp SinhVien gồm các thuộc tính:

- hoTen

Page 56: Basic Java - Android.vn

- namSinh

- lopHoc.

Lớp này chính là 1 khuôn mẫu. Khi ta tạo ra các đối tượng dựa trên lớp này, các đối tượng đều tương

tự như mẫu trên.

Vd : Tạo đối tượng a, khi đó a sẽ có 3 thuộc tính, và ta có thể thao tác gán giá trị các thuộc tính đó như

sau:

- hoTen là "Nguyễn Văn A";

- namSinh là "1992";

- lopHoc là "At7a";

đối tượng b, c, ... cũng tương tự nhưng giá trị của chúng sẽ đặc trưng cho từng đối tượng riêng. Có lẽ,

các bạn sẽ thấy nó có vẻ giống với các bản ghi nếu như bạn đã được học lập trình C hoặc Pascal.

2. Khai báo/định nghĩa lớp:

PHP:

class <ClassName> {

<kiểu dữ liệu> <field_1>;

<kiểu dữ liệu> <field_2>;

constructor

method_1

method_2

}

- class: là từ khóa của java

- ClassName: là tên chúng ta đặt cho lớp

- field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu của lớp.

- constructor: là sự xây dựng, khởi tạo đối tượng lớp.

- method_1, method_2: là các phương thức/hàm thể hiện các thao tác xử lý, tác động lên các thành

phần dữ liệu của lớp.

Ở bài này, tạm thời chúng ta sẽ chưa quan tâm tới constructor và method nhé, những bài sau mình sẽ

viết rõ về những khái niệm đó.

Các bạn hãy xem vd2 code về lớp để định nghĩa những gì đã viết trong ví dụ 1

Ví dụ 2: (Ở đây, tạm thời chưa cần hiểu public là gì nhé, xuống phần dưới sẽ nói kỹ hơn) PHP:

class SinhVien {

public String hoTen;

public int namSinh;

public String lopHoc;

}

3. Tạo đối tượng của lớp:

ClassName objectName = new ClassName();

Ví dụ 3: Tạo 2 đối tượng sinh viên a và sinh viên b dựa trên class đã định nghĩa ở ví dụ 2: PHP:

SinhVien a = new SinhVien();

SinhVien b = new SinhVien();

Page 57: Basic Java - Android.vn

4. Thuộc tính của lớp

Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp được khai báo bên trong lớp như sau:

PHP:

class <ClassName>{

// khai báo những thuộc tính của lớp

<tiền tố> <kiểu dữ liệu> field1;

// …

}

Để xác định quyền truy xuất của các đối tượng khác đối với vùng dữ liệu của lớp người ta thường

dùng 3 tiền tố sau:

- public: có thể truy xuất từ tất cả các đối tượng khác

- private: một lớp không thể truy xuất vùng private của 1 lớp khác.

- protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp đó và những lớp dẫn xuất từ lớp đó

truy cập đến.

Xem thêm video Blog StudyAndShare về các thuộc tính này:

Ví dụ 4: PHP:

class SinhVien{

public String hoTen;

private int namSinh;

protected String lopHoc;

public static String tenTruong = "HV KT Mật Mã";

}

- Thuộc tính "hoTen" có thể được truy cập đến từ tất cả các đối tượng khác. (public)

- Thuộc tính "namSinh" chỉ có thể truy cập được từ các đối tượng có kiểu "SinhVien"(private)

- Thuộc tính "lopHoc", so có thể truy cập được từ các đối tượng có kiểu "SinhVien" và các đối tượng

của các lớp con dẫn xuất từ lớp "SinhVien" (protected)

- "tenTruong" là biến tĩnh có giá trị là "HV KT Mật Mã"trong tất cả các thể hiện tạo ra từ lớp

"SinhVien" (public static)

Lưu ý: Thông thường để an toàn cho vùng dữ liệu của các đối tượng người ta tránh dùng tiền tố

public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến vùng dữ liệu của một lớp từ

các phương thức bên ngoài lớp đó.

Vậy class được định nghĩa, được viết ở vị trí nào trong 1 bài lập trình Java hướng đối tượng. Việc tạo

đối tượng, truy cập dữ liệu của các đối tượng được tạo tạo những class đó ra sao! Ở bài sau mình sẽ

viết rõ và kỹ hơn để các bạn có cái nhìn cụ thể!

Kết thúc bài này, mình sẽ viết 1 ví dụ đơn giản:

Ví Dụ 5: Tạo class sinh viên gồm các thuộc tính: hoTen, namSinh, lopHoc

Tạo 2 đối tượng là sinh viên a và sinh viên b. Gán giá trị cho các thuộc tính và in giá trị các thuộc

tính từng sinh viên ra màn hình! PHP:

Page 58: Basic Java - Android.vn

package javademoandroidvn;

//Vd5

class SinhVien {

public String hoTen;

public int namSinh;

public String lopHoc;

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

SinhVien a = new SinhVien();

a.hoTen = "Vũ Văn Tường";

a.namSinh = 1992;

a.lopHoc = "At7a";

SinhVien b = new SinhVien();

b.hoTen = "Nguyễn Văn Tùng";

b.namSinh = 1990;

b.lopHoc = "Bk1";

System.out.println("Thông tin sinh vien a là: ");

System.out.println("Họ tên: " + a.hoTen + " Năm sinh: " + a.namSinh +

" Lớp Học: " + a.lopHoc);

System.out.println("\nThông tin sinh vien b là: ");

System.out.println("Họ tên: " + b.hoTen + " Năm sinh: " + b.namSinh +

" Lớp Học: " + b.lopHoc);

}

}

Tham khảo thêm video bên blog StudyAndShare

Page 59: Basic Java - Android.vn

Bài tập về nhà:

Bài 1: Tạo class HocSinh gồm 3 thuộc tính: Họ tên, lớp, điểm trung bình.

Tạo 2 đối tượng học sinh a và học sinh b, giá trị của các thuộc tính của 2 đối tượng

được nhập từ bàn phím. So sánh điểm trung bình giữa 2 đối tượng tìm ra người có điểm cao hơn báo ra màn hình console!

Page 60: Basic Java - Android.vn

Bài 13: Class trong Java (tiếp) Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 14/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,130

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Sau bài viết này, các bạn sẽ có cái nhìn toàn diện hơn về class trong 1 project Java (interface, abstract

class tương tự), các bạn áp dụng để viết code sao cho dễ nhìn dễ hiểu và dễ quản lý. Chọn cách viết

nào cho phù hợp với từng bài tập, từng project. Sau bài này, các bạn cũng sẽ hiểu hơn về lập trình

hướng đối tượng trong java.

1, Bài có 1 class, dùng class chứa hàm main!

Khi bạn lên mạng, tìm code, bạn sẽ thấy người ta thường dùng cách này

Thường có 1 class duy nhất. Cách viết này thường dùng để chia sẻ thuật toán, cú pháp hoặc giới thiệu

các phương thức của 1 đối tượng trong thư viện nào đó.

Ví dụ 1: Một bài tập quản lý sinh viên nhỏ: PHP:

package sinh.vien;

public class SinhVien {

public String hoTen;

public int namSinh;

public float toan, ly, hoa;

Page 61: Basic Java - Android.vn

public static void main(String[] args) {

SinhVien a = new SinhVien();

a.hoTen = "Vũ Văn A";

a.namSinh = 1992;

a.toan = 10.0f;

a.ly = 9.0f;

a.hoa = 9.5f;

System.out.println("Điểm Tb là: " + (float) (a.toan + a.ly + a.hoa) /

3);

}

}

Khi làm bài tập hoặc làm các project, ít khi dùng cách này, nó không hay cho việc quản lý, giới thiệu

để các bạn có thể đọc và hiểu nếu như gặp phải những bài chia sẻ dạng trên!

2, Class đặt cùng file class chứa hàm main

Vị trí đặt ngoài class chứa chương trình chính, ở bài trước, mình có viết ví dụ theo cách này! Nó chỉ

thích hợp với bài ít class, class ít thuộc tính và phương thức. Nếu bài có nhiều class, mỗi class có

nhiều phương thức, điều này cũng không tốt, sẽ rất khó nhìn và quản lý cũng như nâng cấp!

Ví dụ 2: Nội dung bài như ở Vd1, bổ sung thêm class giảng viên, nhưng sẽ bố trí lại vị trí class như

sau:

PHP:

package truong.hoc;

class SinhVien {

public String hoTen;

public int namSinh;

public float toan, ly, hoa;

}

class GiangVien {

public String hoTen;

public int namSinh;

public String mon;

public int luong;

}

public class Main {

public static void main(String[] args) {

SinhVien a = new SinhVien();

a.hoTen = "Vũ Văn A";

a.namSinh = 1992;

a.toan = 10.0f;

a.ly = 9.0f;

a.hoa = 9.5f;

System.out.println("Điểm Tb là: " + (float) (a.toan + a.ly + a.hoa) /

3);

GiangVien gv1 = new GiangVien();

Page 62: Basic Java - Android.vn

}

}

Chú ý: Chương trình vẫn chạy nếu bạn để các class SinhVien và GiangVien ở phía cuối chương

trình, chỉ cần nằm ngoài class Main là được

3, Mỗi class đặt riêng 1 file, cùng 1 gói (package)

Cách này ở các bài tập có nhiều class, các class cùng 1 loại.

Ví dụ 4: Các class cùng là nhân sự của 1 trường

học: SinhVien, GiangVienKhoa1,GiangVienKhoa2.

Với bài này, chúng ta sẽ tạo project với 1 package là truong.hoc, trong

package này sẽ có 4 file như sau:

File "main.java" chứa hàm main: PHP:

package truong.hoc;

public class Main {

public static void main(String[] args) {

SinhVien a = new SinhVien();

a.hoTen = "Vũ Văn A";

a.namSinh = 1992;

a.toan = 10.0f;

a.ly = 9.0f;

a.hoa = 9.5f;

System.out.println("Điểm Tb là: " + (float) (a.toan + a.ly + a.hoa) /

3);

GiangVien1 gv1 = new GiangVien1();

}

}

File GiangVien.java là 1 class, bạn tạo bằng cách nháy chuột phải vào package chọn New --> Java

Class, nội dung như sau: PHP:

package truong.hoc;

class SinhVien {

public String hoTen;

public int namSinh;

public float toan, ly, hoa;

}

File GiangVien1.java: PHP:

package truong.hoc;

class GiangVien1 {

public String hoTen;

public int namSinh;

public String mon;

Page 63: Basic Java - Android.vn

public int luong;

}

File GiangVien2.java: PHP:

package truong.hoc;

class GiangVien2 {

public String hoTen;

public int namSinh;

public String mon;

public int luong;

public String phongThucHanh;

}

Nhờ vào IDE, việc quản lý các class trở lên tiện lợi hơn rất nhiều!

4, Các class được đặt ở nhiều package khác nhau:

Với những project thực tế, sẽ có rất nhiều class khác nhau được để ở nhiều gói (package) khác nhau.

Ví dụ 4: Project này sẽ mở rộng từ các ví dụ trên. Tạo 1 project có tên: QuanLyTruongHoc. Trong

project có 3 package: truong.hoc, nhan.su, thu.vien.sach

Page 64: Basic Java - Android.vn

Code bài 4 dài mình đính kèm phía dưới, các bạn Import vào IDE là ok!

Tham khảo video bên StudyAndShare

Bài tập về nhà:

Đọc hiểu và code lại các ví dụ! Đọc thêm: Tạo 1 đối tượng Java đầu tiên của bạn

Page 66: Basic Java - Android.vn

Ở bài 12 mình có viết chú ý 1 điều như này: Thông thường để an toàn cho vùng dữ liệu của các đối tượng người ta tránh dùng tiền tố public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến vùng dữ liệu của một lớp từ các phương thức bên ngoài lớp đó.

Ở các ví dụ trước, các thuộc tính mình thường để public , chương trình chạy, nhưng đó không phải là

cách ổn. Nếu chuyển về private, mà bạn vẫn truy cập các thuộc tính như các bài ví dụ trước thì sẽ lỗi

như này:

Page 67: Basic Java - Android.vn

Vậy làm như nào để truy cập các thuộc tính của đối tượng để private?

1, Biến this

Đầu tiên bạn cần hiểu biến này là gì?

Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngôn ngữ java. Một class trong Java luôn

tồn tại một biến this, biến this được sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa nó.

2, Phương thức setter

Mục đích của phương thức setter là chúng ta dùng nó để truy cập vào thuộc tính của đối tượng và gán

giá trị cho các thuộc tính của đối tượng! Tên gọi, hay cách bạn đặt tên phương thức này là tùy bạn,

nó cũng vẫn chạy nhưng theo style code lập trình viên thường làm thì nó sẽ thường là set....

Ví dụ 1: PHP:

package javademoandroidvn;

class HocSinh {

private String hoTen;

private String lop;

private float diemTb;

public void setHoTen(String hoTen1) { //hoTen1 là biến cục bộ nhập vào, t

hường để trùng tên thuộc tính như các hàm setter phía dưới

this.hoTen = hoTen1;

Page 68: Basic Java - Android.vn

}

public void setLop(String lop) {

this.lop = lop;

}

public void setDiemTb(float diemTb) {

this.diemTb = diemTb;

}

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

HocSinh a = new HocSinh();

a.setHoTen("Vu Van T");

a.setLop("At7a");

a.setDiemTb(7.5f);

}

}

2, Phương thức getter

Cũng tương tự như phương thức setter, nó cũng dùng để truy cập vào các thuộc tính

của đối tượng, nhưng ngược lại setter, phương thức getter sẽ trả về các thuộc tính của đối tượng!

Ví dụ 2: PHP:

package javademoandroidvn;

class HocSinh {

private String hoTen;

private String lop;

private float diemTb;

public void setHoTen(String hoTen1) { //hoTen1 là biến cục bộ nhập vào, t

hường để trùng tên thuộc tính như các hàm setter phía dưới

this.hoTen = hoTen1;

}

public void setLop(String lop) {

this.lop = lop;

}

public String getHoTen() {

return hoTen;

}

public String getLop() {

return lop;

}

public float getDiemTb() {

return diemTb;

Page 69: Basic Java - Android.vn

}

public void setDiemTb(float diemTb) {

this.diemTb = diemTb;

}

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

HocSinh a = new HocSinh();

a.setHoTen("Vu Van T");

a.setLop("At7a");

a.setDiemTb(7.5f);

System.out.println("Họ tên: " + a.getHoTen());

System.out.println("Lớp: " + a.getLop());

System.out.println("Điểm Tb: " + a.getDiemTb());

}

}

Các bạn nên xem video sau của blog StudyAndShare để hiểu hơn!

3, Cách tự chèn các phương thức getter và setter:

Khi bạn mới code java thì chưa nên dùng cách này, thực sự hiểu getter và setter rồi thì mới nên dùng.

Ở cả 2 IDE phổ biến đều hỗ trợ tự chèn các phương thức getter và setter. Với những bài khi khai báo

nhiều biến, dùng tính năng này sẽ rất tiện!

Với Netbeans:

Bạn nháy chuột phải lên vị trí soạn thảo code, chọn Insert Code

Sau đó sẽ hiện ra 1 menu nhỏ, bạn chọn getter, setter hoặc getter and setter tùy mục đích bạn dùng!

Bạn sẽ thấy Netbeans tự sinh code cho các phương thức đó!

Page 70: Basic Java - Android.vn

Với Eclipese: Bạn vào Source --> Generate Getter and Setter rồi chọn biến cần tạo phương

thức getter và setter là được!

Page 71: Basic Java - Android.vn
Page 72: Basic Java - Android.vn

Bài tập về nhà:

Bài 1: Tạo package nhân sự, trong có 2 class là sinh viên và giảng viên

Class sinh viên gồm các thuộc tính: họ tên, lớp học, điểm toán, lý, hóa.

Class giảng viên gồm các thuộc tính: họ tên, lớp dạy, năm sinh, lương.

Tạo đối tượng học sinh a.

Tạo đối tượng giảng viên b.

Các giá trị của thuộc tính a và b nhập vào từ bàn phím.

Xử lý dữ liệu báo ra thông tin của a và b, tính và báo ra điểm trung bình của a,

xếp loại học lực, báo b có dạy a hay không!

Các thuộc tính để private, sử dụng phương thức getter, setter. Lập trình hướng đối tượng!

Page 73: Basic Java - Android.vn

Bài 16: Tính kế thừa (inheritance) trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 15/7/13.

Theo dõi chủ đề

Trang 1 / 21 2Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,455

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Tính kế thừa trong Java cũng tương tự như mô hình trên!

1, Khái niệm:

Page 74: Basic Java - Android.vn

Một lớp con (subclass) có thể kế thừa tất cả những vùng dữ liệu và phương thức của một lớp khác

(siêu lớp - superclass).

Như vậy việc tạo một lớp mới từ một lớp đã biết sao cho các thành phần (fields và methods) của lớp

cũ cũng sẽ thành các thành phần (fields và methods) của lớp mới. Khi đó ta gọi lớpmới là lớp dẫn

xuất (derived class) từ lớp cũ (superclass).

Có thể lớp cũ cũng là lớp được dẫn xuất từ một lớp nào đấy, nhưng đối với lớp mới vừa tạo thì lớp cũ

đó là một lớp siêu lớp trực tiếp (immediate supperclass).

Dùng từ khóa extends để chỉ lớp dẫn xuất. PHP:

class A {

//...

}

class B extends A{

//...

}

Như trên class B đã kết thừa từ class A.

** Chú ý: Java cung cấp 3 tiền tố/từ khóa để hỗ trợ tính kế thừa của lớp:

- public: lớp có thể truy cập từ các gói, chương trình khác.

- final: Lớp hằng, lớp không thể tạo dẫn xuất (không thể có con), hay đôi khi người ta gọi là lớp “vô

sinh”.

- abstract: Lớp trừu tượng (không có khai báo các thành

phần và các phương thức trong lớp trừu tượng). Lớp dẫn xuất sẽ khai báo, cài đặt cụ thể các thuộc

tính, phương thức của lớp trừu tượng.

(Những điều này ta sẽ bàn đến ở những bài sau)

2, Ví dụ:

Tạo 3 class gồm các thuộc tính tương ứng:

Class "nhân sự" gồm: họ tên, năm sinh, quê quán.

Class "học sinh" gồm: họ tên, năm sinh, quê quán, điểm trung bình.

Class "giáo viên" gồm: họ tên, năm sinh, quê quán, lương hàng tháng.

Như vậy, nếu như chúng ta không sử dụng tính kế thừa thì sẽ xảy ra tình trạng lặp code, nghĩa là khi

khai báo 2 lớp "học sinh" và "giáo viên" sẽ khai báo lại các thuộc tính họ tên, năm sinh, quê quán

Để sử dụng tính kế thừa, ta chỉ cần khai báo lớp "nhân sự", sau đó 2 lớp còn lại ta kế thừa từ lớp

"nhân sự" , thiếu thuộc tính, phương thức nào thì sẽ bổ sung vào lớp đó.

Xem bài làm dưới đây:

a, Tạo các thuộc tính để public, và kế thừa: (Để thuộc tính public như này cho ngắn gọn, các

bạn dễ hiểu trước) PHP:

package javademoandroidvn;

class NhanSu {

public String hoTen;

public int namSinh;

Page 75: Basic Java - Android.vn

public String queQuan;

}

class HocSinh extends NhanSu{

public float diemTb;

}

class GiaoVien extends NhanSu{

public int luong;

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

NhanSu ns = new NhanSu();

ns.hoTen = "Nhân Sự A";

ns.namSinh = 1990;

ns.queQuan = "Hải Dương";

HocSinh hs = new HocSinh();

hs.hoTen = "Vũ Văn A"; // Đối tượng tạo ra từ lớp "học sinh" k

ế thừa, sử dụng các thuộc tính của lớp "nhân sự"

hs.namSinh = 1992;

hs.queQuan = "Hải Dương";

hs.diemTb = 9.5f;

GiaoVien gv = new GiaoVien();

gv.hoTen = "Nguyễn Văn B"; // Đối tượng tạo ra từ lớp "giáo viên"

kế thừa, sử dụng các thuộc tính của lớp "nhân sự"

gv.namSinh = 1980;

gv.queQuan = "Hà Nội";

gv.luong = 300000000;

}

}

b, Tạo các thuộc tính để private, các phương thức cũng sẽ được kế thừa:

(Cụ thể là các phương thức getter và setter ở ví dụ này) PHP:

package javademoandroidvn;

class NhanSu {

private int namSinh;

private String queQuan;

private String hoTen;

public String getHoTen() {

return hoTen;

}

public void setHoTen(String hoTen) {

this.hoTen = hoTen;

}

public int getNamSinh() {

return namSinh;

}

public void setNamSinh(int namSinh) {

Page 76: Basic Java - Android.vn

this.namSinh = namSinh;

}

public String getQueQuan() {

return queQuan;

}

public void setQueQuan(String queQuan) {

this.queQuan = queQuan;

}

}

class HocSinh extends NhanSu {

private float diemTb;

public float getDiemTb() {

return diemTb;

}

public void setDiemTb(float diemTb) {

this.diemTb = diemTb;

}

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

NhanSu ns = new NhanSu();

ns.setHoTen("Nhân Sự A");

ns.setNamSinh(1990);

ns.setQueQuan("Hải Dương");

HocSinh hs = new HocSinh();

hs.setHoTen("Vũ Văn A"); // Đối tượng tạo ra từ lớp "học sinh" k

ế thừa, sử dụng các thuộc tính, phương thức của lớp "nhân sự"

hs.setNamSinh(1992);

hs.setQueQuan("Hải Dương");

hs.setDiemTb(9.5f);

System.out.println("Thông tin học học sinh: ");

System.out.println("Họ tên: " + hs.getHoTen());

System.out.println("Năm sinh: " + hs.getNamSinh());

System.out.println("Quê quán: " + hs.getQueQuan());

System.out.println("Điểm trung bình: " + hs.getDiemTb());

}

}

Tham khảo thêm video bên blog StudyAndShare, có thể có 1 vài khái niệm bạn sẽ chưa hiểu, sau vài

bài nữa, bạn nên xem lại video này!

Page 77: Basic Java - Android.vn

Bài tập về nhà:

Bài 1: Dùng tính kế thừa khai báo 3 class:

Class "Sinh Viên" gồm các thuộc tính: Họ tên, năm sinh, mã thẻ, tiền học phí còn nợ.

Class "Giảng Viên" gồm các thuộc tính: Họ tên, năm sinh, mã thẻ, tiền lương hàng tháng.

Class "Giám Đốc" gồm các thuộc tính: Họ tên, năm sinh, mã thẻ, tiền tiêu hàng tháng.

Các thuộc tính để private, truy cập các thuộc tính sử dụng phương thức getter và setter

Tạo 1 đối tượng giảng viên, giá trị nhập vào từ bàn phím, in thông tin ra ngoài

màn hình console

Đọc thêm: Tính kế thừa và tính trừu tượng trong Java

Page 78: Basic Java - Android.vn

Bài 17: Nạp chồng phương thức (overloading method) trong

Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 15/7/13.

Theo dõi chủ đề

Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,082

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Page 79: Basic Java - Android.vn

Khi yêu cầu 3 con vật cùng 1 yêu cầu "speak", 3 con vật trả lại 3 kết quả khác nhau!

1, Khái niệm nạp chồng phương thức overloading method:

Việc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác tham số (khác kiểu dữ liệu,

khác số lượng tham số) gọi là khai báo chồng phương thức (overloading method).

2, Ví dụ:

Overloading method dùng làm gì?, ta xét bài tập nhỏ:

Tính diện tích hình vuông, tính diện tích hình hình chữ nhật, tính diện tích hình tam giác.

Ta sẽ tạo ra 3 phương thức đều tên là dienTich sao cho, nếu như

Có 1 tham số truyền vào, nó sẽ tự hiểu là cần tính diện tích hình vuông

Có 2 tham số truyền vào, nó tự hiểu là tính diện tích hình chữ nhật

Có 3 tham số truyền vào, nó tự hiểu là tính diện tích hình tam giác.

Code: PHP:

package javademoandroidvn;

class Hinh {

public float dienTich(float a) {

return (float) a * a;

}

public float dienTich(float a, float b) {

return (float) a * b;

}

public double dienTich(float a, float b, float c) {

float p;

p = (float) (a + b + c) / 2;

Page 80: Basic Java - Android.vn

return Math.sqrt(p * (p - a) * (p - b) * (p - c));

}

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

Hinh h = new Hinh();

System.out.println("Diện tích hình vuông có cạnh 2 : " + h.dienTich(2

));

System.out.println("Diện tích hình chữ nhật có 2 cạnh là 4 và 5 : " +

h.dienTich(4, 5));

System.out.println("Diện tích hình tam giác có 3 cạnh là 3, 4, 5 : "

+ h.dienTich(3, 4, 5));

}

}

Tham khảo thêm 2 video bên blog StudyAndShare:

Bài tập về nhà:

Bài 1: Class hàng hóa gồm các thuộc tính: mã hàng, tên hàng, giá, số lượng.

Tạo phương thức tính tiền tổng hóa đơn hàng hóa đó với 2 tham số truyền vào là giá, và số lượng.

Tạo phương thức nạp chồng phương thức trên, có thêm tham số truyền vào nữa là % giảm giá. Tính

tiền dựa vào các thông số này! Tạo đối tượng dựa và class trên và hiện thị thông tin hóa đơn ra ngoài theo từng trường hợp!

Page 82: Basic Java - Android.vn

1, Khái niệm ghi đè – override:

- Đó là khi phương thức đã xuất hiện ở lớp cha và xuất hiện tiếp ở lớp con.

- Khi đối tượng thuộc lớp con gọi phương thức thì sẽ chọn lựa và chạy theo phương thức trong lớp

con.

- Nếu lớp con không có phương thức đó thì mới lên kiếm ở lớp cha để chạy.

- Phương thức ghi đè có cùng tên, cùng tham số truyền vào, cùng kiểu giá trị trả về với phương thức

ở lớp cha!

- Ghi đè là hình thức đa hình (polymorphism) trong quá trình thực thi (Runtime)

Ở bài trước, ta biết đến cách nạp chồng phương thức (Overloading method), nó cùng nằm trong 1

lớp. Còn ghi đè ở đây, là sau khi lớp con kế thừa lớp cha của nó, ta chỉnh lại 1 phương thức nào đó

cần thiết, tức là ghi đè để đạt được theo ý muốn!

2, Ví dụ:

Ví dụ 1: Sự khác nhau giữa Override và Overload

Ví dụ 2: - Lớp "tên người Việt" gồm 2 thuộc tính: "họ" và "tên" và phương thức hiển thị tên đầy đủ theo thứ

tự họ + tên

- Lớp "tên người nước ngoài" kế thừa từ lớp "tên người Việt" , phương thức hiển thị tên đầy đủ lại

theo thứ tự tên + họ

- Như vậy, sau khi kế thừa ta chỉ cần ghi đè lại phương thức hiển thị là xong!

Code: PHP:

package javademoandroidvn;

class tenNguoiViet {

Page 83: Basic Java - Android.vn

public String ten, ho;

public void show() {

System.out.println("Tên đầy đủ là: " + this.ho + " "+this.ten);

}

}

class tenNguoiNuocNgoai extends tenNguoiViet {

@Override

public void show() {

System.out.println("Full name: " + this.ten + " " + this.ho);

}

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

tenNguoiViet nguoiV = new tenNguoiViet();

nguoiV.ho = "Nguyen";

nguoiV.ten = "Hung";

nguoiV.show();

tenNguoiNuocNgoai nguoiNN = new tenNguoiNuocNgoai();

nguoiNN.ho = "Nguyen";

nguoiNN.ten = "Hung";

nguoiNN.show();

}

}

Ví dụ 3: - Lớp HocSinh gồm các thuộc tính: hoTen, lop, toan, ly, hoa và phương thức điểm trung bình là trung

bình cộng 3 môn

- Lớp HocSinhChuyenToan kế thừa từ phương thức HocSinh, nhưng khi tính điểm trung bình nhân

đôi hệ số môn Toán rồi cộng tất cả, chia cho 4. Như vậy cần ghi đè phương thức điểm trung bình ở

lớp HocSinhChuyenToan

Code: PHP:

package javademoandroidvn;

class HocSinh {

private String hoTen;

private String lop;

private float toan, ly, hoa;

public String getHoTen() {

return hoTen;

}

public void setHoTen(String hoTen) {

this.hoTen = hoTen;

}

public String getLop() {

return lop;

Page 84: Basic Java - Android.vn

}

public void setLop(String lop) {

this.lop = lop;

}

public float getToan() {

return toan;

}

public void setToan(float toan) {

this.toan = toan;

}

public float getLy() {

return ly;

}

public void setLy(float ly) {

this.ly = ly;

}

public float getHoa() {

return hoa;

}

public void setHoa(float hoa) {

this.hoa = hoa;

}

public float diemTrungBinh() {

return (float) (this.toan + this.ly + this.hoa) / 3;

}

}

class HocSinhChuyenToan extends HocSinh {

@Override

public float diemTrungBinh() {

return (float) (this.getHoa() + this.getLy() + this.getToan() * 2) /

4;

}

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

HocSinh a = new HocSinh();

a.setHoTen("Vu Van Tuong");

a.setLop("At7a");

a.setToan(10.0f);

a.setLy(9.0f);

a.setHoa(8.0f);

System.out.println("Diem trung binh cua hoc sinh a la: " + a.diemTrun

gBinh());

HocSinhChuyenToan b = new HocSinhChuyenToan();

Page 85: Basic Java - Android.vn

b.setHoTen("Nguyen Van B");

b.setToan(9.0f);

b.setHoa(7.0f);

b.setLy(8.0f);

System.out.println("Diem trung binh cua hoc sinh chuyen Toan b la: "

+ b.diemTrungBinh());

}

}

Tham khảo thêm 2 video bên blog StudyAndShare:

Bài tập về nhà:

Bài 1: - Class USB có các thuộc tính: mã hàng, giá, số lượng. Phương thức tổng tiền = giá * số lượng,

phương thức show in ra toàn bộ thông tin đơn hàng mua USB

- Class Mouse kế thừa từ class USB, ghi đè 2 phương thức tổng tiền (do chuột được giảm giá 20%)

và show in toàn bộ thông tin đơn hàng khi khách hàng mua chuột máy tính.

- Tạo mỗi lớp 1 đối tượng, nhập thông tin từ bàn phím, in thông tin đơn hàng ra màn hình!

- Code hướng đối tượng, các thuộc tính để private!

Đọc thêm: Nâng cấp đối tượng của bạn

Page 87: Basic Java - Android.vn

- Contructor thật ra là một loại phương thức đặc biệt của lớp.

- Constructor dùng gọi tự động khi khởi tạo một thể hiện của lớp, có thể dùng để khởi gán những giá

trị măc định. Các constructor không có giá trị trả về, và có thể có tham số hoặc

không có tham số.

- Constructor phải có cùng tên với lớp và được gọi đến dùng từ khóa new.

- Nếu một lớp không có constructor thì java sẽ cung cấp cho lớp một constructor mặc định (default

constructor). Những thuộc tính, biến của lớp sẽ được khởi tạo bởi các giá trị mặc định (số: thường là

giá trị 0, kiểu luận lý là giá trị false, kiểu đối tượng giá trị null, …)

- Bạn có thể định nghĩa nhiều phương thức khởi tạo cho một lớp.

- Giống như các phương thức khác, phương thức khởi tạo lớp có thể bị nạp chồng (overload)

** Lưu ý: thông thường để an toàn, dễ kiểm soát và làm chủ mã nguồn chương trình chúng ta nên

khai báo một constructor cho lớp.

*** Tham khảo thêm 2 video của Blog StudyAndShare về Constructor

2, Ví dụ về constructor:

Tạo lớp SinhVien với các thuộc tính hoTen, namSinh, diemTb, lop.

Tạo constructor có 2 tham số truyền vào và 1 constructor overload constructor đó, với 3 tham số

truyền vào: PHP:

package javaandroidvn;

class SinhVien {

private String hoTen;

private int namSinh;

private float diemTb;

private String lop;

public SinhVien() {

}

public SinhVien(String hoTen, int namSinh) {

this.hoTen = hoTen;

this.namSinh = namSinh;

this.lop = "At7a";

System.out.println("Họ tên: " + this.hoTen + " Năm sinh: " + this.nam

Sinh);

System.out.println("Lớp: " + this.lop);

}

//Overloading constructor method

public SinhVien(String hoTen, int namSinh, float diemTb) {

this.hoTen = hoTen;

this.namSinh = namSinh;

this.diemTb = diemTb;

this.lop = "At7a";

System.out.println("Họ tên: " + this.hoTen + " Năm sinh: " + this.nam

Sinh + " Điểm Trung Bình: " + this.diemTb);

System.out.println("Lớp: " + this.lop);

Page 88: Basic Java - Android.vn

}

}

public class JavaAndroidVn {

public static void main(String[] args) {

SinhVien a = new SinhVien("Vũ Văn T", 1992);

SinhVien b = new SinhVien("Trần Thu P", 1996, 9.0f);

}

}

Bài tập về nhà:

Bài 1: Class Đơn Hàng có các thuộc tính: tên hàng, mã hàng, giá bán, số lượng, tỷ lệ % giảm giá.

Tạo constructor có 4 thuộc tính đầu và thêm một overload constructor với 5 thuộc tính .

Cả 2 constructor đều show ra tổng tiền khi các đối tượng đơn hàng được tạo ra! (Làm tương tự ví dụ

trên).

(Chú ý: Các bạn nên tự giác làm bài tập, hoàn thiện rồi đăng lên, các bài bạn đã làm, nên để code

trong thẻ code - chọn thẻ PHP cho rõ ràng và để ẩn code trong thẻ ẩn spoiler, để khi click vào mới hiện code lên , trước khi thử sức tự làm, bạn không nên nhìn code của các bạn khác đã đăng nhé)

Page 89: Basic Java - Android.vn

Bài 20: Inner class trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 20/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,097

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Khái niệm:

Page 90: Basic Java - Android.vn

Một class nằm trong class khác được gọi là inner class. Inner class có thể coi như một thuộc tính của

class. Nghĩa là bạn không thể khởi tạo đối tượng B nếu chưa khởi tạo đối tượng A. PHP:

class A{

class B{

}

}

PHP:

A obj1 = new A();

A.B obj2 = obj1.new B();

Bởi class B nằm trong class A nên nó có thể truy cập tất cả các thuộc tính hay phương thức của class

A PHP:

class A {

private int x = 8;

class B {

public void printInt() {

System.out.println(x);

}

}

}

Để sử dụng method vừa tạo, ta có thể viết:

obj2.printInt();

2, Một số ví dụ:

Ví dụ 1: Ví dụ bên Blog StudyAndShare

PHP:

public class DemoJavaAndroidVn {

public static void main(String[] args) {

Outer out = new Outer();

out.show();

}

}

class Outer {

public void show() {

Inner in = new Inner();

in.display();

}

class Inner {

public void display() {

System.out.println("Đây là inner class.");

}

}

}

class B {

public void show() {

Outer.Inner in = new Outer().new Inner();

Page 91: Basic Java - Android.vn

in.display();

}

}

Ví dụ 2: PHP:

package javaandroidvn;

class ThoiGian {

public int ngay, thang, nam;

class Time {

public int gio, phut, giay;

public void showTime() {

System.out.println("Ngày " + ngay + "/" + thang + "/" + nam);

System.out.println("Time: " + this.gio + ": " + this.phut + ": "

+ this.giay);

}

}

}

public class JavaAndroidVn {

public static void main(String[] args) {

ThoiGian tg = new ThoiGian();

ThoiGian.Time time = tg.new Time();

tg.ngay = 20;

tg.thang = 7;

tg.nam = 1996;

time.gio = 20;

time.phut = 22;

time.giay = 01;

time.showTime();

}

}

Page 92: Basic Java - Android.vn

Bài tập về nhà: Làm lại thành thạo các ví dụ trên!

Đọc thêm: Các lớp con (lớp lồng nhau) trong lập trình Java

Page 93: Basic Java - Android.vn

Bài 21: Final class, abstract class và interface trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 20/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,773

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Final class (Lớp vô sinh):

Lớp không thể có lớp dẫn xuất từ nó (không có lớp con) gọi là lớp “vô sinh”, hay nói cách khác

không thể kế thừa được từ một lớp “vô sinh”. Lớp “vô sinh” dùng để hạn chế, ngăn ngừa các lớp

khác dẫn xuất từ nó.

Để khai báo một lớp là lớp “vô sinh”, chúng ta dùng từ khóa final class.

Tất cả các phương thức của lớp vô sinh đều vô sinh, nhưng các thuộc tính của lớp vô sinh thì có thể

không vô sinh.

- Xem thêm video blog StudyAndShare

Ví dụ: PHP:

public final class A {

public final int x;

private int y;

public final void method_1(){

// …

}

public final void method_2(){

Page 94: Basic Java - Android.vn

// …

}

}

2, Abstract class (Lớp trừu tượng):

Một lớp trừu tượng thì không có thể hiện nghĩa là ta không thể khởi tạo nó bằng toán tử new, và một

phương thức trong nó là abstract thì chỉ được đưa ra định nghĩa (khai báo) mà không được thực thi và

nó sẽ được override lại trong các lớp con kế thừa. Và trong lớp mà tồn tại phương thức abstract thì

lớp đó cũng được định nghĩa abstract.

- Lớp trừu tượng là lớp không có khai báo các thuộc tính thành phần và các phương thức.

- Bất cứ class nào kết thừa abstract class nào đó phải định nghĩa lại các abstract mothods của lớp mà

nó thừa kế hoặc không định nghĩa lại nhưng phải ghi lại abstract mothods đó.

- Abstract class là class có chứa các abstract mothods

- Các methods trong abstract class phải khai báo với từ khóa abstract (không giống như interface vì

interface mặc định gán abstract cho các mothods)

- Một abstract class có thể chứa cả abstract mothods và các mothods thường.

- Khi một class có chứa abstract mothod thì bắt buộc phải có từ khóa abstract đằng trước tên class đó.

PHP:

abstract class A{

abstract void method_1();

}

public class B extends A{

@Override

public void method_1(){

// cài đặt chi tiết cho phương thức method_1

// trong lớp con B.

// …

}

}

public class C extends A{

@Override

public void method_1(){

// cài đặt chi tiết cho phương thức method_1

// trong lớp con C.

// …

}

}

Lưu ý:

* Các phương thức được khai báo dùng các tiền tố private và static thì không được khai báo là trừu

tượng abstract. Tiền tố private thì không thể truy xuất từ các lớp dẫn xuất, còn tiền tố static thì chỉ

dùng riêng cho lớp khai báo mà thôi.

* Phương thức trong abstract class có 2 cách để khai báo:

- Khai báo bình thường như class

- Khai báo giống như interface nhưng phải có thêm từ khóa abstract

Code demo: PHP:

package java.demo.android.vn;

Page 95: Basic Java - Android.vn

abstract class nhanSu {

abstract void show();

}

class hocSinh extends nhanSu {

public String hoTen;

public int namSinh;

public void show() {

System.out.println("Hello " + hoTen + " Năm sinh: " + namSinh);

}

}

public class JavaDemoAndroidVn {

public static void main(String[] args) {

hocSinh a = new hocSinh();

a.hoTen = "Vũ Văn A";

a.namSinh = 1992;

a.show();

}

}

3, Interface (Khác với GUI - Nó không phải là giao diện người

dùng)

- Như chúng ta đã biết một lớp trong java chỉ có một siêu lớp (super class) trực tiếp hay một cha duy

nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi-inheritance) trong lập trình hướng

đối tượng, Java thay thế bằng interface. Một lớp có thể kế thừa từ nhiều interface với các lớp khác để

thừa hưởng thêm vùng dữ liệu và phương thức của các interface này.

- Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là các hằng (khai báo

dùng từ khóa final) và các phương thức của interface là trừu tượng (mặc dù không có từ

khóa abstract).

- Mothods trừu tượng là các mothods chỉ có phần header, không có phần body.(Xem ví dụ phía dưới)

- Trong các lớp có cài đặt các interface ta phải tiến hành cài đặt cụ thể các phương thức này.

- Interface được định nghĩa nhằm làm cho code rành mạch hơn vì các class có thể implements các

interface.

Ví dụ: Code ví dụ của video bên blog StudyAndShare

PHP:

public class DemoJavaBasic {

public static void main(String[] args) {

Manager mana = new Manager();

mana.show();

}

}

Page 96: Basic Java - Android.vn

interface Human{

public static final int AVG_AGE = 100;

int AVG_WEIGHT = 60;

public abstract void show();

void study();

}

class Manager implements Human{

@Override

public void show() {

System.out.println("Tuoi trung bình: "+ AVG_AGE);

}

@Override

public void study() {

// TODO Auto-generated method stub

}

}

Có một vấn đề khác với lớp là một giao diện (interface) không chỉ có một giao diện cha trực tiếp mà

có thể dẫn xuất cùng lúc nhiều giao diện khác (hay có nhiều giao diện cha). Khi đó nó sẽ kế thừa tất

cả các giá trị hằng và các phương thức của các giao diện cha. Các giao diện cha được liệt kê thành

chuỗi và cách nhau bởi dấu phẩy “,”. Khai báo như sau: PHP:

public interface InterfaceName extends interface1, interface2,interface3{

// …

}

Ví dụ: PHP:

interface DienTich {

public abstract void sHinhVuong(float a);

public abstract void sHinhChuNhat(float a, float b);

}

interface ChuVi {

public abstract void cVHinhVuong(float a);

public abstract void cVHinhChuNhat(float a, float b);

}

interface CongThuc extends DienTich, ChuVi {

}

class CongThucTinh implements CongThuc {

//Hoặc viết là class CongThucTinh implements DienTich,ChuVi cũng được!

@Override

public void sHinhVuong(float a) {

System.out.println("Diện tích hình vuông là: " + a * a);

Page 97: Basic Java - Android.vn

}

@Override

public void sHinhChuNhat(float a, float b) {

System.out.println("Diện tích hình chữ nhật là: " + a * b);

}

@Override

public void cVHinhVuong(float a) {

System.out.println("Chu vi hình vuông là: " + 4 * a);

}

@Override

public void cVHinhChuNhat(float a, float b) {

System.out.println("Chu vi hình chữ nhật là: " + 2 * (a + b));

}

}

public class JavaAndroidVn {

public static void main(String[] args) {

CongThucTinh x = new CongThucTinh();

x.sHinhVuong(5.0f);

x.cVHinhVuong(5.0f);

x.sHinhChuNhat(5.5f, 10.0f);

x.cVHinhChuNhat(5.5f, 10.0f);

}

}

Đọc thêm về Interface: Các interface (giao diện, bề mặt) trong lập trình Java

4, So sánh abstract class và interface:

Page 98: Basic Java - Android.vn

Mấy đoạn này là mình sưu tầm trên mạng nhé:

- Một class chỉ có thể kế thừa từ một abstract class, nhưng có thể kế thừa nhiều interface.

- Trong Interface chỉ có thể khai báo các fields, methods, mà không được hiện thực nó. Còn đối với

abstract thì dùng các biến, hiện thực cách methods.

- Các fields, methods trong interace đều là public và bắt buộc các class kế thừa phải cài đặt nó

(abstract). Trong abstract class thì có các fields, methods có thể là private, internal, public, protected

và có thể là abstract hoặc non-abstract.

- Interface dùng để gom các hành động cần được hiện thực, các khả năng của một đối tượng, còn

abstract class cho các lớp thừa kế cùng 1 loại, tính chất hay trạng thái.

- Abstract class có tốc độ thực thi nhanh hơn interface.

- Thêm 1 tính năng mới vào interface sẽ phá vỡ toàn bộ các lớp hiện thực, còn abstract thì không.

- Ví dụ về interface, các thành viên của interface phải được thực thi trong các lớp mà kế thừa từ nó.

- Nhìn một cách nào đó, bạn có thể thấy rằng, Interface giống như những câu lạc bộ, và Abstract

class là một ông bố trong gia đình.

Một câu lạc bộ luôn luôn có một bộ quy tắc hay nôi qui mà mọi thành viên luôn phải tuân theo.

Một ông bố trong gia đình thì khác, ông có tài sản mà con cháu có thể kế thừa, ông cũng có những

qui định trong di chúc – ai là người được kế thừa tài sản của ông! Bạn có thể tham gia cùng lúc nhiều

câu lạc bộ như việc một Class "kế thừa" (Implement) nhiều Interface.

Một khi đã tham gia vào CLB nào, bạn phải tuân thủ tất cả các qui tắc của CLB đó, không quan tâm

bạn là thành viên của bao nhiêu CLB. Đó là việc tại sao phải Implement đầy đủ các Interface

member.

CLB không để lại tài sản cho các bạn, nhưng bố của bạn thì có, ông ấy cho bạn tài sản (không nếu

ông ấy không thích Laughing) và cũng bắt bạn tuân theo các qui tắc – gia qui. Và một khi đã là con

của người này thì bạn không thể nào là con của người khác giống như không thể kế thừa từ nhiều

Page 99: Basic Java - Android.vn

Abstract Class!

Bài tập về nhà: Làm lại thành thạo các ví dụ trên!

Đọc thêm: Các interface (giao diện, bề mặt) trong lập trình Java

Page 100: Basic Java - Android.vn

Bài 22: Try, catch, finally trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 21/7/13.

Theo dõi chủ đề

Trang 1 / 21 2Tiếp >Tới bài đầu tiên đã đọc

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,580

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Trước khi vào chi tiết, mình sẽ nêu 1 tình huống như này, đó là lỗi chia cho 0.

Bình thường theo các bài trước, các bạn sẽ dùng if, else để loại bỏ, in ra lỗi. (tất nhiên nếu bạn đã biết

try catch rồi thì không nói ). Đọc xong bài này, các bạn sẽ có thêm 1 cách khác, và tất nhiên nó còn

sử dụng để bắt và xử lý nhiều loại lỗi hơn!

Ví dụ: Các bạn xem đoạn code này trước khi đọc lý thuyết, chạy thử nó, có thể nó cũng khá dễ hiểu! PHP:

Page 101: Basic Java - Android.vn

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

int a = 5;

int b = 0;

//Cách các bài trước thường làm, dùng if, else:

if (b == 0) {

System.out.println("Lỗi chia cho 0");

} else {

System.out.println("a/b = " + a / b);

}

System.out.println("\nCách dùng try - catch - finally \n");

//Sử dụng try, catch để bắt lỗi:

try {

System.out.println("a/b = " + a / b);

} catch (Exception e1) {

System.out.println("Có lỗi gì đó xảy ra ");

System.out.println("Tên lỗi là: " + e1);

} finally {

System.out.println("Có lỗi hay không thì cái dòng cuối cùng này v

ẫn được in ra!");

}

}

}

1, Try - catch:

- Trong ví dụ trên, trong khối try{} là những dòng lệnh chúng ta cần thực hiện!

Khối catch (Exception e1) {} là nơi chứa các dòng lệnh thực hiện khi phát hiện lỗi!

- Ở đây, ta cần hiểu rõ khái niệm Exception:

Exception (Ngoại lệ) là sự kiện xảy ra khi một chương trình đang chạy mà phát sinh ra lỗi. Nó sẽ

làm gián đoạn chương trình!

(Exception e1) trong đó "e1" là tên của được gán nếu đối tượng bị lỗi, các bạn có thể đặt tên này

bằng các từ khác.

- Bạn có thể in "e1" ra ngoài, sẽ thấy được lỗi cụ thể!

- Exception là lớp cha, nó nói chung, và in ra các lỗi, ngoài ra còn có lớp con cụ thể và các ngoại lệ

khác như sau:

Exception | Lớp nền của run-time

NullPointerException | Một đối tượng không tồn tại

ClassNotFoundException | Không tìm thấy Class

FileNotFoundException | Không tìm thấy file

SecurityException | Exception liên quan đến bảo mật

ArrayIndexOutOfBoundsException | Vượt quá chỉ mục của mảng

IllegalAccessException | Truy cập không hợp lệ

IllegalArgumentException | Đối số hàm

Page 102: Basic Java - Android.vn

ArithmeticException | Lỗi thực thi một phép toán

NumberFormatException | Định dạng số không đúng

IOException | Lỗi nhập xuất

EOFException | Kết thúc một tập tin

NoSuchMethodException | Sai tên phương thức

InterruptedException | Ngắt luồng đang được thực thi

Ví dụ: In ra lỗi cụ thể vượt quá chỉ mục của mảng. PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

int arrInt[] = {1, 2, 4, 7, 10};

try {

System.out.println("arrInt[6] = " + arrInt[6]);

} catch (ArrayIndexOutOfBoundsException e2) {

System.out.println("Lỗi! Vượt quá chỉ mục của mảng! " + e2);

}

}

}

Ngoài ra, để in nhiều Exception thì ra làm như sau: PHP:

try {

//Nội dung muốn bẫy lỗi

} catch (ExceptionType1 e) {

//Khối lệnh cho lỗi

}catch (ExceptionType2 e1) {

//Khối lệnh cho lỗi

} catch (Exception ex) {

//Exception cho những cái còn lại

}

Trong đó ExceptionType là những loại Exception cụ thể đã nêu ở phía trên!

2, Finally?

Nó nằm ở cuối cùng của khối lệnh try - catch - finally, nó luôn luôn được thực hiện ngay cả khi

chương trình có bắt được lỗi

hay không!

Trong khối lệnh đầy đủ như ví dụ ở đầu bài, dòng System.out.println("Có lỗi hay không thì cái dòng

cuối cùng này vẫn được in ra!");

Luôn luôn được thực hiện và in ra khi bạn gán bất giá trị nào cho b!

Xem thêm video nói khá đầy đủ về try - catch - finally của Blog StudyAndShare

Bổ sung thêm video về throw and throws

Page 103: Basic Java - Android.vn

Bài tập về nhà: Làm lại bài giải phương trình ax + b = 0 . Lập trình hướng đối tượng. Các hệ số nhập vào từ bàn

phím. Sử dụng try - catch để bẫy các lỗi khi nhập sai kiểu dữ liệu, ví dụ nhập số lại nhập chữ. Bẫy lỗi

chia cho 0.

Page 104: Basic Java - Android.vn

Bài 23: Enum trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 21/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,733

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Kiểu dữ liệu Enum?

Kiểu dữ liệu Enum gần giống với kiểu dữ liệu Array, nhưng các phần tử có thể bổ sung thêm các

Page 105: Basic Java - Android.vn

phương thức!

Enum là 1 kiểu dữ liệu liệt kê. Giúp bạn tổ chức dữ liệu khoa học hơn, code được trong sáng dễ hiểu

hơn.

Ví dụ: Lấy từ blog StudyAndShare:

PHP:

package javaandroidvn;

public class JavaAndroidVn {

enum COLOR {

RED, BLUE, YELLOW

};

public static void main(String[] args) {

System.out.println(COLOR.BLUE);

System.out.println(COLOR.RED);

System.out.println(COLOR.YELLOW);

System.out.println("Cách 2: ");

COLOR c = COLOR.RED;

System.out.println(c);

System.out.println(c.YELLOW);

if (c == COLOR.RED) {

System.out.println("True");

} else {

System.out.println("False");

}

}

}

2, Switch case với Enum:

Code demo: PHP:

package javaandroidvn;

public class JavaAndroidVn {

enum COLOR {

RED, BLUE, YELLOW

};

public static void main(String[] args) {

COLOR c = COLOR.RED;

switch (c) {

case RED: {

System.out.println("Red");

Page 106: Basic Java - Android.vn

break;

}

case BLUE: {

System.out.println("Blue");

break;

}

case YELLOW: {

System.out.println("Yellow");

break;

}

}

}

}

3, Thuộc tính và phương thức trong Enum:

Ví dụ: Lấy dựa vào Video blog StudyAndShare:

PHP:

package javaandroidvn;

public class JavaAndroidVn {

enum COLOR {

RED(5), BLUE(6), YELLOW(7), GREEN(8);

private int value;

COLOR(int value) {

this.value = value;

}

public int getValue() {

return this.value;

}

};

public static void main(String[] args) {

COLOR c = COLOR.BLUE;

System.out.println(c + ": " + c.getValue());

System.out.println("ordinal BLUE: " + c.ordinal());

c = COLOR.GREEN;

System.out.println("ordinal GREEN: " + c.ordinal());

}

}

Page 107: Basic Java - Android.vn

Bài tập về nhà: Xem kỹ các video trong bài, làm lại các ví dụ!

Page 108: Basic Java - Android.vn

Bài 24: String và một số phương thức của lớp String trong

Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 21/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,689

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Page 109: Basic Java - Android.vn

Ở những bài trước, chúng ta đã làm quen với String, khi nhập xuất dữ liệu. Trong bài hôm nay, mình

sẽ giới thiệu thật kỹ về lớp này. Tính áp dụng của bài này trong thực tế là rất cao, nên các bạn thật

chú ý làm các ví dụ và bài tập về nhà ở phía cuối. Bài này rất dễ nhưng mình xin nhắc lại là bài này

hết sức quan trọng!

1, Khái niệm, cách khai báo và khởi tạo!

a, Khái niệm: Chuỗi là tập các kí tự đứng liền nhau được giới hạn trong dấu ngoặc kép như: "Hello thế giới Java",

"Hello Android.Vn - Tôi Yêu các bạn!"

Còn các ký tự các bạn nhớ là trong ngoặc đơn 'c', 'a', 'b' ...tránh nhầm lẫn chỗ này!

b, Cách khai báo, khởi tạo:

Các bạn xem code demo dưới đây là hiểu ngay nhé, mình giới thiệu 3 cách khởi tạo ứng với 3 chuỗi

str1, str2, str3:

PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

String str1 = new String();

str1 = "Hello Android.Vn";

String str2 = new String ("Xin chào các bạn, tôi đang tham gia Androi

d.Vn");

String str3 = "Tôi yêu Android.Vn";

System.out.println(str1+"\n"+str2+"\n"+str3);

}

}

c, Khởi tạo chuỗi từ mảng các ký tự: Code demo: Ở đây có 2 cách, và mình bổ sung thêm phần cộng 2 chuỗi - mình cũng chưa nói ở

những bài trước:

PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

char ch[] = {'A', 'n', 'd', 'r', 'o', 'i', 'd', '.', 'V', 'n'};

String str1 = new String(ch);

System.out.println("str1: " + str1);

String str2 = new String(ch, 2, 5); //Lấy từ vị trí số 2, và lấy 5 ký

tự trong mảng kể từ vị trí đó

System.out.println("str2: " + str2);

//Cộng 2 chuỗi - phần này bổ sung thêm

String str3 = str1+ str2;

//String str3 = str1.concat(str2); Cách này cũng nối được 2 chuỗi!

Page 110: Basic Java - Android.vn

System.out.println("str3: "+str3);

}

}

2, Chuyển chuỗi sang mảng ký tự:

Phần 1c, mình đã chia sẻ các phương thức chuyển từ mảng các ký tự sang chuỗi, phần này sẽ là

ngược lại.

Code demo:

PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

String str = "Android.Vn Android.Vn";

//Chuyển chuỗi thành mảng ký tự!

System.out.println("Chuyển chuỗi thành mảng ký tự!");

char arr[] = str.toCharArray();

for (int i = 0; i < str.length(); i++) {

System.out.print(arr[i] + " ");

}

}

}

3,Các phương thức xử lý chuỗi cơ bản:

Phần này rất dễ hiểu, mình sẽ giải thích luôn các phương thức trong code demo, đoạn nào không

hiểu các bạn hỏi ở phía dưới nhé

**Chú ý: Vị trí các ký tự trong chuỗi cũng giống như trong mảng, bắt đầu từ vị trí số 0 và kết thúc là

(độ dài chuỗi - 1).

PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

String str = "Android.Vn Android.Vn";

System.out.println("str = " + str);

// Lấy từ vị trí số 8 tới cuối cùng của chuỗi

System.out.println("str.substring(8) = " + str.substring(8));

//Lấy từ vị trí số 3 tới vị trí số 9

System.out.println("str.substring(3,9) = " + str.substring(3, 9));

//Độ dài chuỗi:

System.out.println("Độ dài chuỗi: str.length() = " + str.length());

//Lấy ra ký tự trong chuỗi theo chỉ số

char ch;

ch = str.charAt(4);

Page 111: Basic Java - Android.vn

System.out.println("str.charAt(4) = " + ch);

// Thay 1 ký tự bằng ký tự khác trong chuỗi:

System.out.println("Thay tất cả ký tự 'n' bằng ký tự 'x' = " + str.re

place('n', 'x'));

//Tìm chuỗi "And" là chuỗi con của chuỗi str, thay kết quả đầu tiên b

ằng chuỗi "xxx"

System.out.println("Thay And đầu tiên bằng xxx = " + str.replaceFirst

("And", "xxx"));

//Thay toàn bộ chuỗi "And" của chuỗi str bằng chuỗi "xxx":

System.out.println("Thay tất cả And bằng xxx = " + str.replaceAll("An

d", "xxx"));

//Chuyển thành chữ thường:

System.out.println("str chuyển về viết thường: " + str.toLowerCase())

;

//Chuyển thành chữ hoa:

System.out.println("str chuyển về viết hoa: " + str.toUpperCase());

//Loại bỏ khoảng trống 2 bên chuỗi

String str1 = " "+str+" ";

System.out.println(" Android.Vn Android.Vn --> "+str1.trim());

}

}

Những phương thức trên là cơ bản nhưng hay dùng, các bạn có thể tìm hiểu thêm

bằng cách ấn "Ctrl + space"

4, Chuyển kiểu dữ liệu từ String sang số:

Các phương thức chuyển kiểu dữ liệu từ String sang số nằm trong gói thư viện java.lang ta có bảng

các phương thức như sau:

Page 112: Basic Java - Android.vn

Ví dụ:

PHP:

String str =new String(“987”);

int a = Integer.parseInt(str);

Kết quả là a = 987;

Mục 4 này thực tế cũng rất hay dùng nhé, các bạn chú ý!

Bổ sung thêm video bên blog StudyAndShare:

Bài tập về nhà:

Page 113: Basic Java - Android.vn

Một bài nho nhỏ thôi, còn lại, chúng ta sẽ thực hành với String kèm theo ở các bài tập các bài sau!

Khai báo 1 mảng các chuỗi là tên học sinh. Tìm kiếm tất cả các học sinh họ "Nguyễn". In kết quả ra

màn hình.

Xem thêm phần mở rộng, cũng hết sức quan trọng:

Phương thức toString (blog studyandshare)

StringBuilder và StringBuffer (blog studyandshare)

Page 114: Basic Java - Android.vn

Bài 25: So sánh chuỗi trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 21/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,244

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Ở Bài 24, chúng ta đã làm quen với các phương thức xử lý chuỗi. Nó rất quan trọng, và ngoài ra nó

sẽ thường kết hợp với cá phương thức so sánh nữa để đạt được yêu cầu cần làm trong 1 chương trình

cụ thể! Đặc biệt là những bài tìm kiếm, sắp xếp!

Dưới đây, mình chỉ giới thiệu một vài phương thức cơ bản để so sánh 2 chuỗi hay dùng nhất, các bạn

cần tự tìm hiểu thêm nếu như cần! (Ctrl + space)

Page 115: Basic Java - Android.vn

Code sẽ kèm theo chú thích cụ thể từng phương thức, nếu bạn có gì thắc mắc, hay khó hiểu, bạn có

thể bình luận phía dưới!

PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

String str1 = "Android.Vn Android.Vn";

String str2 = "android.vn android.vn";

System.out.println("So sánh phân biệt chữ hoa chữ thường: "+str1.equa

ls(str2));

System.out.println("So sánh không phân biệt hoa thường: "+str1.equals

IgnoreCase(str2));

// So sánh thứ tự a, b, c ....

String str3 = "abc";

String str4 = "bcde";

System.out.println("So sánh 2 chuỗi thường!");

System.out.println(""+str3.compareTo(str4)); //str3 < str4 , so sánh

trả về -1

System.out.println(""+str4.compareTo(str3)); // str4 > str3, so sánh

trả về 1

System.out.println(""+str3.compareTo(str3)); // str3 = str3, so sánh

trả về 0

System.out.println("So sánh 2 chuỗi hoa và thường");

String str5 = "ANDroid.Vn";

String str6 = "android.vn";

System.out.println(""+str5.compareToIgnoreCase(str6)); // KHông phân

biệt hoa và thường

System.out.println(""+str5.compareTo(str6)); // Phân biệt ch

ữ hoa và chữ thường!

System.out.println("Chuỗi này có là tập con của chuỗi kia không?");

String str7 = "android.vn";

String str8 = "vn";

//Quá trình so sánh có phân biệt chữ hoa và chữ thường!

System.out.println("Chuỗi vn nằm ở vị trí thứ "+str7.indexOf(str8)+"

của chuỗi android.vn");

//Khi so sánh không tìm thấy thì sẽ trả về -1

str8 = "TN";

System.out.println("Chuỗi TN nằm ở vị trí thứ "+str7.indexOf(str8)+"

của chuỗi android.vn");

System.out.println("Chuỗi này có bắt đầu hay kết thúc bằng chuỗi kia

không?");

str7 = "android.vn";

String str9 = "and";

String str10 = "roid.vn";

System.out.println("str7.startsWith(str9) = "+str7.startsWith(str9));

System.out.println("str7.endsWith(str10) = "+str7.endsWith(str10));

Page 116: Basic Java - Android.vn

}

}

Bài tập về nhà:

Tạo 1 mảng các chuỗi là danh sách tên học sinh. Nhập vào 1 chuỗi nào đó.

Sắp xếp danh sách tên theo thứ tự bảng chữ cái a, b, c.....

Tìm kiếm tất cả các tên học sinh giống tuyệt đối hoặc gần giống với từ khóa tìm kiếm đều được hiện

ra.

Ví dụ nhập từ khóa tìm kiếm: "hoang" thì sẽ hiện ra tất cả các tên sau (nếu như chúng có trong danh

sách):

Hoang Thi Yen, Nguyen Hoang Hiep, Vu Van Hoang, hoang, Hoang, hoang van tien, ... (kết quả tìm kiếm không phân biệt chữ hoa và chữ thường!)

Page 117: Basic Java - Android.vn

Bài 26: Giới thiệu luồng và tập tin (Streams & Files) trong

Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 22/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,408

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Page 118: Basic Java - Android.vn

- Với những kiến thức ở các bài trước, sau khi chương trình kết thúc, dữ liệu sẽ biến mất, vì nó chỉ

được lưu tạm trong RAM. Tắt chương trình hoặc máy tắt đột ngột cũng đồng nghĩa với việc mất sạch

dữ liệu trong chương trình. Điều đó thực sự sẽ không thể đáp ứng được nhu cầu, vì thực tế hầu như

các chương trình đều cần lưu được lại dữ liệu để chúng ta có thể mở lại xem, hoặc tiếp tục chương

trình, nạp thêm dữ liệu ...

- Ở bài này, chúng ta sẽ cùng nhau làm quen với khái niệm luồng (streams) và file. Công việc này nó

thuộc 1 phần của xử lý các luồng.

Từ đó chúng ta biết các làm cho chương trình có thể đọc, ghi dữ liệu trong bộ nhớ lưu trữ, sau này

còn có thể liên quan tới cách xử lý, trao đổi dữ liệu thông qua các kết nối mạng!

1, Luồng (Streams)

a, Khái niệm luồng

- Việc nhập xuất dữ liệu trong thực tế rất đa dạng. Nhập dữ liệu có thể là từ bàn phím, từ trên mạng,

máy scan, camera, .v.v..v. Xuất dữ liệu có thể là ghi ra bộ nhớ, in ra màn hình, máy in, ..v..v.. Những

hoạt động đó được gọi chung lại 1 khái niệm gọi là luồng (stream). Luồng là nơi có thể “sản xuất” và

“tiêu thụ” thông tin.

- Trong lập trình Java, luồng thường được hệ thống xuất nhập gắn kết với một thiết bị vật lý. Thực tế

có rất nhiều các thiết bị vật lý khác nhau, nhưng các luồng lại có cùng 1 nguyên tắc giống nhau để

chúng ta dễ dàng xử lý. Vì vậy cùng một lớp, phương thức xuất nhập có thể dùng chung cho các thiết

bị vật lý khác nhau. Ví dụ cùng là một phương thức có thể dùng để

ghi dữ liệu ra console, đồng thời cũng có thể dùng để ghi dữ liệu xuống một file trên đĩa. Java hiện

thực luồng bằng tập hợp các lớp phân cấp trong gói java.io.

- Java định nghĩa 2 kiểu luồng: byte và ký tự (phiên bản gốc chỉ định nghĩa kiểu luồng byte, và sau

đó luồng ký tự được thêm vào trong các phiên bản về sau).

- Luồng ký tự được thiết kế hỗ trợ việc nhập xuất dữ liệu kiểu ký tự (Unicode). Trong một vài trường

hợp luồng ký tự sử dụng hiệu quả hơn luồng byte, nhưng ở mức hệ thống thì tất cả những xuất nhập

Page 119: Basic Java - Android.vn

đều phải qui về byte. Luồng ký tự hỗ trợ hiệu quả chỉ đối với việc quản lý, xử lý các ký tự.

b, Luồng byte (Byte Streams)

- Các luồng byte được định nghĩa dùng hai lớp phân cấp. Mức trên cùng là hai lớp trừu tượng

InputStream và OutputStream. InputStream định nghĩa những đặc điểm chung cho những luồng nhập

byte. OutputStream mô tả cách xử lý của các luồng xuất byte.

- Các lớp con dẫn xuất từ hai lớp InputStream và OutputStream sẽ hỗ trợ chi tiết tương ứng với việc

đọc ghi dữ liệu trên những thiết bị khác nhau. Có rất nhiều các lớp khác nhau, nhưng khi bạn đã nắm

vững, sử dụng thành thạo một luồng byte nào đó thì bạn sẽ dễ dàng làm việc với những luồng còn lại

nhanh thôi!

Page 120: Basic Java - Android.vn
Page 121: Basic Java - Android.vn

c, Luồng ký tự (Character Streams)

- Các luồng ký tự được định nghĩa dùng hai lớp phân cấp. Mức trên cùng là hai lớp trừu tượng

Reader và Writer.

- Lớp Reader dùng cho việc nhập dữ liệu của luồng, lớp Writer dùng cho việc xuất dữ liệu cua luồng.

Những lớp dẫn xuất từ Reader và Writer thao tác trên các luồng ký tự Unicode.

Page 122: Basic Java - Android.vn

d, Những luồng được định nghĩa trước (The Predefined Streams)

- Tất cả các chương trình viết bằng java luôn tự động import gói java.lang. Gói này có định nghĩa lớp

System, bao gồm một số đặc điểm của môi trường run-time, nó có ba biến luồng được định nghĩa

trước là in, out và err, các biến này là các fields được khai báo static trong lớp System.

Page 123: Basic Java - Android.vn

- System.out: luồng xuất chuẩn, mặc định là console.

System.out là một đối tượng kiểu PrintStream.

- System.in: luồng nhập chuẩn, mặc định là bàn phím.

System.in là một đối tượng kiểu InputStream.

- System.err: luồng lỗi chuẩn, mặc định cũng là console.

System.out cũng là một đối tượng kiểu PrintStream

giống System.out.

2, Sử dụng luồng Byte

- Như chúng ta đã biết hai lớp InputStream và OutputStream là các lớp cha đối với tất cả những lớp

luồng xuất nhập kiểu byte. Những phương thức trong hai lớp cha này ném ra các lỗi kiểu

IOException. Những phương thức định nghĩa trong 2 lớp cha này là có thể dùng trong các lớp con

của chúng. Vì vậy tập các phương thức đó là tập tối tiểu các chức năng nhập xuất mà những luồng

nhập xuất kiểu byte có thể sử dụng.

- Những phương thức định nghĩa trong lớp InputStream và OutputStream:

Page 124: Basic Java - Android.vn
Page 125: Basic Java - Android.vn

a, Đọc dữ liệu từ Console Trước đây, khi Java mới ra đời để thực hiện việc nhập dữ liệu từ Console người ta chỉ dùng luồng

nhập byte. Về sau thì chúng ta có thể dùng cả luồng byte và luồng ký tự, nhưng trong một số trường

hợp thực tế để đọc dữ liệu từ Console người ta thích dùng luồng kiểu ký tự hơn, vì lý do đơn giản và

dễ bảo trì chương trình. Ở đây với mục đích minh họa chúng ta dùng luồng byte thực hiện việc nhập

xuất Console.

Ví dụ: Chương trình minh họa việc đọc một mảng bytes từ System.in PHP:

package javaandroidvn;

import java.io.IOException;

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

byte duLieu[] = new byte[100];

System.out.print("Nhập dòng ký tự vào: ");

System.in.read(duLieu);

System.out.print("Dòng ký tự vừa nhập: ");

for (int i = 0; i < duLieu.length; i++) {

System.out.print((char) duLieu[i]);

}

}

}

b, Xuất dữ liệu ra Console

- Tương tự như nhập dữ liệu từ Console, với phiên bản đầu tiên của java để xuất dữ liệu ra Console tả

chỉ có thể sử dụng luồng byte. Kể từ phiên bản 1.1 (có thêm luồng ký tự), để xuất dữ liệu ra Console

có thể sử dụng cả luồng ký tự và luồng byte. Tuy nhiên, cho đến nay để xuất dữ liệu ra Console

thường người ta vẫn dùng luồng byte.

- Chúng ta đã khá quen thuộc với phương thức print() và println(), dùng để xuất dữ liệu ra Console.

Bên cạnh đó chúng ta cũng có thể dùng phương thức write().

Ví dụ: Sử dụng phương thức System.out.write() để xuất ký tự ’x’ và mảng ký tự ch[] ra Console PHP:

package javaandroidvn;

public class JavaAndroidVn {

public static void main(String[] args) {

char ch[] = {'a', 'c', 'd', 'e'};

int b;

b = 'x';

System.out.write(b);

System.out.write('\n');

for (int i = 0; i < ch.length; i++) {

System.out.write(ch[i]);

}

System.out.write('\n');

Page 126: Basic Java - Android.vn

}

}

Bài tập về nhà:

Các bạn đọc kỹ lý thuyết trên và thử làm, chạy lại các ví dụ trên! Bài này chỉ mang tính giới thiệu, tổng quát, chúng ta sẽ đi vào 1 số phần cụ thể ở bài sau!

Page 127: Basic Java - Android.vn

Bài 27: Đọc và ghi file dùng luồng byte trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 23/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,108

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

- Với cách đọc ghi này ta tạo một luồng Byte gắn với file chỉ định dùng FileInputStream và

FileOutputStream.

- Để mở một file, đơn giản chỉ cần tạo một đối tượng của những lớp này, tên file cần mở là thông số

trong constructor. Khi file mở, việc đọc và ghi dữ liệu trên file được thực hiện một cách bình thường

thông qua các phương thức cung cấp trong luồng.

Page 128: Basic Java - Android.vn

1, Đọc dữ liệu từ file dùng luồng byte:

- Mở một file để đọc dữ liệu FileInputStream(String fileName) throws FileNotFoundException. Nếu

file không tồn tại: thì ném ra FileNotFoundException.

- Đọc dữ liệu: dùng phương thức read():

int read( ) throws IOException: đọc từng byte từ file và trả về giá trị của byte đọc được. Trả về -1 khi

hết file, và ném ra IOException khi có lỗi đọc.

- Đóng file: dùng phương thức close():

void close( ) throws IOException: sau khi làm việc xong cần đóng file để giải phóng tài nguyên hệ

thống đã cấp phát cho file.

Ví dụ: PHP:

package javaandroidvn;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

/*

Tạo file androidvn.txt ở ổ E, gõ nội dung văn bản vào đó rồi lưu lại!

Hiển thị nội dung của một file tên androidvn.txt lưu tại E:\androidvn.txt

*/

public class JavaAndroidVn {

public static void main(String args[]) throws IOException {

FileInputStream f;

try {

f = new FileInputStream("E:\\androidvn.txt");

} catch (FileNotFoundException exc) {

System.out.println("File Not Found");

return;

} catch (ArrayIndexOutOfBoundsException exc) {

System.out.println("Usage: ShowFile File");

return;

}

// Đọc cho tới cuối file

int i;

do {

i = f.read();

if (i != -1) {

System.out.print((char) i);

}

} while (i != -1);

f.close();

}

}

2. Ghi dữ liệu xuống file dùng luồng byte:

- Mở một file để ghi dữ liệu FileOutputStream(String fileName) throws FileNotFoundException

Page 129: Basic Java - Android.vn

Nếu file không tạo được: thì ném ra FileNotFoundException

- Ghi dữ liệu xuống: dùng phương thức write():

void write(int byteval) throws IOException: ghi một byte xác định bởi tham số byteval xuống file, và

ném ra IOException khi có lỗi ghi.

- Đóng file: dùng phương thức close():

void close( ) throws IOException: sau khi làm việc xong cần đóng file để giải phóng tài nguyên hệ

thống đã cấp phát cho file.

Ví dụ: Chương trình sẽ tự tạo file "E:\\output.txt", ghi vào các ký tự từ a -> z PHP:

package javaandroidvn;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

class JavaAndroidVn {

public static void main(String args[]) throws IOException {

FileOutputStream fout;

// Tạo file mới!

try {

fout = new FileOutputStream("E:\\output.txt");

} catch (FileNotFoundException exc) {

System.out.println("Error Opening OutputFile ");

return;

}

// Ghi file theo từng ký tự từ a -> z

int i = 'a';

int j = 'z';

for (i = 'a'; i <= j; i++) {

fout.write(i);

}

fout.close();

}

}

3, Copy file trong Java:

Dưới đây là 1 chương trình đơn giản để copy file trong Java, nó chưa thực sự tối ưu vì mình thấy tốc

độ của nó rất chậm. Bạn có thể dùng để copy bất cứ định dạng nào, không phải chỉ riêng file văn

bản! Nó dùng cách đọc ghi file dùng luồng byte như trên! PHP:

package javaandroidvn;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

class JavaAndroidVn {

Page 130: Basic Java - Android.vn

public static void main(String args[]) throws IOException {

FileInputStream fin;

FileOutputStream fout;

try {

// open input file

try {

fin = new FileInputStream("E:\\in.mp3");

} catch (FileNotFoundException exc) {

System.out.println("Input File Not Found");

return;

}

// open output file

try {

fout = new FileOutputStream("E:\\out.mp3");

} catch (FileNotFoundException exc) {

System.out.println("Error Opening OutputFile ");

return;

}

} catch (ArrayIndexOutOfBoundsException exc) {

System.out.println("Usage: CopyFile From To");

return;

}

// Copy File

int i;

try {

do {

i = fin.read();

if (i != -1) {

fout.write(i);

}

} while (i != -1);

} catch (IOException exc) {

System.out.println("File Error");

}

fin.close();

fout.close();

}

}

Page 131: Basic Java - Android.vn

Bài tập về nhà:

Biến màn hình console thành màn hình lệnh như sau:

- Nếu bạn gõ từ "copy", thì chương trình sẽ hỏi địa chỉ file cần copy, bạn gõ địa chỉ file cần copy vào,

nếu không tồn tại sẽ bắt nhập lại, nếu tồn tại sẽ hỏi địa chỉ file đích, sau đó chương trình sẽ copy file

đó. Tương tự với các lệnh "move", "delete"

- Gợi ý cách xóa file:

Thêm 2 dòng lệnh như ví dụ này là bạn có thể xóa được 1 file: PHP:

File f = new File("E:\\in.mp3");

f.delete();

** Mình chỉ nêu ý cơ bản bài như vậy, bạn hãy cố gắng làm chương trình thật tốt và tiện lợi với

người dùng! Ví dụ nhập lệnh "copy str1 str2" với str1, str2 là đường dẫn nguồn và đích, rồi Enter nó

sẽ copy luôn. ** Làm xong, đừng quên share lên forum để mọi người cùng tham khảo nhé

Page 132: Basic Java - Android.vn

Bài 28: Đọc và ghi dữ liệu nhị phân dùng luồng byte trong

Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 23/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,466

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Ở bài trước chúng ta đã đọc và ghi các bytes dữ liệu là các ký tự mã ASCII. Để đọc và ghi những giá

trị nhị phân của các kiểu dữ liệu trong java, chúng ta sử dụng DataInputStream và

DataOutputStream.

Page 133: Basic Java - Android.vn

1, DataOutputStream:

Dùng để hiện thực interface DataOuput.

Interface DataOutput có các phương thức cho phép ghi tất cả những kiểu dữ liệu cơ sở của java đến

luồng (theo định dạng nhị phân).

Contructor: DataOutputStream(OutputStream outputStream)

OutputStream: là luồng xuất dữ liệu. Để ghi dữ liệu ra file thì đối tượng outputStream có thể là

FileOutputStream.

2, DataInputStream:

Dùng để hiện thực interface DataInput.

Interface DataInput có các phương thức cho phép đọc tất cả những kiểu dữ liệu cơ sở của java (theo

định dạng nhị phân).

Page 134: Basic Java - Android.vn

Contructor: DataInputStream(InputStream inputStream)

InputStream: là luồng nhập dữ liệu. Để đọ dữ liệu từ file thì đối tượng InputStream có thể là

FileInputStream.

Ví dụ: Dùng DataOutputStream và DataInputStream để ghi và đọc những kiểu dữ liệu khác nhau

trên file.

*** Chú ý: Trong ví dụ dưới mình bổ sung thêm cách đọc và ghi chuỗi nữa nhé! (writeUTF và

readUTF) PHP:

package javaandroidvn;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

class JavaAndroidVn {

public static void main(String args[]) throws IOException {

DataOutputStream dataOut;

DataInputStream dataIn;

int i = 2013;

double d = 3.14;

boolean b = true;

char ch = 'A';

String str = "Android.Vn";

try {

dataOut = new DataOutputStream(new FileOutputStream("E:\\androidv

n.dat"));

} catch (IOException exc) {

System.out.println("Cannot open file.");

return;

}

try {

System.out.println("Writing Int: " + i);

dataOut.writeInt(i);

System.out.println("Writing Double: " + d);

dataOut.writeDouble(d);

System.out.println("Writing boolean: " + b);

dataOut.writeBoolean(b);

System.out.println("Writing Double: " + 12.2 * 7.4);

dataOut.writeDouble(12.2 * 7.4);

System.out.println("Writing char: " + ch);

dataOut.writeChar(ch);

System.out.println("Writing String: " + str);

dataOut.writeUTF(str);

} catch (IOException exc) {

System.out.println("Write error.");

}

Page 135: Basic Java - Android.vn

dataOut.close();

System.out.println();

// Next, read and show them from file

try {

dataIn = new DataInputStream(

new FileInputStream("E:\\androidvn.dat"));

} catch (IOException exc) {

System.out.println("Cannot open file.");

return;

}

try {

i = dataIn.readInt();

System.out.println("Reading Int: " + i);

d = dataIn.readDouble();

System.out.println("Reading Boolean: " + d);

b = dataIn.readBoolean();

System.out.println("Reading Double: " + b);

d = dataIn.readDouble();

System.out.println("Reading Double: " + d);

ch = dataIn.readChar();

System.out.println("Reading char: " + ch);

str = dataIn.readUTF();

System.out.println("Reading String: " + str);

} catch (IOException exc) {

System.out.println("Read error.");

}

dataIn.close();

}

}

Bài tập về nhà:

Tạo đối 1 tượng SinhVien gồm các thuộc tính: tên, năm sinh, điểm trung bình. Ghi các thuộc tính này

vào file theo kiểu nhị phân.

Đọc file in thông tin ra ngoài.

Page 136: Basic Java - Android.vn

Nếu chạy lại chương trình mà file đã tồn tại thì không tạo đối tượng mới nữa mà in luôn ra thông tin đối tượng đó được đọc từ file!

Page 137: Basic Java - Android.vn

Bài 29: File truy cập ngẫu nhiên (Random Access Files)

trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 23/7/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,364

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

1, Random Access Files?

- Bên cạnh việc xử lý xuất nhập trên file theo kiểu tuần tự thông qua các luồng, java cũng hỗ trợ truy

cập ngẫu nhiên nội dung của một file nào đó dùng RandomAccessFile.

- RandomAccessFile không dẫn xuất từ InputStream hay OutputStream mà nó hiện thực các interface

DataInput, DataOutput (có định nghĩa các phương thức I/O cơ bản).

Page 138: Basic Java - Android.vn

- RandomAccessFile hỗ trợ vấn đề định vị con trỏ file bên trong một file dùng phương thức

seek(long newPos).

2, Ví dụ:

Bài này lý thuyết ngắn, nhưng ví dụ hơi dài, chủ yếu là đọc code để hiểu!

Chương trình sau sẽ ghi 9 số kiểu double xuống file, rồi đọc lên theo thứ tự ngẫu nhiên. Các bạn xem

code có chỗ nào không hiểu cứ bình luận phía dưới, mọi người cùng nhau giải quyết! ^^ PHP:

package javaandroidvn;

import java.io.*;

class JavaAndroidVn {

public static void main(String args[]) throws IOException {

double data[] = {11.2, 13.6, 255.6, 117.92, 2007.96, 8.9, 9.9, 10.0,

100.6};

double d;

RandomAccessFile raf;

try {

raf = new RandomAccessFile("E:\\random.dat", "rw");

} catch (FileNotFoundException exc) {

System.out.println("Cannot open file.");

return;

}

// Write values to the file.

for (int i = 0; i < data.length; i++) {

try {

raf.writeDouble(data[i]);

} catch (IOException exc) {

System.out.println("Error writing to file.");

return;

}

}

try {

// Now, read back specific values

raf.seek(0 * 8); // seek to first double

d = raf.readDouble();

System.out.println("First value is " + d);

raf.seek(8 * 1); // seek to second double

d = raf.readDouble();

System.out.println("Second value is " + d);

raf.seek(8 * 3); // seek to fourth double

d = raf.readDouble();

System.out.println("Fourth value is " + d);

System.out.println();

//Read All data

System.out.println("Read all: ");

for (int i = 0; i < data.length; i++) {

Page 139: Basic Java - Android.vn

raf.seek(8 * i); // seek to ith double

d = raf.readDouble();

System.out.print(d + " ");

}

System.out.println("");

// Now, read every other value.

System.out.println("Here is every other value: ");

for (int i = 0; i < data.length; i += 2) {

raf.seek(8 * i); // seek to ith double

d = raf.readDouble();

System.out.print(d + " ");

}

System.out.println("\n");

} catch (IOException exc) {

System.out.println("Error seeking or reading.");

}

raf.close();

}

}

Bài tập về nhà:

- Tạo chương trình khi chạy lên nếu như không tồn tại file thì tạo file mới như sau:

- Tạo 1 mảng , các phần tử là các số thực. Các số được ghi vào file theo kiểu ghi ngẫu nhiên.

- Nếu file đã tồn tại, hoặc là ở những lần chạy sau, sau khi đã khởi tạo giá trị, chương trình bỏ qua

bước khởi tạo và dựa vào file in ra những số có chỉ số lẻ trong mảng đã nhập trên bằng cách lấy trực tiếp chỉ số khi đọc file theo cách đọc ngẫu nhiên! (Không dùng cách nạp lại cả file vào mảng)

Page 140: Basic Java - Android.vn

Bài 30: Sử dụng luồng ký tự trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 21/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,527

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Ở những bài trước, mình đã giới thiệu với các bạn việc sử dụng luồng byte để nhập và xuất dữ liệu

ký tự. Nhưng trong nhiều trường hợp luồng byte không phải là cách tốt nhất để quản lý nhập xuất dữ

liệu ký tự. Trong lập trình Java có kiểu luồng ký tự phục vụ riêng cho việc nhập xuất dữ liệu trên

luồng. Mức trên cùng là 2 lớp trừu tường Reader và Writer. Các lớp dẫn xuất

từ Reader và Writer hỗ trợ thao tác trên các luồng ký tự Unicode.

- Những phương thức định nghĩa trong lớp trừu tượng

Page 141: Basic Java - Android.vn

Bài này sẽ là nhập xuất ký tự và chuỗi sử dụng luồng ký tự, bài sau mình sẽ giới thiệu cách đọc ghi

file dùng luồng ký tự!

1, Nhập Console dùng luồng ký tự:

- Để đọc dữ liệu nhập từ Console thì lớp tốt nhất là lớp BufferdReader. Nhưng ở đây, chúng ta không

có cách nào xây dựng 1 lớp BufferedReader trực tiếp từ System.in vì thế nên cần chuyển nó thành

luồng ký tự bằng cách dùng InputStreamReader để chuyển byte thành ký tự!

- Để có được một đối tượng InputStreamReader gắn với System.in ta dùng constructor của

Page 142: Basic Java - Android.vn

InputStreamReader.

InputStreamReader(InputStream inputStream) - Tiếp theo dùng đối tượng InputStreamReader đã tạo ra để tạo ra một BufferedReader dùng

constructor BufferedReader.

BufferedReader(Reader inputReader)

**Ví dụ 1: Tạo một đối tượng BufferedReader gắn với bàn phím:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - Sau khi thực hiện câu lệnh trên, br là một luồng ký tự gắn với Console thông qua System.in.

Tiếp theo ta sẽ dùng BufferedReader để đọc từng ký tự từ Console. Việc đọc kết thúc khi gặp dấu

chấm (dấu chấm để kết thúc chương trình). PHP:

package javaandroidvn;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

char c;

BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));

System.out.println("Nhập chuỗi ký tự, kết thúc bằng dấu chấm .");

do {

c = (char) br.read();

System.out.println(c);

} while (c != '.');

}

}

**Ví dụ 2: Dùng BufferedReader đọc chuỗi ký tự từ Console. In ký tự vừa nhập vào! PHP:

package javaandroidvn;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

// Tạo đối tượng BufferedReader sử dụng System.in

BufferedReader br = new BufferedReader(new InputStreamReader(System.i

n));

String str;

System.out.print("Nhập chuỗi: ");

//Nhập chữ không dấu thôi nhé!

str = br.readLine();

System.out.println("Chuỗi vừa nhập là: " + str);

Page 143: Basic Java - Android.vn

}

}

2, Xuất dữ liệu ra Console dùng luồng ký tự

Tiếp tục sẽ là 1 cách khác để xuất dữ liệu ra Console. Ở đây mình nhắc tới lớp PrinWriter, nó là 1

trong các lớp luồng ký tự. Ta cần phải chỉ định System.out cho luồng xuất.

**Ví dụ 3: Tạo đối tượng PrintWriter để xuất dữ liệu ra Console, dùng lệnh:

PrintWriter pw = new PrintWriter(System.out, true);

Tiếp theo dùng PrintWriter để xuất dữ liệu ra Console PHP:

package javaandroidvn;

import java.io.IOException;

import java.io.PrintWriter;

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

int i = 2013;

String str = "Android.Vn ";

//Xuất dữ liệu sử dụng PrintWriter

PrintWriter pw = new PrintWriter(System.out, true);

pw.println("Using a PrintWriter.");

pw.println(str+i);

}

}

Bài tập về nhà:

Làm lại các ví dụ trên! Mọi thắc mắc các bạn có thể bình luận phía dưới, mọi người cùng nhau thảo

luận!

Page 144: Basic Java - Android.vn

Bài 31: Đọc/ghi file dùng luồng ký tự trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 21/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,942

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

- Khi chúng ta thao tác với văn bản, có thể sử dụng luồng byte. Tuy nhiên thì sự lựa chọn tốt nhất

không phải là nó mà là luồng ký tự, việc sử dụng luồng ký tự có ưu điểm là thao tác trực tiếp trên các

ký tự Unicode.

Page 145: Basic Java - Android.vn

- Cụ thể ở bài này mình sẽ giới thiệu 2 lớp luồng thường dùng cho việc đọc , ghi dữ liệu file là

FileReader và FileWriter

1, Ghi dữ liệu xuống file văn bản!

Ví dụ: Nhập danh sách tên của 1 lớp học và ghi chúng xuống file tên là "danhsach.txt". Việc đọc và

ghi kết thúc khi người dùng nhập vào chuỗi "stop". PHP:

package javaandroidvn;

import java.io.BufferedReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStreamReader;

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

String str;

FileWriter fw;

BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));

try {

fw = new FileWriter("E:\\danhsach.txt");

} catch (IOException exc) {

System.out.println("Có lỗi xảy ra");

return;

}

System.out.println("Nhập danh sách tên: ('stop' để kết thúc chương tr

ình)");

do {

System.out.print(": ");

str = br.readLine();

if (str.compareTo("stop") == 0) {

break;

}

str = str + "\n"; //Dùng để xuống dòng khi nhập xong 1 chuỗi!

fw.write(str);

} while (str.compareTo("stop") != 0);

fw.close();

System.out.println("Bạn mở file ở đường dẫn E:\\danhsach.txt, dũ liệu

đã được lưu!");

}

}

2, Đọc dữ liệu từ File văn bản

Page 146: Basic Java - Android.vn

Ví dụ: Đọc và hiển thị nội dung của file "danhsach.txt" lên màn hình. Trong đó file là file văn bản,

trong là danh sách tên ghi theo từng dòng! Chương trình sẽ đọc file văn bản từng dòng! PHP:

package javaandroidvn;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

try (FileReader fr = new FileReader("E:\\danhsach.txt")) {

//Bạn có thể tạo dữ liệu văn bản dạng UTF-8 - Tiếng Việt

BufferedReader br = new BufferedReader(fr);

String s;

//Đọc từng dòng văn bản!

while ((s = br.readLine()) != null) {

System.out.println(s);

}

}catch(IOException e){

System.out.println("Đã có lỗi xảy ra!");

}

}

}

Bài tập về nhà:

Viết chương trình copy nội dung file "input.txt" sang file "output.txt" sử dụng cách đọc ghi văn bản!

Bạn nào làm xong cố gắng bớt chút ít thời gian đăng lên cho các bạn khác cùng tham khảo nhé!

Page 147: Basic Java - Android.vn

Bài 32: Tìm hiểu về lớp File trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 21/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 1,641

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Page 148: Basic Java - Android.vn

- Lớp File thường được dùng để lấy các thông tin về tập tin cũng như thư mục.

- Hình ảnh ở trên chắc chắn các bạn thấy rất quen thuộc, đó là quá trình 1 phần mềm duyệt thư mục

và chờ người dùng tìm, chọn mở 1 file hoặc thư mục nào đó.

- Kiến thức ở mục này sẽ giúp các bạn hiểu bản chất các câu lệnh có thể làm được điều này, tuy

nhiên nếu bạn chưa biết về lập trình giao diện trong Java thì chưa thể làm được, ở loạt bài viết về lập

trình giao diện trong Java mình sẽ nhắc lại và cùng mọi người làm 1 chương trình

có thể duyệt được file, thư mục tương tự như hình ảnh trên!

**Chúng ta bắt đầu vào tìm hiểu về lớp File:

1, Tạo đối tượng File từ đường dẫn tuyệt đối public File(String pathname)

Ví dụ: PHP:

//Tạo trước thư mục "demo" trong ổ E, nếu không chương trình sẽ lỗi

File f = new File("E:\\demo\\androidvn.txt");

f.createNewFile();

2, Tạo đối tượng File từ tên đường dẫn thu mục và tên tập tin trong thư mục đó PHP:

//Tạo trước thư mục "demo" trong ổ E, nếu không chương trình sẽ lỗi

File f = new File("E:\\demo","androidvn2.txt");

f.createNewFile();

3, Tạo đối tượng File từ một đối tượng File khác

public File(File parent, String child)

Ví dụ: PHP:

File dir = new File ("E:\\demo");

File f = new File(dir,"androidvn3.txt");

f.createNewFile();

4, Tạo 1 thư mục với đường dẫn

Ví dụ: PHP:

File f = new File("E:\\demo2");

f.mkdir();

5, Một số phương thức thường gặp của lớp File

Page 149: Basic Java - Android.vn

6, Lấy danh sách tên các tập tin và thư mục con của đối tượng: Ta sử dụng:

- public String[] list() File đang xét và trả về trong một mảng.

Ví dụ: PHP:

package javaandroidvn;

import java.io.File;

import java.io.IOException;

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

//Tạo trước thư mục "demo" trong ổ E, tạo 1 vài file và thư mục trong

đó

File dir = new File("E:\\demo");

File[] listFile = dir.listFiles();

System.out.println("Danh sách file trong thư mục E:\\demo là: ");

for (int i = 0; i < listFile.length; i++) {

if (listFile[i].isFile()) {

System.out.println(listFile[i].getName());

}

}

System.out.println("Danh sách thưc mục trong thư mục E:\\demo là: ");

for (int i = 0; i < listFile.length; i++) {

if (listFile[i].isDirectory()) {

System.out.println(listFile[i].getName());

}

}

}

}

Tham khảo thêm 3 video của anh Việt bên blog StudyAndShare

Page 150: Basic Java - Android.vn

Bài tập về nhà:

(Lần này mình giao bài khó khó chút nhé)

Tạo 1 chương trình gần giống cmd trong ms-dos chạy trên màn hình console, chức năng như sau:

- Bật chương trình lên mặc định vào ổ E (hoặc ổ nào tùy ý), hiện lên E:\\ (Tên đường đang hiện hành)

- Gõ "cd tenThuMuc" thì màn hình chuyển và hiện lên E:\\tenThuMuc trong đó tenThuMuc là tên

thư mục tiếp tục muốn truy xuất.

- Gõ "makeFile tenFile" thì sẽ tạo file trong thư mục hiện hành, trong đó tenFile là tên file cần tạo.

- Từ vị trí con trỏ hiện hành, gõ "show" thì hiển thị ra toàn bộ cấu trúc cây thư mục trong thư mục đó.

....

Trình bày khá dài dòng nhỉ, các bạn cứ cố gắng làm càng giống cmd trong ms-dos càng hay, bạn nào làm xong nhớ share mọi người cùng tham khảo nhé

Page 151: Basic Java - Android.vn

Bài 33: Đọc ghi file theo Object trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 22/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,266

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Page 152: Basic Java - Android.vn

- Đặt 1 tình huống thực tế: khi ta muốn quản lý 1 danh sách sinh viên, tất nhiên sẽ là 1 dãy rất nhiều

đối tượng, mỗi đối tượng sinh viên lại có nhiều thuộc tính: tên, tuổi, điểm, .v..v.. và chúng ta cần lưu

toàn bộ thông tin này vào file, ngoài ra còn phải xử lý, chỉnh sửa thông tin nếu cần. Như vậy, nếu sử

dụng kiến thức ở những bài trước làm điều này thì là rất khó khăn. Nhưng với phần kiến thức ở bài

này thì điều đó lại trở lên cực kỳ dễ dàng. Cụ thể ở bài tập giống như tình huống giả thiết trên, chúng

ta sẽ sử dụng kiểu đọc ghi object để thao thác, lưu trữ từng đối tượng lên file!

- Mình sẽ viết 2 ví dụ cụ thể, với các mức độ khác nhau,từ đơn giản nhất. Nếu bạn thấy khó hiểu chỗ

nào có thể bình luận phía dưới. Mọi người cùng trao đổi.

**Chú ý: Để đọc ghi theo Object trong Java thì tại class Object đó ta cần đặt giao tiếp

java.io.Serializable (implements Serializable)

Ví dụ 1: Đọc ghi 1 đối tượng lên file theo từng object: - Khai báo 1 class SinhVien gồm 2 thuộc tính họ tên, tuổi. Tạo 1 đối tượng cụ thể sinh viên a sau đó

gán thông tin cho sinh viên a rồi ghi đối tượng a này xuống file "E:\\sinhvien.dat"

- Mở file trên ra. Đọc file đó theo kiểu object để lấy đối tượng đó ra, (cần ép kiểu về kiểu dữ liệu của

đối tượng), rồi gán nó vào đối tượng a1. In ra màn hình thông tin đối tượng a1. Code như sau:

PHP:

package javaandroidvn;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

class SinhVien implements Serializable {

public String hoTen;

public int tuoi;

}

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

SinhVien a = new SinhVien();

a.hoTen = "Vũ Văn Tường";

a.tuoi = 21;

try {

FileOutputStream f = new FileOutputStream("E:\\sinhvien.dat");

ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để

ghi file theo từng Object

oOT.writeObject(a); // Ghi Object là đối tượng a xuống file

oOT.close();

f.close();

} catch (IOException e) {

System.out.println("Có lỗi xảy ra!");

}

SinhVien a1 = new SinhVien(); //Tạo đối tượng a1 mới, để phía dưới gá

Page 153: Basic Java - Android.vn

n bằng đối tượng ta lấy được ra từ file

try {

FileInputStream f = new FileInputStream("E:\\sinhvien.dat");

ObjectInputStream oIT = new ObjectInputStream(f); // Sử dụng để đ

ọc file theo từng Object

a1 = (SinhVien) oIT.readObject(); //Đọc Object đầu tiên ép kiểu v

ề kiểu SinhVien sau đó gán bằng đối tượng a1

oIT.close();

f.close();

} catch (IOException io) {

System.out.println("Có lỗi xảy ra!");

} catch (ClassNotFoundException ex) {

System.out.println("Không tìm thấy class");

}

System.out.println("Thông tin sinh vien a1 đọc ra là: \nTên: "+a1.hoT

en+"\nTuổi: "+a1.tuoi);

}

}

Ví dụ 2: Đọc ghi 2 đối tượng lên file theo từng object. Các thuộc tính bài này để

private: (Qua ví dụ này, và kết hợp bài sau, mình sẽ giới thiệu cách đọc ghi 1 danh sách các đối tượng lên

file, giúp việc quản lý danh sách các đối tượng dễ dàng hơn!) PHP:

package javaandroidvn;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

class SinhVien implements Serializable {

private String hoTen;

private int tuoi;

public String getHoTen() {

return hoTen;

}

public void setHoTen(String hoTen) {

this.hoTen = hoTen;

}

public int getTuoi() {

return tuoi;

}

public void setTuoi(int tuoi) {

this.tuoi = tuoi;

}

}

Page 154: Basic Java - Android.vn

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

SinhVien a = new SinhVien();

a.setHoTen("Vũ Văn T");

a.setTuoi(21);

SinhVien b = new SinhVien();

b.setHoTen("Nguyễn Văn A");

b.setTuoi(22);

try {

FileOutputStream f = new FileOutputStream("E:\\sinhvien.dat");

ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để

ghi file theo từng Object

oOT.writeObject(a); // Ghi Object là đối tượng a xuống file

oOT.writeObject(b);

oOT.close();

f.close();

} catch (IOException e) {

System.out.println("Có lỗi xảy ra!");

}

SinhVien a1 = new SinhVien(); //Tạo đối tượng a1 mới, để phía dưới gá

n bằng đối tượng ta lấy được ra từ file

SinhVien b1 = new SinhVien(); //Tạo đối tượng b1 mới, để phía dưới gá

n bằng đối tượng ta lấy được ra từ file

try {

FileInputStream f = new FileInputStream("E:\\sinhvien.dat");

ObjectInputStream oIT = new ObjectInputStream(f); // Sử dụng để đ

ọc file theo từng Object

a1 = (SinhVien) oIT.readObject(); //Đọc Object đầu tiên ép kiểu v

ề kiểu SinhVien sau đó gán bằng đối tượng a1

b1 = (SinhVien) oIT.readObject(); //Đọc Object tiếp theo, ép kiểu

về kiểu SinhVien sau đó gán bằng đối tượng b1

oIT.close();

f.close();

} catch (IOException io) {

System.out.println("Có lỗi xảy ra!");

} catch (ClassNotFoundException ex) {

System.out.println("Không tìm thấy class");

}

System.out.println("Thông tin sinh vien a1 đọc ra là: \nTên: " + a1.g

etHoTen() + "\nTuổi: " + a1.getTuoi());

System.out.println("Thông tin sinh vien b1 đọc ra là: \nTên: " + b1.g

etHoTen() + "\nTuổi: " + b1.getTuoi());

}

}

Page 155: Basic Java - Android.vn

Bài tập về nhà:

Class thẻ thư viện có các thuộc tính: mã thẻ, tên sinh viên, số sách mượn. Tạo ra 3 đối tượng thẻ thư

viện, gán giá trị nhập vào từ bàn phím. Ghi lại thông tin 3 đối tượng này xuống file theo kiểu object rồi đọc file đó, đọc dữ liệu các đối tượng từ trong file vừa ghi, in ra màn hình!

Page 156: Basic Java - Android.vn

Bài 34: ArrayList trong Java (1) Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 23/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 4,056

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

- Thực tế, khi để quản lý 1 danh sách hóa đơn, thông tin khách hàng, học sinh ...v..v..Chúng ta sẽ cần

đến một khái niệm đó là mảng các đối tượng. Nghĩa là mỗi thành phần trong mảng là các đối tượng,

Page 157: Basic Java - Android.vn

các đối tượng lại có rất nhiều thuộc tính.

- Mảng thông thường có thể đáp ứng được một phần, nhưng chưa đủ. Vì trong quá trình thao tác dữ

liệu, ta lại cần thêm, xóa, sửa, chèn. v..v.v.. Nghĩ đến các thao tác này, nếu bạn nào đã từng học C và

Pascal chắc chắn sẽ nghĩ tới con trỏ, vì chỉ có con trỏ mới có thể. Nhưng làm việc với con trỏ trong C

và Pascal khá mệt mỏi và dài dòng, khó hiểu, thậm chí nhiều bạn không thể học nổi khi gặp phần này

và bỏ cuộc với lập trình vì nó! ^^

- Nói vậy các bạn đừng lo lắng, vì ArrayList học cực kỳ dễ dàng, thậm chí bạn không hiểu con trỏ

bạn vẫn có thể thao tác được!

- ArrayList có thể nói nó là 1 phiên bản nâng cấp của mảng. Nó cũng truy xuất dữ liệu theo chỉ số,

nhưng nó có nhiều điều vượt trội hơn rất nhiều so với mảng!

**Một trong những điều khiến mình rất thích khi học các bài Java cơ bản đó chính là ArrayList.

Mình sẽ giới thiệu 1 số phương thức thông dụng hay dùng trong ArrayList , và sẽ giải thích chúng

thông qua các ví dụ phía dưới, còn lại khi thực hiện các bạn tự tìm hiểu bằng "Ctrl + cách"

Ví dụ 1: Tạo 1 mảng kiểu ArrayList để xử lý 1 danh sách tên học sinh, đơn giản thôi nhé, chưa xử lý các đối

tượng nhiều thuộc tính. Ví dụ này chỉ là 1 ArrayList giống 1 mảng thông thường. Với ví dụ này,

chúng ta sẽ làm quen với khác phương thức thêm, chèn, sửa, xóa! PHP:

package javaandroidvn;

import java.util.ArrayList;

public class JavaAndroidVn {

public static void main(String[] args) {

ArrayList listHS = new ArrayList(); // Khai báo 1 đối tượng ArrayList

String ten1 = "Vu Van T"; //Tạo đối tượng ten1 là tên 1 người

listHS.add(ten1); //Thêm đối tượng ten1 vào trong listHS

String ten2 = "Nguyen Van A";

listHS.add(ten2);

String ten3 = "Nguyen Van B";

listHS.add(ten3);

String ten4 = "Vu Van C";

listHS.add(ten4);

//Như vậy tới đoạn code trên, ArrayList listHS đã có 4 đối tượng được

thêm vào!

// Tương tự như mảng, ArrayList truy xuất theo chỉ số và bắt đầu từ 0

for (int i = 0; i < listHS.size(); i++) { // listHS.size() là

lấy ra kích cỡ của listHS

System.out.println(listHS.get(i)); //Lấy ra từng đối tượ

ng theo chỉ số!

}

//Chèn thêm 1 đối tượng tenChen vào vị trí bất kỳ của ArrayList!

String tenChen = "Nguyen Van Chen";

listHS.add(2, tenChen); //Nó sẽ chèn vào vị trí số 2 và đẩy danh sác

Page 158: Basic Java - Android.vn

h dài ra sau!

System.out.println("\nDanh sách sau khi bị chèn thêm: ");

for (int i = 0; i < listHS.size(); i++) {

System.out.println(listHS.get(i));

}

//Sửa giá trị của 1 đối tượng, gán nó bằng đối tượng khác theo chỉ số

!

System.out.println("\nDanh sách sau khi bị sửa giá trị 1 đối tượng: "

);

String tenSet = "Hoang Van Set";

listHS.set(3, tenSet); //Sủa phần tử thứ 3 thành phần tử tenSet

for (int i = 0; i < listHS.size(); i++) {

System.out.println(listHS.get(i));

}

//Xóa 1 phần tử trong ArrayList

System.out.println("\nPhần tử thứ 1 đã bị xóa đi");

listHS.remove(1);

for (int i = 0; i < listHS.size(); i++) {

System.out.println(listHS.get(i));

}

System.out.println("\nXóa toàn bộ các phần tử ArrayList");

listHS.clear();

for (int i = 0; i < listHS.size(); i++) {

System.out.println(listHS.get(i));

} //Sẽ không còn gì để in ra nữa!

}

}

Ví dụ 2: Tạo 1 mảng các đối tượng, mỗi đối tượng gồm 2 thuộc tính tên và tuổi. Gán một vài giá trị rồi in ra

màn hình! Các phương thức thao tác tương tự như ở ví dụ 1, chỉ có sự khác biệt là cách khai báo

mảng, các bạn chú ý nhé! PHP:

package javaandroidvn;

import java.util.ArrayList;

class HocSinh{

public String ten;

public int tuoi;

}

public class JavaAndroidVn {

public static void main(String[] args) {

ArrayList<HocSinh> listHS = new ArrayList(); // Khai báo 1 đối tượng

ArrayList, các phần tử tạo ra từ lớp HocSinh

HocSinh a = new HocSinh();

a.ten = "Vũ Văn A";

a.tuoi = 19;

listHS.add(a); // Thêm đối tượng và listHS

HocSinh b = new HocSinh();

b.ten = "Vũ Văn B";

Page 159: Basic Java - Android.vn

b.tuoi = 20;

listHS.add(b);

HocSinh c = new HocSinh();

c.ten = "Vũ Văn C";

c.tuoi = 22;

listHS.add(c);

System.out.println("Thông tin các học sinh đã thêm vào ArrayList là:

");

for(int i=0; i<listHS.size(); i++){

System.out.println("Tên: "+listHS.get(i).ten+" Tuổi: "+listHS.get

(i).tuoi);

}

}

}

Ví dụ 3: Nhập 1 danh sách học sinh từ bàn phím, danh sách có n phần tử . Mỗi phần tử có 2 thuộc tính là tên

và tuổi. In toàn bộ danh sách ra màn hình! Các thuộc tính để private PHP:

package javaandroidvn;

import java.util.ArrayList;

import java.util.Scanner;

class HocSinh {

private String ten;

private int tuoi;

public String getTen() {

return ten;

}

public void setTen(String ten) {

this.ten = ten;

}

public int getTuoi() {

return tuoi;

}

public void setTuoi(int tuoi) {

this.tuoi = tuoi;

}

}

public class JavaAndroidVn {

public static void main(String[] args) {

ArrayList<HocSinh> listHS = new ArrayList(); // Khai báo 1 đối tượng

ArrayList, các phần tử tạo ra từ lớp HocSinh

Scanner input = new Scanner(System.in);

Page 160: Basic Java - Android.vn

System.out.println("Nhập số học sinh: ");

int n = input.nextInt();

for (int i = 0; i < n; i++) {

HocSinh x = new HocSinh(); //Tạo đối tượng x để lưu tạm thời dữ l

iệu

System.out.println("Học sinh thứ " + i + ": ");

input.nextLine(); //Dòng này tránh bị trượt dòng!

System.out.print("Tên: ");

String tenX = input.nextLine();

System.out.print("Tuổi: ");

int tuoiX = input.nextInt();

x.setTen(tenX);

x.setTuoi(tuoiX);

listHS.add(x); // Thêm đối dữ liệu về x vào trong ArrayList

}

System.out.println("Thông tin danh sách vừa nhập vào là: ");

for (int i = 0; i < listHS.size(); i++) {

System.out.print("Học sinh thứ " + i);

System.out.print(" - Tên " + listHS.get(i).getTen() + " Tuổi: " +

listHS.get(i).getTuoi()+"\n");

}

}

}

Bài này mình giới thiệu chút vậy thôi nhé, bài sau mình sẽ viết tiếp về ArrayList, nó còn khá

nhiều cái hay! ^^

Bài tập về nhà:

Tạo 1 chương trình từ điển Anh - Việt nhỏ gồm 1 mảng các từ. Mỗi từ có 2 thuộc tính là "từ" và

"nghĩa". Số từ của từ điển nhập vào từ bàn phím, nhập các thông tin của từng từ vào.

Page 161: Basic Java - Android.vn

Thêm tính năng tra từ ở phía cuối chương trình, yêu cầu người dùng nhập từ cần tra nghĩa rồi tìm kiếm, in ra màn hình nghĩa của từ vừa yêu cầu tìm!

Page 162: Basic Java - Android.vn

Bài 35: ArrayList trong Java (2) Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 23/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,207

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Ở bài viết này, mình sẽ chia sẽ về cách lưu lại dữ liệu khi trong chương trình sử dụng ArrayList.

Thực ra, kết hợp với bài trước, bài đọc ghi Object, sẽ có nhiều bạn làm được điều này ngay. Nhưng

Page 163: Basic Java - Android.vn

mình sẽ viết để cho một số bạn cảm thấy khó khăn tham khảo luôn. Mình sẽ chú thích trong code!

Về cách lưu lên file ở chương trình có dùng ArrayList, mình dùng 2 cách như sau

Cách 1: Lưu trữ các đối tượng trong một đối tượng ArrayList xuống file!

Chương trình dưới đây sẽ lưu toàn bộ các đối tượng học sinh xuống file, để thao tác, ta nạp các đối

tượng này và 1 đối tượng ArrayList PHP:

package javaandroidvn;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Scanner;

import java.util.logging.Level;

import java.util.logging.Logger;

class HocSinh implements Serializable {

private String ten;

private int tuoi;

public String getTen() {

return ten;

}

public void setTen(String ten) {

this.ten = ten;

}

public int getTuoi() {

return tuoi;

}

public void setTuoi(int tuoi) {

this.tuoi = tuoi;

}

}

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

ArrayList<HocSinh> listHS = new ArrayList(); // Khai báo 1 đối tượng

ArrayList, các phần tử tạo ra từ lớp HocSinh

Scanner input = new Scanner(System.in);

System.out.println("Nhập số học sinh: ");

int n = input.nextInt();

//Lấy dữ liệu và ghi vào file

try {

FileOutputStream f = new FileOutputStream("E:\\hocsinh.dat");

Page 164: Basic Java - Android.vn

ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để

ghi file theo từng Object

for (int i = 0; i < n; i++) {

HocSinh x = new HocSinh(); //Tạo đối tượng x để lưu tạm thời

dữ liệu

System.out.println("Học sinh thứ " + i + ": ");

input.nextLine(); //Dòng này để tránh bị trượt dòng!

System.out.print("Tên: ");

String tenX = input.nextLine();

System.out.print("Tuổi: ");

int tuoiX = input.nextInt();

x.setTen(tenX);

x.setTuoi(tuoiX);

oOT.writeObject(x); // Ghi Object là đối tượng x xuống file

}

} catch (FileNotFoundException ex) {

Logger.getLogger(JavaAndroidVn.class.getName()).log(Level.SEVERE,

null, ex);

}

//Đọc dữ liệu từ file, lấy các object ra rồi gán vào ListHS

try {

FileInputStream f2 = new FileInputStream("E:\\hocsinh.dat");

ObjectInputStream oIT = new ObjectInputStream(f2); // Sử dụng để

đọc file theo từng Object

HocSinh x = new HocSinh(); //Tạo đối tượng x để lưu tạm thời dữ l

iệu

for (int i = 0; i < n; i++) {

x = (HocSinh) oIT.readObject(); //Đọc Object đầu tiên ép kiểu

về kiểu SinhVien sau đó gán bằng đối tượng a1

listHS.add(x);

}

oIT.close();

f2.close();

} catch (IOException io) {

System.out.println("Có lỗi xảy ra!");

} catch (ClassNotFoundException ex) {

System.out.println("Không tìm thấy class");

}

//In thông tin ra ngoài!

System.out.println("Thông tin danh sách vừa nhập vào là: ");

for (int i = 0; i < listHS.size(); i++) {

System.out.print("Học sinh thứ " + i);

System.out.print(" - Tên " + listHS.get(i).getTen() + " Tuổi: " +

listHS.get(i).getTuoi() + "\n");

}

}

}

Page 165: Basic Java - Android.vn

Cách 2: Lưu đối tượng ArrayList xuống File

Vì bản thân listHS là 1 đối tượng, nên ngắn gọn ta chỉ cần lưu trữ đối tượng listHS là được! PHP:

package javaandroidvn;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Scanner;

import java.util.logging.Level;

import java.util.logging.Logger;

class HocSinh implements Serializable {

private String ten;

private int tuoi;

public String getTen() {

return ten;

}

public void setTen(String ten) {

this.ten = ten;

}

public int getTuoi() {

return tuoi;

}

public void setTuoi(int tuoi) {

this.tuoi = tuoi;

}

}

public class JavaAndroidVn {

public static void main(String[] args) throws IOException {

ArrayList<HocSinh> listHS = new ArrayList(); // Khai báo 1 đối tượng

ArrayList, các phần tử tạo ra từ lớp HocSinh

Scanner input = new Scanner(System.in);

System.out.println("Nhập số học sinh: ");

int n = input.nextInt();

//Lấy dữ liệu và ghi vào file

for (int i = 0; i < n; i++) {

HocSinh x = new HocSinh(); //Tạo đối tượng x để lưu tạm thời dữ l

iệu

System.out.println("Học sinh thứ " + i + ": ");

input.nextLine(); //Dòng này để tránh bị trượt dòng!

Page 166: Basic Java - Android.vn

System.out.print("Tên: ");

String tenX = input.nextLine();

System.out.print("Tuổi: ");

int tuoiX = input.nextInt();

x.setTen(tenX);

x.setTuoi(tuoiX);

listHS.add(x);

}

try {

FileOutputStream f = new FileOutputStream("E:\\hocsinh.dat");

ObjectOutputStream oOT = new ObjectOutputStream(f); // Sử dụng để

ghi file theo từng Object

oOT.writeObject(listHS); // Ghi Object là đối tượng x xuống file

} catch (FileNotFoundException ex) {

Logger.getLogger(JavaAndroidVn.class.getName()).log(Level.SEVERE,

null, ex);

}

//Đọc dữ liệu từ file, lấy các object ra rồi gán vào ListHS

ArrayList<HocSinh> listHS2 = new ArrayList(); // Khai báo 1 đối tượng

ArrayList thứ 2, các phần tử tạo ra từ lớp HocSinh

//Dùng để lưu dữ liệu riêng khi ta đọc file!

try {

FileInputStream f2 = new FileInputStream("E:\\hocsinh.dat");

ObjectInputStream oIT = new ObjectInputStream(f2); // Sử dụng để

đọc file theo từng Object

listHS2 = (ArrayList<HocSinh>) oIT.readObject(); //Ép kiểu đối tư

ợng lấy từ file ra về dạng ArrayList<HocSinh>

oIT.close();

f2.close();

} catch (IOException io) {

System.out.println("Có lỗi xảy ra!");

} catch (ClassNotFoundException ex) {

System.out.println("Không tìm thấy class");

}

//In thông tin ra ngoài! Thông tin lấy từ đối tượng ListHS2 vừa đọc t

ừ file

System.out.println("Thông tin danh sách vừa nhập vào là: ");

for (int i = 0; i < listHS2.size(); i++) {

System.out.print("Học sinh thứ " + i);

System.out.print(" - Tên " + listHS2.get(i).getTen() + " Tuổi: "

+ listHS2.get(i).getTuoi() + "\n");

}

}

}

Page 167: Basic Java - Android.vn

Bài tập về nhà:

Làm chương trình từ điển. Danh sách từ là danh sách các đối tượng gồm 2 thuộc tính từ và nghĩa

Số từ nhập vào từ màn hình. Nhập dữ liệu các từ qua màn hình console. Khi nhập dữ liệu xong, toàn

bộ dữ liệu được lưu vào file theo kiểu object.

Sau đó chương trình hỏi từ cần tìm, nhập từ cần tìm. Chương trình đọc file vừa ghi, rồi tìm kiếm nghĩa của từ vừa nhập, in ra nghĩa của từ cần tra cứu!

Page 168: Basic Java - Android.vn

Bài 36: Sắp xếp các đối tượng trong ArrayList Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 23/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,558

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

Page 169: Basic Java - Android.vn

**Trong thực tế khi lập trình, công việc sắp xếp 1 danh sách các đối tượng phải áp dụng rất nhiều. Ví

dụ:

- Sắp xếp họ tên theo thứ tự a, b, c.

- Sắp xếp danh sách kết quả thi theo thứ tự từ cao xuống thấp.

- Sắp xếp tài liệu theo thứ tự mới trước, cũ sau.

- ..v.v..

- Việc sắp xếp một các đối tượng trong 1 ArrayList có thể có nhiều cách. Các bạn có thể áp dụng các

phương pháp cơ bản, hoán đổi vị trí khi so sánh giống như việc sắp xếp các phần tử trong mảng đã

dùng. Tuy nhiên, ở bài này mình sẽ giới thiệu 1 cách sắp xếp cực ngắn gọn, Java đã hỗ trợ sẵn, đó là

phương thức sắp xếp Collection.sort.

- Mình sẽ nêu một vài ví dụ cụ thể để các bạn cùng tìm hiểu!

Ở các ví dụ này, các thuộc tính đối tượng mình để public cho ngắn gọn, chúng ta tập trung vào đoạn

sắp xếp!

Ví dụ 1: Sắp xếp một danh sách các đối tượng sinh viên có 2 thuộc tính họ tên và

điểm thi. Các bạn chú ý đoạn này: PHP:

//Sắp xếp danh sách theo theo số điểm giảm dần!

Collections.sort(danhSach, new Comparator<SinhVien>() {

@Override

public int compare(SinhVien sv1, SinhVien sv2) {

if (sv1.diem < sv2.diem) {

return 1;

} else {

if (sv1.diem == sv2.diem) {

return 0;

} else {

return -1;

}

}

}

});

- Trên là cách sử dụng phương thức Collections.sort với danhSach là một đối tượng ArrayList, bên

trong chứa danh sách các đối tượng SinhVien

- Phương thức public int compare(SinhVien sv1, SinhVien sv2) trả về kiểu giá trị nguyên. Đoạn

code trên là giúp sắp xếp theo thứ tự giảm dần của số điểm từng đối tượng sinh viên. Nếu bạn muốn

sắp xếp tăng dần thì đổi chỗ 1 và -1 cho nhau là được! PHP:

Collections.sort(danhSach, new Comparator<SinhVien>() {

@Override

public int compare(SinhVien sv1, SinhVien sv2) {

if (sv1.diem < sv2.diem) {

return -1;

} else {

if (sv1.diem == sv2.diem) {

return 0;

} else {

return 1;

}

Page 170: Basic Java - Android.vn

}

}

});

Toàn bộ code chương trình như sau: PHP:

package javaandroidvn;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.Scanner;

class SinhVien {

public String hoTen;

public int diem;

}

public class JavaAndroidVn {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

System.out.println("Nhập số sinh viên: ");

int n = input.nextInt();

ArrayList<SinhVien> danhSach = new ArrayList();

for (int i = 0; i < n; i++) {

input.nextLine();

SinhVien x = new SinhVien();

System.out.println("Thông tin sinh viên thứ " + i);

System.out.print("Họ và Tên: ");

x.hoTen = input.nextLine();

System.out.print("Điểm: ");

x.diem = input.nextInt();

danhSach.add(x);

}

//Sắp xếp danh sách theo số điểm giảm dần!

Collections.sort(danhSach, new Comparator<SinhVien>() {

@Override

public int compare(SinhVien sv1, SinhVien sv2) {

if (sv1.diem < sv2.diem) {

return 1;

} else {

if (sv1.diem == sv2.diem) {

return 0;

} else {

return -1;

}

}

}

});

System.out.println("Danh sách sắp xếp theo thứ tự điểm giảm dần là: "

);

Page 171: Basic Java - Android.vn

for (int i = 0; i < danhSach.size(); i++) {

System.out.println("Tên: " + danhSach.get(i).hoTen + " Điểm: " +

danhSach.get(i).diem);

}

}

}

Ví dụ 2: Sắp xếp danh sách các đối tượng theo thứ tự trong bảng chữ cái! a b c PHP:

package javaandroidvn;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.Scanner;

class SinhVien {

public String hoTen;

public int diem;

}

public class JavaAndroidVn {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

System.out.println("Nhập số sinh viên: ");

int n = input.nextInt();

ArrayList<SinhVien> danhSach = new ArrayList();

for (int i = 0; i < n; i++) {

input.nextLine();

SinhVien x = new SinhVien();

System.out.println("Thông tin sinh viên thứ " + i);

System.out.print("Họ và Tên: ");

x.hoTen = input.nextLine();

System.out.print("Điểm: ");

x.diem = input.nextInt();

danhSach.add(x);

}

//Sắp xếp danh sách theo theo thứ tự a b c!

Collections.sort(danhSach, new Comparator<SinhVien>() {

@Override

public int compare(SinhVien sv1, SinhVien sv2) {

return (sv1.hoTen.compareTo(sv2.hoTen));

// Muốn đảo danh sách các bạn đối thành

//return (sv2.hoTen.compareTo(sv1.hoTen));

}

});

System.out.println("Danh sách sắp xếp theo tên trong bảng chữ cái a -

b - c: ");

for (int i = 0; i < danhSach.size(); i++) {

System.out.println("Tên: " + danhSach.get(i).hoTen + " Điểm: " +

danhSach.get(i).diem);

Page 172: Basic Java - Android.vn

}

}

}

Bài tập về nhà:

- Nhập dữ liệu danh sách nhân viên trong công ty. Các phần tử trong danh sách có các thuộc tính họ

tên, năm sinh, lương. Các thuộc tính để private.

- Viết chương trình nhập dữ liệu từ bàn phím thông tin số nhân viên, thông tin từng nhân viên. Cuối

chương trình có menu chọn.

+ Nếu ấn 1 thì sắp xếp theo thứ tự tên a, b, c. In danh sách ra màn hình.

+ Nếu ấn 2 thì sắp xếp theo mức lương giảm dần từ người cao xuống người thấp. In danh sách ra màn hình.

Page 173: Basic Java - Android.vn

Bài 37: HashMap trong Java Thảo luận trong 'Java cơ bản' bắt đầu bởi Tiasangmoi92, 24/8/13.

Theo dõi chủ đề

1.

Tiasangmoi92Super Moderator

Lượt xem: 2,510

/* Bài viết thuộc loạt bài hướng dẫn trong "Khóa Học Lập Trình Java Miễn Phí"

trên diễn đàn Android.Vn, bạn có thể vào đây đọc

để hiểu hơn về khóa học và tham gia ngay cùng mọi người */

** Gần giống với ArrayList, tuy nhiên HashMap là 1 kiểu đối tượng lưu giá trị theo cặp key / value

Key trong 1 đối tượng kiểu HashMap là duy nhất. HashMap truy cập theo key, không theo số thứ tự

Page 174: Basic Java - Android.vn

giống ArrayList hoặc Array.

** Với mỗi key, bạn sẽ tìm được giá trị tương ứng với key đó. Các key là duy nhất nhưng các giá trị

tương ứng với các key khác nhau thì có thể trùng nhau.

** Kiểu đối tượng của giá trị key/value của HashMap phải đồng nhất. Trong trường hợp không xác

định kiểu dữ liệu thì java sẽ xem như là kiểu Object – là cha của tất cả đối tượng khác trong Java.

1, Khởi tạo một Hashmap

**Khởi tạo từ interface Map, chưa định nghĩa kiểu giá trị PHP:

Map hMap1 = new HashMap();

**Khởi tạo từ interface Map, định nghĩa trước kiểu giá trị PHP:

Map<Integer, String> hMap2 = new HashMap();

**Khởi tạo từ HashMap, chưa định nghĩa trước kiểu giá trị PHP:

HashMap hMap3 = new HashMap();

**Khởi tạo từ HashMap, định nghĩa trước kiểu giá trị PHP:

HashMap<Integer, String> hMap4 = new HashMap();

HashMap hMap5 = new HashMap<Integer, String>();

HashMap<Integer, String> hMap6 = new HashMap<Integer, String> ();

**Chú ý: HashMap chỉ chấp nhận dữ liệu (cả key và value) là các đối tượng. Do đó, các kiểu int,

long, double,… không được chấp nhận mà phải dùng Integer, Long, Double,…

2, Cách thức đưa dữ liệu vào và lấy dữ liệu ra từ đối tượng HashMap.

Không phải là phương thức add giống ArrayList, khác biệt một chút! Ta sử dụng put và get PHP:

hashmap.put (key, value); //đưa key và value vào hashmap

hashmap.get(key); // Lấy value tương ứng với key trong hashmap

Ví dụ 1: PHP:

package javaandroidvn;

import java.util.HashMap;

public class JavaAndroidVn {

public static void main(String[] args) {

HashMap user = new HashMap();

user.put("ID1", "TranvanA");

user.put("ID2", "NguyenVanT");

user.put("ID3", "VuVanT");

System.out.println(user.get("ID1"));

System.out.println(user.get("ID2"));

System.out.println(user.get("ID3"));

Page 175: Basic Java - Android.vn

}

}

Ví dụ 2: PHP:

package javaandroidvn;

import java.util.HashMap;

public class JavaAndroidVn {

public static void main(String[] args) {

HashMap<Integer, String> user = new HashMap<> ();

user.put(1, "Vu Van A");

user.put(2, "Nguyenvan t");

user.put(3, "Nguyenvan C");

user.put(4, "NguyenvanE");

System.out.println(user.get(1));

System.out.println(user.get(2));

System.out.println(user.get(3));

System.out.println(user.get(4)+"\n");

//Hoặc nếu key gán theo thứ tự số nguyên, có thể dùng :

for (int i=1; i<5; i++){

System.out.println(user.get(i));

}

}

}

**Chú ý: Dữ liệu đưa vào HashMap phải ứng với kiểu dữ liệu đã định nghĩa lúc khởi tạo HashMap.

3, Cách lấy tất cả các giá trị của HashMap

Các bạn xem ví dụ, nó sẽ lấy toàn bộ dữ liệu từ trong đối tượng HashMap ra: PHP:

package javaandroidvn;

import java.util.HashMap;

public class JavaAndroidVn {

public static void main(String[] args) {

HashMap<Integer, String> user = new HashMap<>();

user.put(8, "Vu Van A");

user.put(5, "Nguyenvan t");

user.put(3, "Nguyenvan C");

user.put(10, "NguyenvanE");

for (Integer i : user.keySet()) {

System.out.println(i + " " + user.get(i));

}

}

}

Page 176: Basic Java - Android.vn

**Ngoài ra còn có một vài phương thức như remove, clear dùng để xóa bỏ một đối tượng và xóa

sạch các đối tượng trong HashMap

Xem thêm video blog StudyAndShare

Bài tập về nhà:

Tạo một đối tượng HashMap gồm key là tài khoản, value là mật khẩu. Nhập giá trị các tài khoản và

mật khẩu của 5 đối tượng từ bàn phím. In thông tin tất cả ra ngoài màn hình console!