Bài 2: Mô t v Java
Ni dung chính
• Nm đc các đc trng ca Java
• Các kiu chng trình Java
• Ðnh ngha v máy o Java
• Các ni dung ca JDK(Java Development Kit)
• S lc các đc trng mi ca Java2
2.1 Mô t v Java
Java là mt ngôn ng lp trình đc Sun Microsystems gii thiu vào tháng 6 nm 1995. T đó, nó đã tr
thành mt công c lp trình ca các lp trình viên chuyên nghip. Java đc xây dng trên nn tng ca C
và C++. Do vy nó s dng các cú pháp ca C và các đc trng hng đi tng ca C++.
Vào nm 1991, mt nhóm các k s ca Sun Microsystems có ý đnh thit k mt ngôn ng lp trình đ
điu khin các thit b đin t nh Tivi, máy git, lò nng, … Mc dù C và C++ có kh nng làm vic này
nhng trình biên dch li ph thuc vào tng loi CPU.
Trình biên dch thng phi tn nhiu thi gian đ xây dng nên rt đt. Vì vy đ mi loi CPU có mt
trình biên dch riêng là rt tn kém. Do đó nhu cu thc t đòi hi mt ngôn ng chy nhanh, gn, hiu qu
và đc lp thit b tc là có th chy trên nhiu loi CPU khác nhau, di các môi trng khác nhau. “Oak”
đã ra đi và vào nm 1995 đc đi tên thành Java. Mc dù mc tiêu ban đu không phi cho Internet
nhng do đc trng không ph thuc thit b nên Java đã tr thành ngôn ng lp trình cho Internet.
2.1.1 Java là gì
Java là ngôn ng lp trình hng đi tng, do vy không th dùng Java đ vit mt chng trình hng
chc nng. Java có th gii quyt hu ht các công vic mà các ngôn ng khác có th làm đc.
Java là ngôn ng va biên dch va thông dch. u tiên mã ngun đc biên dch bng công c JAVAC
đ chuyn thành dng ByteCode. Sau đó đc thc thi trên tng loi máy c th nh chng trình thông
dch. Mc tiêu ca các nhà thit k Java là cho phép ngi lp trình vit chng trình mt ln nhng có th
chy trên bt c phn cng c th.
Ngày nay, Java đc s dng rng rãi đ vit chng trình chy trên Internet. Nó là ngôn ng lp trình
hng đi tng đc lp thit b, không ph thuc vào h điu hành. Nó không ch dùng đ vit các ng
dng chy đn l hay trong mng mà còn đ xây dng các trình điu khin thit b cho đin thoi di đng,
PDA, …
2.2 Các đc trng ca Java
• n gin
• Hng đi tng
• c lp phn cng và h điu hành
• Mnh
• Bo mt
• Phân tán
• a lung
• ng
2.2.1 n gin
Nhng ngi thit k mong mun phát trin mt ngôn ng d hc và quen thuc vi đa s ngi lp trình.
Do vy Java đc loi b các đc trng phc tp ca C và C++ nh thao tác con tr, thao tác np đè
(overload),… Java không s dng lnh “goto” cng nh file header (.h). Cu trúc “struct” và “union” cng
đc loi b khi Java.
2.2.2 Hng đi tng
Java đc thit k xoay quanh mô hình hng đi tng. Vì vy trong Java, tiêu đim là d liu và các
phng pháp thao tác lên d liu đó. D liu và các phng pháp mô t trng thái và cách ng x ca mt
đi tng trong Java.
2.2.3 c lp phn cng và h điu hành
ây là kh nng mt chng trình đc vit ti mt máy nhng có th chy đc bt k đâu. Chúng đc
th hin mc mã ngun và mc nh phân.
mc mã ngun, ngi lp trình cn mô t kiu cho mi bin. Kiu d liu trong Java nht quán cho tt c
các h điu hành và phn cng khác nhau. Java có riêng mt th vin các lp c s. Vì vy chng trình
Java đc vit trên mt máy có th dch và chy trn tru trên các loi máy khác mà không cn vit li.
mc nh phân, mt chng trình đã biên dch có th chy trên nn khác mà không cn dch li mã ngun.
Tuy vy cn có phn mm máy o Java (s đ cp đn phn sau) hot đng nh mt trình thông dch ti
máy thc thi.
H ình 2.1
Trình biên dch s chuyn các chng trình vit bng C, C++ hay ngôn ng khác thành mã máy nhng ph
thuc vào CPU. Nên khi mun chy trên loi CPU khác, chúng ta phi biên dch li chng trình.
Hình 2.2
Môi trng phát trin ca Java đc chia làm hai phn: Trình biên dch và trình thông dch. Không nh C
hay C++, trình biên dch ca Java chuyn mã ngun thành dng bytecode đc lp vi phn cng mà có th
chy trên bt k CPU nào.
Nhng đ thc thi chng trình di dng bytecode, ti mi máy cn phi có trình thông dch ca Java hay
còn gi là máy o Java. Máy o Java chuyn bytecode thành mã lnh mà CPU thc thi đc.
2.2.4 Mnh m
Java yêu cu cht ch v kiu d liu và phi mô t rõ ràng khi vit chng trình. Chúng s kim tra lúc
biên dch và c trong thi gian thông dch vì vy Java loi b các kiu d liu d gây ra li.
2.2.5 Bo mt
Java cung cp mt s lp đ kim tra bo mt.
lp đu tiên, d liu và các phng pháp đc đóng gói bên trong lp. Chúng ch đc truy xut thông
qua các giao din mà lp cung cp. Java không h tr con tr vì vy không cho phép truy xut b nh trc
tip. Nó cng ngn chn không cho truy xut thông tin bên ngoài ca mng bng k thut tràn và cng
cung cp k thut dn rác trong b nh. Các đc trng này to cho Java an toàn và có kh nng c đng
cao.
Trong lp th hai, trình biên dch kim soát đ đm bo mã an toàn. Lp th ba đc đm bo bi trình
thông dch. Chúng kim tra xem bytecode có đm bo các qui tc an toàn trc khi thc thi. Lp th t
kim soát vic np các lp lên b nh đ giám sát vic vi phm gii hn truy xut trc khi np vào h
thng.
2.2.6 Phân tán
Java có th dùng đ xây dng các ng dng có th làm vic trên nhiu phn cng, h điu hành và giao
din đ ha. Java đc thit k cho các ng dng chy trên mng. Vì vy chúng đc s dng rng rãi trên
Internet, ni s dng nhiu nn tng khác nhau.
2.2.7 a lung
Chng trình Java s dng k thut đa tin trình (Multithread) đ thc thi các công vic đng thi. Chúng
cng cung cp gii pháp đng b gia các tin trình. c tính h tr đa tin trình này cho phép xây dng
các ng dng trên mng chy uyn chuyn.
2.2.8 ng
Java đc thit k nh mt ngôn ng đng đ đáp ng cho nhng môi trng m. Các chng trình Java
b xung các thông tin cho các đi tng ti thi gian thc thi. iu này cho phép kh nng liên kt đng
các mã.
2.3 Các kiu chng trình Java
Chúng ta có th xây dng các loi chng trình Java nh sau:
2.3.1 Applets
ây là chng trình chy trên Internet thông qua các trình duyt h tr Java nh IE hay Netscape. Bn có
th dùng các công c ca Java đ xây dng Applet. Applet đc nhúng bên trong trang Web hoc file
HTML. Khi trang Web hin th trong trình duyt, Applet s đc np và thc thi.
2.3.2 ng dng thc thi qua dòng lnh
Các chng trình này chy t du nhc lnh và không s dng giao din đ ha. Các thông tin nhp xut
đc th hin ti du nhc lnh.
2.3.3 ng dng đ ha
ây là các chng trình Java chy đc lp cho phép ngi dùng tng tác qua giao din đ ha.
2.3.4 Servlet
Java thích hp đ phát trin ng dng nhiu lp. Applet là chng trình đ ha chy trên trình duyt ti
máy trm. các ng dng Web, máy trm gi yêu cu ti máy ch. Máy ch x lý và gi ngc kt qu
tr li máy trm. Các chng trình Java API chy trên máy ch giám sát các quá trình ti máy ch và tr li
các yêu cu ca máy trm. Các chng trình Java API chy trên máy ch này m rng kh nng ca các
ng dng Java API chun. Các ng dng trên máy ch này đc gi là các Servlet. hoc Applet ti máy
ch. Các x lý trên Form ca HTML là cách s dng đn gin nht ca Servlet. Chúng còn còn có th đc
dùng đ x lý d liu, thc thi các transaction và thng đc thc thi qua má y ch Web.
2.3.5 ng dng c s d liu
Các ng dng này s dng JDBC API đ kt ni ti c s d liu. Chúng có th là Applet hay ng dng,
nhng Applet b gii hn bi tính bo mt.
2.4 Máy o Java (JVM-Java Virtual Machine)
Máy o Java là trái tim ca ngôn ng Java. Môi trng Java bao gm nm phn t sau:
- Ngôn ng
- Ðnh ngha Bytecode
- Các th vin lp Java/Sun
- Máy o Java (JVM)
- Cu trúc ca file .class
Các phn t to cho Java thành công là
- Ðnh ngha Bytecode
- Cu trúc ca file .class
- Máy o Java (JVM)
Kh nng c đng ca file .class cho phép các chng trình Java vit mt ln nhng chy bt k đâu.
Kh nng này có đc nh s giúp đ ca máy o Java.
2.4.1 Máy o Java là gì ?
Máy o là mt phn mm da trên c s máy tính o. Nó có tp hp các lnh logic đ xác đnh các hot
đng ca máy tính. Ngi ta có th xem nó nh mt h điu hành thu nh. Nó thit lp các lp tru tng
cho: Phn cng bên di, h điu hành, mã đã biên dch.
Trình biên dch chuyn mã ngun thành tp các lnh ca máy o mà không ph thuc vào phn cng c
th. Trình thông dch trên mi máy s chuyn tp lnh này thành chng trình thc thi. Máy o to ra mt
môi trng bên trong đ thc thi các lnh bng cách:
- Np các file .class
- Qun lý b nh
- Dn “rác”
Vic không nht quán ca phn cng làm cho máy o phi s dng ngn xp đ lu tr các thông tin sau:
- Các “Frame” cha các trng thái ca các phng pháp.
- Các toán hng ca mã bytecode.
- Các tham s truyn cho phng pháp.
- Các bin cc b.
Khi JVM thc thi mã, mt thanh ghi cc b có tên “Program Counter” đc s dng. Thanh ghi này tr
ti lnh đang thc hin. Khi cn thit, có th thay đi ni dung thanh ghi đ đi hng thc thi ca chng
trình. Trong trng hp thông thng thì tng lnh mt ni tip nhau s đc thc thi.
Mt khái nim thông dng khác trong Java là trình biên dch “Just In Time-JIT”. Các trình duyt thông
dng nh Netscape hay IE đu có JIT bên trong đ tng tc đ thc thi chng trình Java. Mc đích chính
ca JIT là chuyn tp lnh bytecode thành mã máy c th cho tng loi CPU. Các lnh này s đc lu tr
và s dng mi khi gi đn.
2.4.2 Qun lý b nh và dn rác
Trong C, C++ hay Pascal ngi lp trình s dng phng pháp nguyên thy đ cp phát và thu hi b nh
vùng “Heap”. Heap là vùng b nh ln đc phân chia cho tt c các thread.
qun lý Heap, b nh đc theo dõi qua các danh sách sau:
- Danh sách các vùng nh rnh cha cp phát.
- Danh sách các vùng đã cp.
Khi có mt yêu cu v cp phát b nh, h thng xem xét trong danh sách cha cp phát đ ly ra khi b
nh đu tiên có kích c sát nht. Chin thut cp phát này gim ti thiu vic phân mnh ca heap.
“Coalescing” là k thut khác cng gim thiu vic phân mnh ca heap b ng cách gom li các vùng nh
cha dùng lin nhau. Còn k thu t sp xp li các phn đã dùng đ to vùng nh rnh ln hn gi là
“Compaction”.
Java s dng hai heap riêng bit cho cp phát vùng nh tnh và vùng nh đng. Mt heap (heap tnh) cha
các đnh ngha v lp, các hng và danh sách các phng pháp. Heap còn li (heap đng) đc chia làm hai
phn đc cp phát theo hai chiu ngc nhau. Mt bên cha đi tng còn mt bên cha con tr tr đn
đi tng đó.
“Handle” là cu trúc bao gm hai con tr. Mt tr đn bng phng pháp ca đi tng, con tr th hai tr
đn chính đi tng đó. Chú ý rng khi “compaction” cn cp nht li giá tr con tr ca cu trúc “handle”.
Thut toán dn rác có th áp dng cho các đi tng đt trong heap đng. Khi có yêu cu v b nh, trình
qun lý heap trc tiên kim tra danh sách b nh cha cp phát. Nu không tìm thy khi b nh nào phù
hp (v kích c) thì trình dn rác s đc kích hot khi h thng rnh. Nhng khi đòi hi b nh cp bách
thì trình dn rác s đc kích hot ngay.
Trình dn rác gi hàm Finalize trc khi dn dp đi tng. Hàm này s dn dp các tài nguyên bên ngoài
nh các file đang m. Công vic này không đc trình dn rác thc thi.
2.4.3 Quá trình kim tra file .class
Vic kim tra đc áp dng cho tt c các file .class sp đc np lên b nh đ đm bo tính an toàn.
Trình “Class Loader” s kim tra tt c các file .class không thuc h điu hành vi mc đích giám sát s
tuân th các nghi thc đ phát hin các file .class có nguy c gây h hng đn b nh, h thng file cc b,
mng hoc h điu hành. Quá trình kim tra s xem xét đn tính toàn vn toàn cc ca lp.
File .class bao gm ba phn logic là:
- Bytecode
- Thông tin v Class nh phng pháp, giao din và các giá tr đc tp hp trong quá trình biên dch.
- Các thuc tính v lp.
Các thông tin ca file .class đc xem xét riêng r trong các bng sau:
- Bng Field cha các thuc tính
- Bng Method cha các hàm ca class
- Bng Interface cha các giao din và các hng s
Quá trình kim tra file .class đc thc hin bn mc:
• Mc đu tiên thc hin vic kim tra cú pháp đ đm bo tính cu trúc và tính toàn vn cú pháp ca
file .class đc np.
• Mc th hai s xem xét file .class đ đm bo các file này không vi phm các nguyên tc v s nht
quán ng ngha.
• Mc th ba s kim tra bytecode. Trong bc này các thông tin so sánh s là s thông s truyn ca
hàm, kh nng truy xut sai ch s ca mng, chui, biu thc.
• Mc th t s kim tra trong thi gian thc thi đ gi ám s át c ác vi c còn li m à ba b c tr ên ch
a l àm. Ví d nh liên kt ti các lp khác trong khi thc thi, hay kim tra quyn truy xut. Nu mi
điu tha mãn, lp s đc khi to.
2.5 B công c phát trin JDK (Java Development Kit)
Sun Microsystem đa ra ngôn ng lp trình Java qua sn phm có tên là Java Development Kit (JDK). Ba
phiên bn chính là:
- Java 1.0 - S dng ln đu vào nm 1995
- Java 1.1 – Ða ra nm 1997 vI nhiu u đim hn phiên bn trc.
- Java 2 – Phiên bn mi nht
JDK bao gm Java Plug-In, chúng cho phép chy trc tip Java Applet hay JavaBean bng cách dùng JRE
thay cho s dng môi trng thc thi m c đnh ca trình duyt.
JDK cha các công c sau:
2.5.1 Trình biên dch, 'javac'
Cú pháp:
javac [options] sourcecodename.java
2.5.2 Trình thông dch, 'java'
Cú pháp:
java [options] classname
2.5.3 Trình dch ngc, 'javap'
Cú pháp:
javap [options] classname
2.5.4 Công c sinh tài liu, 'javadoc'
Cú pháp:
javadoc [options] sourcecodename.java
2.5.5 Chng trình tìm li - Debug, 'jdb‘
Cú pháp:
jdb [options] sourcecodename.java
OR
jdb -host -password [options] sourcecodename.java
2.5.6 Chng trình xem Applet , 'appletviewer‘
Cú pháp:
appletviewer [options] sourcecodename.java / url
2.6 Java Core API
Nhân Java API đc đa ra qua phiên bn JFC 1.1. Mt s package thng dùng đc lit kê nh sau:
2.6.1 java.lang
Cha các lp quan trng nht ca ngôn ng Java. Chúng bao gm các kiu d liu c bn nh Character,
Integer,… Chúng cng cha các lp làm nhim v x lý li và các lp nhp xut chun. Mt vài lp quan
trng khác nh String hay StringBuffer.
2.6.2 java.applet
ây là package nh nht cha mt mình lp Applet. Các lp Applet nhúng trong trang Web đu dn xut
t lp này.
2.6.3 java.awt
Package này đc gi là Abstract Window Toolkit (AWT). Chúng cha các tài nguyên dùng đ to giao
din đ ha. Mt s lp bên trong là: Button, GridBagLayout, Graphics.
2.6.4 java.io
Cung cp th vin nhp xut chun ca ngôn ng. Chúng cho phép to và qun lý dòng d liu theo mt
vài cách.
2.6.5 java.util
Package này cung cp mt s công c hu ích. Mt vài lp ca package này là: Date, Hashtable, Stack,
Vector và StringTokenizer.
2.6.6 java.net
Cung cp kh nng giao tip vi máy t xa. Cho phép to và kt ni vi Socket hoc URL.
2.6.7 java.awt.event
Cha các l p dùng đ x lý các s kin trong chng trình nh chut, bàn phím.
2.6.8 java.rmi
Công c đ gi hàm t xa. Chúng cho phép to đi tng trên máy khác và s dng các đi tng đó trên
máy cc b.
2.6.9 java.security
Cung cp các công c cn thit đ mã hóa và đm bo tính an toàn ca d liu truyn gia máy trm và
máy ch.
2.6.10 java.sql
Package này cha Java DataBase Connectivity (JDBC), dùng đ truy xut c s d liu quan h nh
Oracle, SQL Server.
2.7 Các đc trng mi ca Java 2
Các phiên bn trc ca Java ch thích hp đ vit các ng dng nh trên Web hn là xây dng các ng
dng chy trên mng đ đm nhim toàn b các công vic ca ca mt công ty hoc h thng phân tán.
Java 2 đáp ng yêu cu này. Mt vài đc trng ca chúng là:
- Swing
ây là mt tp các lp và giao din mi dùng đ to giai din ng dng đ ha bng thit k “Nhìn và cn
giác” (Look and Feel)
- Kéo và th
ây là kh nng di chuyn thông tin gia các ng dng hay các phn khác nhau ca chng trình.
- Java 2D API
Cha các tp hp các lp h tr cho nh và đ ha hai chiu.
- Âm thanh
Tp hp các đc trng âm thanh hoàn toàn mi cho Java.
- RMI
RMI (Remote Method Invocation) cho phép các ng dng gi các phng pháp ca đi tng ti máy t xa
và cho phép giao tip vi chúng.
Tóm tt
- Java là ngôn ng biên dch và thông dch
- Các đc trng ca Java :
n gin,
Hng đi tng,
c lp phn cng,
Mnh,
Bo mt,
Phân tán,
a lung,
ng
- Máy o Java
- Java Development Kit
- Các đc trng mi ca Java 2
Bài tp
- Cài đt Java 2
- Gõ các lnh sau ti du nhc và lit kê các tham s khác nhau ca chúng:
javac
java
. pháp:
javap [options] classname
2.5.4 Công c sinh tài liu, 'javadoc'
Cú pháp:
javadoc [options] sourcecodename.java
2.5.5 Chng trình. dn rác gi hàm Finalize trc khi dn dp đi tng. Hàm này s dn dp các tài nguyên bên ngoài
nh các file đang m. Công vic này không đc trình dn