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

Mô tả vể 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 (154.15 KB, 7 trang )

Bài 2: Mô t v Java
Ni dung chính
• Nm đc các đc trng ca Java
• Các kiu chng trình Java
• Ðnh ngha v máy o Java
• Các ni dung ca JDK(Java Development Kit)
• S lc các đc trng mi ca Java2

2.1 Mô t v Java
Java là mt ngôn ng lp trình đc Sun Microsystems gii thiu vào tháng 6 nm 1995. T đó, nó đã tr
thành mt công c lp trình ca các lp trình viên chuyên nghip. Java đc xây dng trên nn tng ca C
và C++. Do vy nó s dng các cú pháp ca C và các đc trng hng đi tng ca C++.
Vào nm 1991, mt nhóm các k s ca Sun Microsystems có ý đnh thit k mt ngôn ng lp trình đ
điu khin các thit b đin t nh Tivi, máy git, lò nng, … Mc dù C và C++ có kh nng làm vic này
nhng trình biên dch li ph thuc vào tng loi CPU.
Trình biên dch thng phi tn nhiu thi gian đ xây dng nên rt đt. Vì vy đ mi loi CPU có mt
trình biên dch riêng là rt tn kém. Do đó nhu cu thc t đòi hi mt ngôn ng chy nhanh, gn, hiu qu
và đc lp thit b tc là có th chy trên nhiu loi CPU khác nhau, di các môi trng khác nhau. “Oak”
đã ra đi và vào nm 1995 đc đi tên thành Java. Mc dù mc tiêu ban đu không phi cho Internet
nhng do đc trng không ph thuc thit b nên Java đã tr thành ngôn ng lp trình cho Internet.

2.1.1 Java là gì
Java là ngôn ng lp trình hng đi tng, do vy không th dùng Java đ vit mt chng trình hng
chc nng. Java có th gii quyt hu ht các công vic mà các ngôn ng khác có th làm đc.
Java là ngôn ng va biên dch va thông dch. u tiên mã ngun đc biên dch bng công c JAVAC
đ chuyn thành dng ByteCode. Sau đó đc thc thi trên tng loi máy c th nh chng trình thông
dch. Mc tiêu ca các nhà thit k Java là cho phép ngi lp trình vit chng trình mt ln nhng có th
chy trên bt c phn cng c th.
Ngày nay, Java đc s dng rng rãi đ vit chng trình chy trên Internet. Nó là ngôn ng lp trình
hng đi tng đc lp thit b, không ph thuc vào h điu hành. Nó không ch dùng đ vit các ng
dng chy đn l hay trong mng mà còn đ xây dng các trình điu khin thit b cho đin thoi di đng,


PDA, …

2.2 Các đc trng ca Java
• n gin
• Hng đi tng
• c lp phn cng và h điu hành
• Mnh
• Bo mt
• Phân tán
• a lung
• ng

2.2.1 n gin
Nhng ngi thit k mong mun phát trin mt ngôn ng d hc và quen thuc vi đa s ngi lp trình.
Do vy Java đc loi b các đc trng phc tp ca C và C++ nh thao tác con tr, thao tác np đè
(overload),… Java không s dng lnh “goto” cng nh file header (.h). Cu trúc “struct” và “union” cng
đc loi b khi Java.

2.2.2 Hng đi tng
Java đc thit k xoay quanh mô hình hng đi tng. Vì vy trong Java, tiêu đim là d liu và các
phng pháp thao tác lên d liu đó. D liu và các phng pháp mô t trng thái và cách ng x ca mt
đi tng trong Java.

2.2.3 c lp phn cng và h điu hành
ây là kh nng mt chng trình đc vit ti mt máy nhng có th chy đc bt k đâu. Chúng đc
th hin  mc mã ngun và mc nh phân.
 mc mã ngun, ngi lp trình cn mô t kiu cho mi bin. Kiu d liu trong Java nht quán cho tt c
các h điu hành và phn cng khác nhau. Java có riêng mt th vin các lp c s. Vì vy chng trình
Java đc vit trên mt máy có th dch và chy trn tru trên các loi máy khác mà không cn vit li.
 mc nh phân, mt chng trình đã biên dch có th chy trên nn khác mà không cn dch li mã ngun.

