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

CoreJAVA - Chương 2 pptx

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
ây là package nh nht cha mt mình lp Applet. Các lp Applet nhúng trong trang Web đu dn xut
t lp này.
2.6.3 java.awt
Package này đc gi là Abstract Window Toolkit (AWT). Chúng cha các tài nguyên dùng đ to giao
din đ ha. Mt s lp bên trong là: Button, GridBagLayout, Graphics.
2.6.4 java.io
Cung cp th vin nhp xut chun ca ngôn ng. Chúng cho phép to và qun lý dòng d liu theo mt
vài cách.
2.6.5 java.util

Package này cung cp mt s công c hu ích. Mt vài lp ca package này là: Date, Hashtable, Stack,
Vector và StringTokenizer.
2.6.6 java.net
Cung cp kh nng giao tip vi máy t xa. Cho phép to và kt ni vi Socket hoc URL.
2.6.7 java.awt.event
Cha các l p dùng đ x lý các s kin trong chng trình nh chut, bàn phím.
2.6.8 java.rmi
Công c đ gi hàm t xa. Chúng cho phép to đi tng trên máy khác và s dng các đi tng đó trên
máy cc b.
2.6.9 java.security
Cung cp các công c cn thit đ mã hóa và đm bo tính an toàn ca d liu truyn gia máy trm và
máy ch.
2.6.10 java.sql
Package này cha Java DataBase Connectivity (JDBC), dùng đ truy xut c s d liu quan h nh
Oracle, SQL Server.

2.7 Các đc trng mi ca Java 2
Các phiên bn trc ca Java ch thích hp đ vit các ng dng nh trên Web hn là xây dng các ng
dng chy trên mng đ đm nhim toàn b các công vic ca ca mt công ty hoc h thng phân tán.
Java 2 đáp ng yêu cu này. Mt vài đc trng ca chúng là:
- Swing
ây là mt tp các lp và giao din mi dùng đ to giai din ng dng đ ha bng thit k “Nhìn và cn
giác” (Look and Feel)
- Kéo và th
ây là kh nng di chuyn thông tin gia các ng dng hay các phn khác nhau ca chng trình.
- Java 2D API
Cha các tp hp các lp h tr cho nh và đ ha hai chiu.
- Âm thanh
Tp hp các đc trng âm thanh hoàn toàn mi cho Java.
- RMI

RMI (Remote Method Invocation) cho phép các ng dng gi các phng pháp ca đi tng ti máy t xa
và cho phép giao tip vi chúng.

Tóm tt

- Java là ngôn ng biên dch và thông dch
- Các đc trng ca Java :
n gin,
Hng đi tng,
c lp phn cng,
Mnh,
Bo mt,
Phân tán,
a lung,
ng
- Máy o Java
- Java Development Kit
- Các đc trng mi ca Java 2

Bài tp

- Cài đt Java 2
- Gõ các lnh sau ti du nhc và lit kê các tham s khác nhau ca chúng:
javac
java

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

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