Tải bản đầy đủ (.pdf) (21 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (712.08 KB, 21 trang )

Đ tài 3. L p trình h ng đ i t ng trong Javaề ậ ướ ố ượ
I. Khái ni m l p trình h ng đ i t ng (Object-Oriented Programming - OOP)ệ ậ ướ ố ượ
I.1. Khái ni m OOPệ
L p trình h ng đ i t ng là s cài đ t m t ch ng trình theo h ng đ i t ng b ngậ ướ ố ượ ự ặ ộ ươ ướ ố ượ ằ
các ngôn ng l p trình, th ng là ngôn ng OOP.ữ ậ ườ ữ
Nh v y, n u dùng m t ngôn ng OOP mà ch ng trình không theo h ng đ i t ngư ậ ế ộ ữ ươ ướ ố ượ
thì cũng không ph i là l p trình OOP. Trong khi n u dùng m t ngôn ng không h ng đ iả ậ ế ộ ữ ướ ố
t ng đ vi t m t ch ng trình OOP (r t khó khăn) thì cũng có th g i là l p trình OOP.ượ ể ế ộ ươ ấ ể ọ ậ
Th c t thì ta không th vi t ch ng trình h ng đ i t ng b ng các ngôn ng c u trúc (nhự ế ể ế ươ ướ ố ượ ằ ữ ấ ư
Pascal ch ng h n) vì các ngôn ng này không h tr cú pháp cài đ t và k thu t biên d ch cácẳ ạ ữ ỗ ợ ặ ỹ ậ ị
đ c tính c a h ng đ i t ng.ặ ủ ướ ố ượ
Nh ng ngôn ng OOP không ch bao g m cú pháp và m t trình biên d ch (compiler) màữ ữ ỉ ồ ộ ị
còn có m t môi tr ng phát tri n toàn di n. Môi tr ng này bao g m m t th vi n đ c thi tộ ườ ể ệ ườ ồ ộ ư ệ ượ ế
k t t, thu n l i cho vi c s d ng k th a các đ i t ng – tính tái s d ng. Đây là m t đi mế ố ậ ợ ệ ử ụ ế ừ ố ượ ử ụ ộ ể
m nh c a OOP và ph ng pháp tr c đây không có đ c.ạ ủ ươ ướ ượ
Đ i v i m t ngôn ng l p trình h tr OOP thì vi c tri n khai k thu t l p trìnhố ớ ộ ữ ậ ỗ ợ ệ ể ỹ ậ ậ
h ng đ i t ng s d dàng h n. H n n a, các d án ph n m m phân tích và thi t k theoướ ố ượ ẽ ễ ơ ơ ữ ự ầ ề ế ế
UML b t bu c ph i s d ng k thu t OOP đ cài đ t thì m i phát huy hi u qu . ắ ộ ả ử ụ ỹ ậ ể ặ ớ ệ ả
I.2 C s lý lu n c a OOPơ ở ậ ủ
Chúng ta th y r ng thu t ng “h ng đ i t ng” có nghĩa là l y đ i t ng làm trungấ ằ ậ ữ ướ ố ượ ấ ố ượ
tâm và t t c n m trong đ i t ng. Quan sát th gi i th c, ta th y m i v t đ u có v trí riêngấ ả ằ ố ượ ế ớ ự ấ ọ ậ ề ị
c a nó, chúng s h u các tính ch t và thu c tính riêng, cách th c v n đ ng riêng. Chúng ta g iủ ở ữ ấ ộ ứ ậ ộ ọ
chúng là nh ng đ i t ng. Theo cách hi u nh v y thì m i nghi p v th c t suy cho cùngữ ố ượ ể ư ậ ọ ệ ụ ự ế
ch là vi c qu n lý các đ i t ng, khai thác thông tin cũng nh các m i quan h t chúng ho cỉ ệ ả ố ượ ư ố ệ ừ ặ
thay đ i tr ng thái c a chúng.ổ ạ ủ
OOP là ph ng th c t duy m i đ gi i quy t v n đ b ng máy tính. Đ đ t k t qu ,ươ ứ ư ớ ể ả ế ấ ề ằ ể ạ ế ả
l p trình viên ph i n m đ c s t ng ng gi a các các đ i t ng th c t , m i quan h gi aậ ả ắ ượ ự ươ ứ ữ ố ượ ự ế ố ệ ữ
chúng và s h tr c a ngôn ng đ cài đ t chúng vào máy tính. Ngôn ng OOP cung c p đ yự ỗ ợ ủ ữ ể ặ ữ ấ ầ
đ ph ng ti n đ th c hi n đi u này. Chúng ta s d ng k thu t h ng đ i t ng đ ánhủ ươ ệ ể ự ệ ề ử ụ ỹ ậ ướ ố ượ ể
x nh ng th c th chúng ta g p ph i trong đ i s ng th c thành nh ng th c th t ng t trongạ ữ ự ể ặ ả ờ ố ự ữ ự ể ươ ự
máy tính. Do đó, phát tri n ph n m m theo k thu t l p trình h ng đ i t ng có kh năngể ầ ề ỹ ậ ậ ướ ố ượ ả


gi m thi u s l n l n th ng x y ra gi a h th ng và lĩnh v c ng d ng.ả ể ự ẫ ộ ườ ả ữ ệ ố ự ứ ụ
Tuy nhiên, t nghi p v th c t chúng ta không th ngay l p t c đem vào cài đ t trongừ ệ ụ ự ế ể ậ ứ ặ
ngôn ng OOP mà ph i qua m t quy trình phân tích và thi t k theo h ng đ i t ng nhữ ả ộ ế ế ướ ố ượ ư
chúng ta đã th y qua vi c nghiên c u ngôn ng mô hình hóa UML – m t ngôn ng giúp chúngấ ệ ứ ữ ộ ữ
ta tr u t ng hóa th gi i th c. ừ ượ ế ớ ự
I.3 Tr u t ng hóaừ ượ
Qu n lý thông tin, các hành vi, các m i quan h c a các đ i t ng là nhi m v mà l pả ố ệ ủ ố ượ ệ ụ ậ
trình OOP ph i làm. Thông tin v đ i t ng và m i quan h gi a chúng th c t là vô cùng.ả ề ố ượ ố ệ ữ ự ế
V y làm th nào đ đ a chúng vào máy tính? Câu tr l i là chúng ta c n m t quá trình tr uậ ế ể ư ả ờ ầ ộ ừ
t ng hóa.ượ
46
Gi s đ i tả ử ố ng qu n lý là m t sinh viên. M t h th ng qu n lý sinh viên có th chượ ả ộ ộ ệ ố ả ể ỉ
c n quan tâm t i: H và tên, ngày sinh, l p h c, đ a ch n i , đi m các môn h c. Trong khiầ ớ ọ ớ ọ ị ỉ ơ ở ể ọ
đó, các thông tin khác v sinh viên – cũng là m t con ng i – nh chi u cao, cân n ng, nhómề ộ ườ ư ề ặ
máu,…chúng ta không c n quan tâm. M t quá trình suy lu n nh v y là m t quá trình tr uầ ộ ậ ư ậ ộ ừ
t ng hóa d li u. đây ta không quan tâm t i giá tr c th c a các thu c tính này.ượ ữ ệ Ở ớ ị ụ ể ủ ộ
Khi quan tâm t i giá tr c a các thu c tính, chúng ta có m tớ ị ủ ộ ộ câu h i: Cái gì làm cho dỏ ữ
li u này bi n đ i? Câu tr l i là chính hành vi c a đ i t ng làm cho thu c tính c a chúng bệ ế ố ả ờ ủ ố ượ ộ ủ ị
thay đ i. Trong ví d trên, m t anh sinh viên b t kỳ có th có hành vi “xin đ i l p h c” ho cổ ụ ộ ấ ể ổ ớ ọ ặ
“đ i đ a ch n i ” làm cho giá tr các thu c tính “l p h c”, “đ a ch n i ” b thay đ i. Quáổ ị ỉ ơ ở ị ộ ớ ọ ị ỉ ơ ở ị ổ
trình xác đ nh các hành vi c a đ i t ng ph c v cho nghi p v qu n lý cũng là m t quá trìnhị ủ ố ượ ụ ụ ệ ụ ả ộ
tr u t ng hóa hành vi.ừ ượ
Tóm l i, chúng ta có m t mô hình tr u t ng hóa c a m t sinh viên:ạ ộ ừ ượ ủ ộ
Sinh viên
H và tênọ
Ngày sinh
Tên l pớ
Đ a chị ỉ
Đi m môn h cể ọ
Thay đ i l pổ ớ

Thay đ i n i ổ ơ ở
Đi m quan tr ng là sau khi tr u t ng hóa t m t l p các sinh viên (t t c các sinhể ọ ừ ượ ừ ộ ớ ấ ả
viên trong ph m vi qu n lý), mô hình này đ i di n cho t t c sinh viên và là khuôn m u đ t oạ ả ạ ệ ấ ả ẫ ể ạ
ra b t kỳ sinh viên nào khác.ấ
Qua đây, ta cũng rút ra nh n xét r ng quá trình tr u t ng hóa tùy theo yêu c u nghi pậ ằ ừ ượ ầ ệ
v s cho k t qu khác nhau. Cũng là m t sinh viên nh ng n u ch ng may anh ta b m n mụ ẽ ế ả ộ ư ế ẳ ị ố ằ
vi n, anh ta đ c qu n lý nh m t b nh nhân. M t h th ng qu n lý b nh nhân t t nhiênệ ượ ả ư ộ ệ ộ ệ ố ả ệ ấ
không th b qua các thông tin v nhóm máu, cân n ng, huy t áp,…và t t nhiên là cũng có cácể ỏ ề ặ ế ấ
mô hình hành vi khác.

Tóm l i:ạ
• Các th c th t n t i trong th gi i th c đ c mô hình hóa thành các l p đ i t ng.ự ể ồ ạ ế ớ ự ượ ớ ố ượ
• Các m i quan h gi a các th c th trong th gi i th c đ c mô hình hóa b ng các m iố ệ ữ ự ể ế ớ ự ượ ằ ố
quan h gi a các l p đ i t ng.ệ ữ ớ ố ượ
Th gi i th c = Các đ i ế ớ ự ố
t ng + Các m i quan ượ ố
hệ
Các l p đ i t ng trong ớ ố ượ
ch ng trình - Classesươ
Tr u t ng ừ ượ
hóa
47
II. Tính đóng gói trong Java
II.1 Khái ni m tính đóng góiệ
Tính đóng gói th hi n b i vi c thu c tính mô t đ i t ng và hành vi c a đ i t ngể ệ ở ệ ộ ả ố ượ ủ ố ượ
đ c g n ch t v i nhau. Thu c tính th hi n tr ng thái đ i t ng, hành vi làm thay đ i tr ngượ ắ ặ ớ ộ ể ệ ạ ố ượ ổ ạ
thái đ i t ng thông qua vi c thay đ i giá tr các thu c tính.ố ượ ệ ổ ị ộ
Thu c tính đ c cài đ t thông qua mã l nh Java b ng các bi n thành ph n trong l p.ộ ượ ặ ệ ằ ế ầ ớ
Hành vi đ c cài đ t thông qua mã l nh Java b i các ph ng th c.ượ ặ ệ ở ươ ứ
Thông tin và hành vi đ i t ng đ c b o v b ng các c p đ truy c p: public, private.ố ượ ượ ả ệ ằ ấ ộ ậ

C p đ public cho phép s truy c p t bên ngoài l p trong khi private ch cho phép n i b l pấ ộ ự ậ ừ ớ ỉ ộ ộ ớ
truy c p.ậ
Đ i t ng đ c sinh ra b i class - m t s mô hình hóa m t l p đ i t ng trong th cố ượ ượ ở ộ ự ộ ớ ố ượ ự
t .ế
object = attributes (các thu c tính) + operations(các hành vi) + name (tên đ nh danh)ộ ị
Nh v y tính đóng gói th hi n vi c chuy n mô hình đ i t ng th c t thành các l pư ậ ể ệ ệ ể ố ượ ự ế ớ
trong Java.
II.2 M i quan h gi a các classố ệ ữ
Các class trong ch ng trình có th quan h v i nhau theo 1 trong 3 d ng:ươ ể ệ ớ ạ
• Ph thu c (Dependence): Class A có quan h ph thu c v i class B n u ph ngụ ộ ệ ụ ộ ớ ế ươ
th c c a class A có s d ng đ i t ng thu c class B.ứ ủ ử ụ ố ượ ộ
• Bao g m (Aggregation): Class A có quan h bao g m v i class B n u đ i t ngồ ệ ồ ớ ế ố ượ
c a class A ch a đ i t ng c a class B.ủ ứ ố ượ ủ
• Th a k (inheritance): Class B g i là th a k class A n u class B có các ph ngừ ế ọ ừ ế ế ươ
th c và thu c tính c a class A, ngoài ra class B còn đ nh nghĩa các ph ng th cứ ộ ủ ị ươ ứ
và thu c tính khác c a riêng nó.ộ ủ
Ví d :ụ
Trong h th ng bán hàng chúng ta có:ệ ố
• class DanhMucMatHang
• class TaiKhoan
• class HoaDon
• class HoaDonThanhToanNhanh
M i HoaDon bao g m 1 DanhMucMatHang: Quan h aggregation.ỗ ồ ệ
Khi m t HoaDon đ c t o ra, nó c n truy c p đ n class TaiKhoan đ ki m tra tìnhộ ượ ạ ầ ậ ế ể ể
tr ng th tín d ng: Quan h dependence.ạ ẻ ụ ệ
M i HoaDonThanhToanNhanh th a k các thu c tính và ph ng th c c a HoaDon vàỗ ừ ế ộ ươ ứ ủ
có thêm các thu c tính, ph ng th c khác: Quan h inheritance.ộ ươ ứ ệ
II.3 M t s g i ý khi thi t k classộ ố ợ ế ế
Khai báo d li u private: Đi u này tránh vi c truy c p tùy ý t bên ngoài l pữ ệ ề ệ ậ ừ ớ
Kh i t o cho d li u: Các thu c tính nên đ c kh i t o b ng các ph ng th cở ạ ữ ệ ộ ượ ở ạ ằ ươ ứ

constructor khi m t đ i t ng m i đ c t o ra.ộ ố ượ ớ ượ ạ
Không s d ng quá nhi u ki u d li u c b n trong 1 l pử ụ ề ể ữ ệ ơ ả ớ
Không ph i thu c tính nào cũng c n mutator và accesor: M i thu c tính bao gi cũng cóả ộ ầ ỗ ộ ờ
m t ph ng th c thi t đ t giá tr cho nó g i là mutator (ti n t set) và m t ph ng th c l y raộ ươ ứ ế ặ ị ọ ề ố ộ ươ ứ ấ
giá tr c a nó g i là accesor (ti n t get).ị ủ ọ ề ố
48
Tách các class ph c t pứ ạ
Đ t tên ph ng th c và thu c tính ph n ánh theo tính ch t và nghi p v c a nó. ặ ươ ứ ộ ả ấ ệ ụ ủ
IV. S d ng các Class xây d ng s n trong th vi nử ụ ự ẵ ư ệ
Java h tr cho l p trình viên m t th vi n phong phú các l p đ i t ng đã đ c xâyỗ ợ ậ ộ ư ệ ớ ố ượ ượ
d ng và thi t k c n th n. L p trình viên ch c n bi t cách l y chúng ra và s d ng chúngự ế ế ẩ ậ ậ ỉ ầ ế ấ ử ụ
theo k ch b n c a ng d ng.ị ả ủ ứ ụ
Các gói th vi n quan tr ng c a Java 2 bao g m:ư ệ ọ ủ ồ
(tham kh o chi ti t t i: )ả ế ạ
Các gói th ng dùng trong Java 2 SEườ
java.applet
H tr các class c n thi t cho vi c t o ra các Applet và giao ti p gi aỗ ợ ầ ế ệ ạ ế ữ
Applet v i môi tr ng ng c nh c a nó.ớ ườ ữ ả ủ
java.awt
Ch a các l p dùng đ t o ra các giao di n ng i dùng và cho các thao tácứ ớ ể ạ ệ ườ
v các hình đ h a và nh.ẽ ồ ọ ả
java.awt.color Cung c p các l p cho không gian màu.ấ ớ
java.awt.event
Cung c p các giao di n và các l p cho vi c gi i quy t các v n đ v xấ ệ ớ ệ ả ế ấ ề ề ử
lý các s ki n trên các thành ph n giao di n AWT.ự ệ ầ ệ
java.awt.font H tr các giao di n và l p liên quan đ n font ch .ỗ ợ ệ ớ ế ữ
java.awt.image Cung c p các l p t o và hi u ch nh hình nh.ấ ớ ạ ệ ỉ ả
java.awt.print Cung c p các l p và giao di n cho m c đích in n.ấ ớ ệ ụ ấ
java.beans
Ch a các l p liên quan t i vi c phát tri n các thành ph n (beans) d a trênứ ớ ớ ệ ể ầ ự

ki n trúc c a Java.ế ủ
java.io H tr cho các thao tác vào / ra d li u trên h th ng file.ỗ ợ ữ ệ ệ ố
java.lang Cung c p các l p n n t ng đ thi t k ngôn ng l p trình Java.ấ ớ ề ả ể ế ế ữ ậ
java.math
H tr các l p đ thao tác và thu t toán v i các s nguyên l n BigIntegerỗ ợ ớ ể ậ ớ ố ớ
và BigDecimal.
java.net Cung c p các l p cho vi c cài đ t các ng d ng m ng.ấ ớ ệ ặ ứ ụ ạ
java.rmi Cung c p các gói cho l p trình RMI – Remote Method Invocation.ấ ậ
java.security
Cung c p các l p và giao di n cho vi c x lý các v n đ an ninh và b oấ ớ ệ ệ ử ấ ề ả
m t trong Java.ậ
java.sql
Cung c p các hàm API cho vi c truy c p vào d li u trong m t ngu n dấ ệ ậ ữ ệ ộ ồ ữ
li u – th ng là các CSDL quan h .ệ ườ ệ
java.text
Cung c p các l p và giao di n cho vi c qu n lý text, dates, numbers và cácấ ớ ệ ệ ả
thông đi p.ệ
java.util
Ch a đ ng các l p ti n ích thu c nhi u lo i khác nhau nh sinh s ng uứ ự ớ ệ ộ ề ạ ư ố ẫ
nhiên, ngày tháng,….
javax.crypto H tr các l p và giao di n cho các thao tác mã hóa d li u.ỗ ợ ớ ệ ữ ệ
javax.net Cung c p các l p cho l p trình m ng.ấ ớ ậ ạ
javax.print Cung c p các l p c b n cho các d ch v in n qua m ng.ấ ớ ơ ả ị ụ ấ ạ
49
javax.sql Cung c p các hàm API cho vi c truy c p d li u phía server.ấ ệ ậ ữ ệ
javax.swing
Cung c p m t t p các thành ph n đ c ch p nh n trên h u h t các hấ ộ ậ ầ ượ ấ ậ ầ ế ệ
th ng máy tính.ố
javax.swing.event H tr cho các s ki n kích ho t b i các thành ph n c a Swing.ỗ ợ ự ệ ạ ở ầ ủ
javax.swing.table Cung c p các l p và giao di n làm vi c v i b ng.ấ ớ ệ ệ ớ ả

javax.swing.tree
Cung c p các l p và giao di n làm vi c v i cây ấ ớ ệ ệ ớ javax.swing.JTree.
javax.xml.parsers H tr các l p cho vi c x lý các tài li u XML.ỗ ợ ớ ệ ử ệ
Sau đây là h ng d n ví d v s d ng l p Date có s n trong th vi n c a Java:ướ ẫ ụ ề ử ụ ớ ẵ ư ệ ủ
Khai báo bi n đ i t ng v i toán t newế ố ượ ớ ử
Date myDate = new Date();
Date() là ph ng th c contructor c a class Date. M t đ i t ng luôn đ c t o ra tươ ứ ủ ộ ố ượ ượ ạ ừ
m t constructor c a l p đó.ộ ủ ớ
Khai báo:
Date myDate;
Xác đ nh cho ta m t bi n đ i t ng Date nh ng không cho ta m t đ i t ng Dateị ộ ế ố ượ ư ộ ố ượ
th c s vì trong th c t , myDate ch a đ c c p phát vùng nh .ự ự ự ế ư ượ ấ ớ
Câu l nh:ệ
myDate = new Date();
Xác đ nh r ng myDate là m t đ i t ng th c s thu c class Date, ta có th áp d ngị ằ ộ ố ượ ự ự ộ ể ụ
các ph ng th c và thu c tính c a class Date cho myDate.ươ ứ ộ ủ
System.out.println(myDate.getMonth()); // In ra tháng hi n t iệ ạ
V. Xây d ng Class trong Javaự
Cài đ t các class là công vi c th ng xuyên c a l p trình viên Java. Các v n đ c aặ ệ ườ ủ ậ ấ ề ủ
công vi c thi t k m t l p b ng ngôn ng Java s đ c đ c p d i đây.ệ ế ế ộ ớ ằ ữ ẽ ượ ề ậ ướ
V.1 C u trúc c a classấ ủ
[<Cách truy xu t>] class <tên l p> [extends <tên l p cha>] [implements <tên giaoấ ớ ớ
di n>]{ệ
<các thành ph n c a l p>;ầ ủ ớ
}
Ta s l n l t xem xét t ng thành ph n:ẽ ầ ượ ừ ầ
<Cách truy xu t>: ấ
public: Có th truy c p l p t các l p khác.ể ậ ớ ừ ớ
abstract: L p tr u t ng, không đ c kh i t o đ i t ng c a l p này. Các l p tr uớ ừ ượ ượ ở ạ ố ượ ủ ớ ớ ừ
t ng đ c thi t k ch cho m c đích k th a.ượ ượ ế ế ỉ ụ ế ừ

final: Không cho phép k th a.ế ừ
N u <cách truy xu t> không đ c xác đ nh, m c đ nh là public.ế ấ ượ ị ặ ị
<tên l p>:ớ Tên c a l p, n u <cách truy xu t > là public thì tên l p ph i trùng v i tênủ ớ ế ấ ớ ả ớ
file ch a l p.ứ ớ
<tên l p cha>:ớ Tên c a l p cha mà l p hi n t i th a k .ủ ớ ớ ệ ạ ừ ế
50
<tên giao di n>:ệ Tên c a giao di n đ c cài đ t t i l p. Đây có th là m t danh sáchủ ệ ượ ặ ạ ớ ể ộ
các giao di n phân tách b i d u “,”.ệ ở ấ
<các thành ph n c a l p>:ầ ủ ớ đây là ph n thân c a l p ch a các đ nh nghĩa cho cácầ ủ ớ ứ ị
thu c tính và các ph ng th c thành ph n. Ta s l n l t xem xét t i các thành ph n này.ộ ươ ứ ầ ẽ ầ ượ ớ ầ
V.2 Các thu c tính thành ph n:ộ ầ
Khai báo thu c tính chính là vi c khai báo các bi n. Khi khai báo trong l p chúngộ ệ ế ớ
th ng đ c xác đ nh ph m vi ho t đ ng là m t trong các d ng:ườ ượ ị ạ ạ ộ ộ ạ
• public: Bi n có th truy c p b t c l p nào.ế ể ậ ở ấ ứ ớ
• private: Ch đ c truy c p trong chính l p đó.ỉ ượ ậ ớ
• protected: Ch đ c truy c p trong l p đó và các l p k th a.ỉ ượ ậ ớ ớ ế ừ
M c đ nh thì ph m vi truy c p c a bi n là public, các bi n thông th ng có ph m viặ ị ạ ậ ủ ế ế ườ ạ
private.
Ví d : ụ
public int Tuoi;
private String HoVaTen;
Cách truy c p bi n r t đ n gi n, ph thu c vào bi n thu c d ng nào trong 2 d ng sau:ậ ế ấ ơ ả ụ ộ ế ộ ạ ạ
1. Bi n có ph m vi đ i t ng: Đây là bi n t n t i cùng v i s t n t i c a đ i t ng.ế ạ ố ượ ế ồ ạ ớ ự ồ ạ ủ ố ượ
Mu n truy c p vào bi n, tr c h t ph i kh i t o m t đ i t ng thu c l p.ố ậ ế ướ ế ả ở ạ ộ ố ượ ộ ớ
SinhVien sv = new SinhVien(20,”Nguyen Van A”);
Truy c p vào bi n Tuoi nh sau: sv.Tuoi, ví d gán Tuoi c a sinh viên này b ng 21:ậ ế ư ụ ủ ằ
Sv.Tuoi=21;
2. Bi n có ph m vi l p (bi n tĩnh): Đây là bi n có ph m vi t n t i trong m i đ i t ngế ạ ớ ế ế ạ ồ ạ ọ ố ượ
c a l p đ c t o ra trong ch ng trình đang ch y. Giá tr c a bi n đ c dùng chung gi a cácủ ớ ượ ạ ươ ạ ị ủ ế ượ ữ
đ i t ng.ố ượ

Khi khai báo m t bi n có ph m vi l p, ta c n thêm t khóa static nh ví d sau:ộ ế ạ ớ ầ ừ ư ụ
public static int MaSo;
Khi truy c p, ta có th không c n kh i t o đ i t ng mà tr c ti p thông qua tên l p:ậ ể ầ ở ạ ố ượ ự ế ớ
SinhVien.MaSo = 10;
Các bi n có ph m vi l p r t ít khi đ c s d ng, trong khi các h ng static l i r t hayế ạ ớ ấ ượ ử ụ ằ ạ ấ
đ c dùng. Lý do là trong th c t , các l p đ i t ng th ng có các thu c tính chung, c đ nhượ ự ế ớ ố ượ ườ ộ ố ị
có m i đ i t ng. H n n a, khi chúng đã không ph thu c vào m t đ i t ng c th nào thìở ọ ố ượ ơ ữ ụ ộ ộ ố ượ ụ ể
ta cũng không c n kh i t o m t đ i t ng đ truy c p. Do đó, ta s cài đ t chúng nh là cácầ ở ạ ộ ố ượ ể ậ ẽ ặ ư
h ng static.ằ
Ví d :ụ
public static final String MauDa = “Vang”; // M i sinh viên đ u có màu da là “Vang” ọ ề
ho c khái báo h ng s PI:ặ ằ ố
public static final double PI = 3.14159265358979323846;
Là h ng s c a l p Math. Khi truy c p ta ch c n g i: Math.PIằ ố ủ ớ ậ ỉ ầ ọ
Chú ý: Các bi n r t ít khi đ c khai báo là public vì có th thay đ i giá tr c a nó bênế ấ ượ ể ổ ị ủ
ngoài l p nên khó qu n lý. Trong khi đó các h ng th ng luôn đ c khai báo là public vìớ ả ằ ườ ượ
chúng đ c dùng chung và không th b thay đ i do t khóa final (h ng).ượ ể ị ổ ừ ằ
Bi n thisế
Bi n this là bi n đ i t ng c a l p t n t i ng m trong m i l p.ế ế ố ượ ủ ớ ồ ạ ầ ỗ ớ
Th ng dùng bi n this đ truy c p đ n các thu c tính c a l p b khai báo trùng trongườ ế ể ậ ế ộ ủ ớ ị
ph m vi các ph ng th c c a l p.ạ ươ ứ ủ ớ
51
Ví d :ụ
public class TestThis
{
private int number = 10;
public void PrintNumber()
{ int number =20; // khai báo trùng v i bi n c a l pớ ế ủ ớ
System.out.println(number); //in bien number = 20
System.out.println(this.number);//in bien number =10

}
}
V.3 Các ph ng th c thành ph nươ ứ ầ
Ph ng th c thành ph n là s cài đ t các hành vi c a đ i t ng. Cú pháp khai báo m tươ ứ ầ ự ặ ủ ố ượ ộ
ph ng th c trong l p nh sau:ươ ứ ớ ư
[<Cách truy xu t> <cách c p nh t>] <Ki u giá tr tr v > <Tên ph ng th c>([<danhấ ậ ậ ể ị ả ề ươ ứ
sách bi n hình th c>]) [<m nh đ throws>]ế ứ ệ ề
{
<N i dung c a ph ng th c>;ộ ủ ươ ứ
}
<Cách truy xu t>:ấ
• private: ph ng th c này ch đ c truy xu t bên trong l p ch a nó.ươ ứ ỉ ượ ấ ớ ứ
• public: có th truy xu t t b t kỳ l p bên ngoài nào.ể ấ ừ ấ ớ
• protected: ch các l p là d n xu t c a l p ch a ph ng này m i truy xu t đ cỉ ớ ẫ ấ ủ ớ ứ ươ ớ ấ ượ
nó.
• N u không khai rõ cách truy xu t, các ph ng th c s có cách truy xu t m cế ấ ươ ứ ẽ ấ ặ
đ nh là public.ị
Các ph ng th c khai báo ch ng l p d n xu t ph i có m c đ truy c p m nh h nươ ứ ồ ở ớ ẫ ấ ả ứ ộ ậ ạ ơ
ho c gi ng v i m c đ truy c p l p cha.ặ ố ớ ứ ộ ậ ở ớ
< Cách c p nh t>ậ ậ
• static: ph ng th c tác đ ng không ph thu c vào các đ i t ng c th , nó cóươ ứ ộ ụ ộ ố ượ ụ ể
th đ c g i mà không c n kh i t o đ i t ng c a l p. ể ượ ọ ầ ở ạ ố ượ ủ ớ
• abstract: ph ng th c đ n gi n nh t, không cài đ t gì trong l p khai báo nó,ươ ứ ơ ả ấ ặ ở ớ
t c là nó không có ph n thân. Ph ng th c này s đ c phát tri n trong các l pứ ầ ươ ứ ẽ ượ ể ớ
là d n xu t c a l p ch a nó. L p có ch a ph ng th c abstract cũng ph i đ cẫ ấ ủ ớ ứ ớ ứ ươ ứ ả ượ
khai báo abstract.
• final: ph ng th c này đ c b o v không cho các l p d n xu t khai báo và càiươ ứ ượ ả ệ ớ ẫ ấ
đ t l i.ặ ạ
• native: là ph ng th c đ c vi t b ng ngôn ng khác java.ươ ứ ượ ế ằ ữ
• synchronyzed: đ m b o d li u không b sai l c khi cùng m t lúc 2 ph ngả ả ữ ệ ị ạ ộ ươ

th c truy c p cùng m t d li u.ứ ậ ộ ữ ệ
<Ki u giá tr tr v >:ể ị ả ề
integer, String, char, float, ...: là các ki u d li u mà ph ng th c tr v .ể ữ ệ ươ ứ ả ề
void: ph ng th c không tr v giá tr .ươ ứ ả ề ị
Khi xác đ nh ki u giá tr tr v , khi k t thúc các lu ng x lý trong ph ng th c nh tị ể ị ả ề ế ồ ử ươ ứ ấ
thi t ph i có câu l nh return đ tr v m t giá tr thu c ki u đó.ế ả ệ ể ả ề ộ ị ộ ể
public static int max(int num1, int num2)
52
{
if(num1>num2)
return num1;
else
return num2;
}
V <m nh đ throws> chúng ta s xem xét k trong ph n x lý ngo i l .ề ệ ề ẽ ỹ ầ ử ạ ệ
V.4 G i và truy n tham s cho ph ng th cọ ề ố ươ ứ
• Các tham s ki u c b n đ c truy n theo ki u tham tr .ố ể ơ ả ượ ề ể ị
• Các tham s có ki u đ i t ng đ c truy n theo ki u tham chi u.ố ể ố ượ ượ ề ể ế
Các chú ý khi truy n tham s cho ph ng th c:ề ố ươ ứ
• Các ph ng th c không th làm thay đ i giá tr c a các tham s có ki u nguyênươ ứ ể ổ ị ủ ố ể
th yủ
• Ph ng th c có th làm thay đ i tr ng thái c a tham s ki u đ i t ng ươ ứ ể ổ ạ ủ ố ể ố ượ
• Ph ng th c không th làm cho tham s đ i t ng tham chi u t i m t đ iươ ứ ể ố ố ượ ế ớ ộ ố
t ng m i. ượ ớ
G i m t ph ng th c:ọ ộ ươ ứ
Có 2 cách g i ph ng th c:ọ ươ ứ
N u ph ng th c tr v giá tr , vi c g i ph ng th c th ng đ c x lý nh m t giáế ươ ứ ả ề ị ệ ọ ươ ứ ườ ượ ử ư ộ
tr .ị
Ví d : int larger = max(3, 5);ụ
ho c ta có th in giá tr tr v c a cu c g i ph ng th c: System.out.println(max(3,ặ ể ị ả ề ủ ộ ọ ươ ứ

5));
N u ph ng th c tr v void, vi c g i ph ng th c là câu l nh.ế ươ ứ ả ề ệ ọ ươ ứ ệ
Ví d ph ng th c println() tr v void: System.out.println("Hello!");ụ ươ ứ ả ề
V.6 Các hàm và ph ng th c đ c bi tươ ứ ặ ệ
Ph ng th c kh i t o: ươ ứ ở ạ
Ph ng th c kh i t o (constructor) dùng đ kh i t o m t đ i t ng c a l p và đ tươ ứ ở ạ ể ở ạ ộ ố ượ ủ ớ ặ
tr ng thái ban đ u cho đ i t ng b ng cách xác đ nh giá tr cho các thu c tính c a l p. ạ ầ ố ượ ằ ị ị ộ ủ ớ
M i l p có th có 1 ho c nhi u ph ng th c kh i t o.ỗ ớ ể ặ ề ươ ứ ở ạ
Ph ng th c kh i t o có cùng tên v i tên l p và không có ki u d li u tr v .ươ ứ ở ạ ớ ớ ể ữ ệ ả ề
Khi không khai báo ph ng th c kh i t o, đ i t ng đ c t o ra b ng ph ng th cươ ứ ở ạ ố ượ ượ ạ ằ ươ ứ
kh i t o m c đ nh v i các giá tr m c đ nh c a các thu c tính.ở ạ ặ ị ớ ị ặ ị ủ ộ
Constructor không đ c k th a, nó ch đ c đ nh nghĩa cho chính l p cha. V n đ sượ ế ừ ỉ ượ ị ớ ấ ề ử
d ng ph ng th c kh i t o c a l p cha trong các l p d n xu t s bàn trong ph n “Tính th aụ ươ ứ ở ạ ủ ớ ớ ẫ ấ ẽ ầ ừ
k ”ế
Ph ng th c h y:ươ ứ ủ
Trái v i ph ng th c kh i t o, ph ng th c h y đ c g i khi đ i t ng đ c gi iớ ươ ứ ở ạ ươ ứ ủ ượ ọ ố ượ ượ ả
phóng. Tuy nhiên, trong Java công vi c này đ c làm t đ ng, l p trình viên không c n quanệ ượ ự ộ ậ ầ
tâm. Trong tr ng h p c n thi t ta có th khai báo ph ng th c h y theo cú pháp:ườ ợ ầ ế ể ươ ứ ủ
protected void finalize() {
// Body of Method
}
Hàm main()
53

×