Tuy vy cn có phn mm máy o Java (s đ cp đn  phn sau) hot đng nh mt trình thông dch ti
máy thc thi.

H ình 2.1
Trình biên dch s chuyn các chng trình vit bng C, C++ hay ngôn ng khác thành mã máy nhng ph
thuc vào CPU. Nên khi mun chy trên loi CPU khác, chúng ta phi biên dch li chng trình.

Hình 2.2
Môi trng phát trin ca Java đc chia làm hai phn: Trình biên dch và trình thông dch. Không nh C
hay C++, trình biên dch ca Java chuyn mã ngun thành dng bytecode đc lp vi phn cng mà có th
chy trên bt k CPU nào.
Nhng đ thc thi chng trình di dng bytecode, ti mi máy cn phi có trình thông dch ca Java hay
còn gi là máy o Java. Máy o Java chuyn bytecode thành mã lnh mà CPU thc thi đc.

2.2.4 Mnh m
Java yêu cu cht ch v kiu d liu và phi mô t rõ ràng khi vit chng trình. Chúng s kim tra lúc
biên dch và c trong thi gian thông dch vì vy Java loi b các kiu d liu d gây ra li.

2.2.5 Bo mt

Java cung cp mt s lp đ kim tra bo mt.
 lp đu tiên, d liu và các phng pháp đc đóng gói bên trong lp. Chúng ch đc truy xut thông
qua các giao din mà lp cung cp. Java không h tr con tr vì vy không cho phép truy xut b nh trc
tip. Nó cng ngn chn không cho truy xut thông tin bên ngoài ca mng bng k thut tràn và cng
cung cp k thut dn rác trong b nh. Các đc trng này to cho Java an toàn và có kh nng c đng
cao.
Trong lp th hai, trình biên dch kim soát đ đm bo mã an toàn. Lp th ba đc đm bo bi trình
thông dch. Chúng kim tra xem bytecode có đm bo các qui tc an toàn trc khi thc thi. Lp th t
kim soát vic np các lp lên b nh đ giám sát vic vi phm gii hn truy xut trc khi np vào h
thng.


2.2.6 Phân tán
Java có th dùng đ xây dng các ng dng có th làm vic trên nhiu phn cng, h điu hành và giao
din đ ha. Java đc thit k cho các ng dng chy trên mng. Vì vy chúng đc s dng rng rãi trên
Internet, ni s dng nhiu nn tng khác nhau.

2.2.7 a lung
Chng trình Java s dng k thut đa tin trình (Multithread) đ thc thi các công vic đng thi. Chúng
cng cung cp gii pháp đng b gia các tin trình. c tính h tr đa tin trình này cho phép xây dng
các ng dng trên mng chy uyn chuyn.

2.2.8 ng
Java đc thit k nh mt ngôn ng đng đ đáp ng cho nhng môi trng m. Các chng trình Java
b xung các thông tin cho các đi tng ti thi gian thc thi. iu này cho phép kh nng liên kt đng
các mã.

2.3 Các kiu chng trình Java
Chúng ta có th xây dng các loi chng trình Java nh sau:

2.3.1 Applets
ây là chng trình chy trên Internet thông qua các trình duyt h tr Java nh IE hay Netscape. Bn có
th dùng các công c ca Java đ xây dng Applet. Applet đc nhúng bên trong trang Web hoc file
HTML. Khi trang Web hin th trong trình duyt, Applet s đc np và thc thi.

2.3.2 ng dng thc thi qua dòng lnh
Các chng trình này chy t du nhc lnh và không s dng giao din đ ha. Các thông tin nhp xut
đc th hin ti du nhc lnh.

2.3.3 ng dng đ ha
ây là các chng trình Java chy đc lp cho phép ngi dùng tng tác qua giao din đ ha.


