lap trinh java chuong 2

7 305 0
lap trinh java chuong 2

Đang tải... (xem toàn văn)

Thông tin tài liệu

tong hop lap trinh java chi tiet, ro, de hieu cho nhung nguoi dang muon hoc lap trinh java, do minh tim tren internet

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 Javatrì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 . 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, &apos ;java& apos; Cú pháp: java. (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

Ngày đăng: 13/02/2014, 13:05

Tài liệu cùng người dùng

Tài liệu liên quan