2.3.4 Servlet
Java thích hp đ phát trin ng dng nhiu lp. Applet là chng trình đ ha chy trên trình duyt ti
máy trm.  các ng dng Web, máy trm gi yêu cu ti máy ch. Máy ch x lý và gi ngc kt qu
tr li máy trm. Các chng trình Java API chy trên máy ch giám sát các quá trình ti máy ch và tr li
các yêu cu ca máy trm. Các chng trình Java API chy trên máy ch này m rng kh nng ca các
ng dng Java API chun. Các ng dng trên máy ch này đc gi là các Servlet. hoc Applet ti máy
ch. Các x lý trên Form ca HTML là cách s dng đn gin nht ca Servlet. Chúng còn còn có th đc
dùng đ x lý d liu, thc thi các transaction và thng đc thc thi qua má y ch Web.

2.3.5 ng dng c s d liu
Các ng dng này s dng JDBC API đ kt ni ti c s d liu. Chúng có th là Applet hay ng dng,
nhng Applet b gii hn bi tính bo mt.

2.4 Máy o Java (JVM-Java Virtual Machine)
Máy o Java là trái tim ca ngôn ng Java. Môi trng Java bao gm nm phn t sau:
- Ngôn ng
- Ðnh ngha Bytecode
- Các th vin lp Java/Sun
- Máy o Java (JVM)
- Cu trúc ca file .class
Các phn t to cho Java thành công là
- Ðnh ngha Bytecode
- Cu trúc ca file .class
- Máy o Java (JVM)
Kh nng c đng ca file .class cho phép các chng trình Java vit mt ln nhng chy  bt k đâu.
Kh nng này có đc nh s giúp đ ca máy o Java.

2.4.1 Máy o Java là gì ?
Máy o 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. Máy o to ra mt
môi trng bên trong đ thc thi các lnh bng cách:
- Np các file .class
- Qun lý b nh
- Dn “rác”
Vic không nht quán ca phn cng làm cho máy o phi s dng ngn xp đ lu tr các thông tin sau:
- Các “Frame” cha các trng thái ca các phng pháp.
- Các toán hng ca mã bytecode.
- Các tham s truyn cho phng pháp.
- Các bin cc b.
Khi JVM thc thi mã, mt thanh ghi cc b có tên “Program Counter” đc s dng. Thanh ghi này tr
ti lnh đang thc hin. Khi cn thit, có th thay đi ni dung thanh ghi đ đi hng thc thi ca chng
trình. Trong trng hp thông thng thì tng lnh mt ni tip nhau s đc thc thi.
Mt khái nim thông dng khác trong Java là trình biên dch “Just In Time-JIT”. Các trình duyt thông
dng nh Netscape hay IE đu có JIT bên trong đ tng tc đ thc thi chng trình Java. Mc đích chính
ca JIT là chuyn tp lnh bytecode thành mã máy c th cho tng loi CPU. Các lnh này s đc lu tr
và s dng mi khi gi đn.

2.4.2 Qun lý b nh và dn rác
Trong C, C++ hay Pascal ngi lp trình s dng phng pháp nguyên thy đ cp phát và thu hi b nh
 vùng “Heap”. Heap là vùng b nh ln đc phân chia cho tt c các thread.
 qun lý Heap, b nh đc theo dõi qua các danh sách sau:
- Danh sách các vùng nh rnh cha cp phát.
- Danh sách các vùng đã cp.
Khi có mt yêu cu v cp phát b nh, h thng xem xét trong danh sách cha cp phát đ ly ra khi b
nh đu tiên có kích c sát nht. Chin thut cp phát này gim ti thiu vic phân mnh ca heap.
“Coalescing” là k thut khác cng gim thiu vic phân mnh ca heap b ng cách gom li các vùng nh

cha dùng lin nhau. Còn k thu t sp xp li các phn đã dùng đ to vùng nh rnh ln hn gi là
“Compaction”.
Java s dng hai heap riêng bit cho cp phát vùng nh tnh và vùng nh đng. Mt heap (heap tnh) cha
các đnh ngha v lp, các hng và danh sách các phng pháp. Heap còn li (heap đng) đc chia làm hai
phn đc cp phát theo hai chiu ngc nhau. Mt bên cha đi tng còn mt bên cha con tr tr đn
đi tng đó.
“Handle” là cu trúc bao gm hai con tr. Mt tr đn bng phng pháp ca đi tng, con tr th hai tr
đn chính đi tng đó. Chú ý rng khi “compaction” cn cp nht li giá tr con tr ca cu trúc “handle”.
Thut toán dn rác có th áp dng cho các đi tng đt trong heap đng. Khi có yêu cu v b nh, trình
qun lý heap trc tiên kim tra danh sách b nh cha cp phát. Nu không tìm thy khi b nh nào phù
hp (v kích c) thì trình dn rác s đc kích hot khi h thng rnh. Nhng khi đòi hi b nh cp bách
thì trình dn rác s đc kích hot ngay.
Trình dn rác gi hàm Finalize trc khi dn dp đi tng. Hàm này s dn dp các tài nguyên bên ngoài
nh các file đang m. Công vic này không đc trình dn rác thc thi.
2.4.3 Quá trình kim tra file .class
Vic kim tra đc áp dng cho tt c các file .class sp đc np lên b nh đ đm bo tính an toàn.
Trình “Class Loader” s kim tra tt c các file .class không thuc h điu hành vi mc đích giám sát s
tuân th các nghi thc đ phát hin các file .class có nguy c gây h hng đn b nh, h thng file cc b,
mng hoc h điu hành. Quá trình kim tra s xem xét đn tính toàn vn toàn cc ca lp.
File .class bao gm ba phn logic là:
- Bytecode
- Thông tin v Class nh phng pháp, giao din và các giá tr đc tp hp trong quá trình biên dch.
- Các thuc tính v lp.
Các thông tin ca file .class đc xem xét riêng r trong các bng sau:
- Bng Field cha các thuc tính
- Bng Method cha các hàm ca class
- Bng Interface cha các giao din và các hng s
Quá trình kim tra file .class đc thc hin  bn mc:
• Mc đu tiên thc hin vic kim tra cú pháp đ đm bo tính cu trúc và tính toàn vn cú pháp ca
file .class đc np.

• Mc th hai s xem xét file .class đ đm bo các file này không vi phm các nguyên tc v s nht
quán ng ngha.
• Mc th ba s kim tra bytecode. Trong bc này các thông tin so sánh s là s thông s truyn ca
hàm, kh nng truy xut sai ch s ca mng, chui, biu thc.
• Mc th t s kim tra trong thi gian thc thi đ  gi ám s át c ác vi c còn li m à ba b  c tr ên ch
a l àm. Ví d nh liên kt ti các lp khác trong khi thc thi, hay kim tra quyn truy xut. Nu mi
điu tha mãn, lp s đc khi to.

2.5 B công c phát trin JDK (Java Development Kit)
Sun Microsystem đa ra ngôn ng lp trình Java qua sn phm có tên là Java Development Kit (JDK). Ba
phiên bn chính là:
- Java 1.0 - S dng ln đu vào nm 1995
- Java 1.1 – Ða ra nm 1997 vI nhiu u đim hn phiên bn trc.
- Java 2 – Phiên bn mi nht

JDK bao gm Java Plug-In, chúng cho phép chy trc tip Java Applet hay JavaBean bng cách dùng JRE
thay cho s dng môi trng thc thi m c đnh ca trình duyt.
JDK cha các công c sau:
2.5.1 Trình biên dch, 'javac'
Cú pháp:
javac [options] sourcecodename.java

2.5.2 Trình thông dch, 'java'
Cú pháp:
java [options] classname

2.5.3 Trình dch ngc, 'javap'
Cú pháp:
javap [options] classname


2.5.4 Công c sinh tài liu, 'javadoc'
Cú pháp:
javadoc [options] sourcecodename.java

2.5.5 Chng trình tìm li - Debug, 'jdb‘
Cú pháp:
jdb [options] sourcecodename.java
OR
jdb -host -password [options] sourcecodename.java

2.5.6 Chng 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 bn JFC 1.1. Mt s package thng dùng đc lit kê nh sau:
2.6.1 java.lang
Cha các lp quan trng nht ca ngôn ng Java. Chúng bao gm các kiu d liu c bn nh Character,
Integer,… Chúng cng cha các lp làm nhim v x lý li và các lp nhp xut chun. Mt vài lp quan
trng khác nh String hay StringBuffer.
2.6.2 java.applet

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×