LAP TRINH JAVA-3

Màu nền
Font chữ
Font size
Chiều cao dòng

----------------------- Page 1-----------------------

----------------------- Page 2-----------------------

               Chương 1

Giới thiệu ngôn ngữ

             lập trình Java

----------------------- Page 3-----------------------

                                 Giới thiệu

•  Sựphát triển của Java

•  Hướng tới người dùng

•  Giống với C / C++

----------------------- Page 4-----------------------

       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

----------------------- Page 5-----------------------

Các chương trình dịch

                 truyền thống

----------------------- Page 6-----------------------

Chương trình dịch Java

----------------------- Page 7-----------------------

 Các loại chương trình Java

  Applets

  Ứng dụng độc lập (console Application)

  Ứng dụng giao diện (GUI Application)

  Servlet

  Ứng dụng cơ sởdữliệu

----------------------- Page 8-----------------------

                       Máy ảo Java

•  Là một phần mềm dựa trên cơ sởmáy tính ảo

•  Là  tập   hợp   các   lệnh   logic  đểxác  định   hoạt

   động của máy tính

• Được xem như là một hệđiều hành thu nhỏ

•  Nó thiết lập 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

----------------------- Page 9-----------------------

Quá trình dịch chương trình

                              Java

    •  Trình   biên   dịch   chuyển   mã   nguồn   thành   tập

       các lệnh 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     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 để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”

----------------------- Page 10-----------------------

             Trình dịch Java

    Java Development Kit

•  Java   1.0   -  Sửdụng  lần  đầu  vào  năm

         1995

•  Java 1.1 – Đưa ra năm 1997

•  Java 2 – Phiên bản mới nhất

----------------------- Page 11-----------------------

              Bộcông cụJDK

•   Trình biên dịch, 'javac'

     –   javac [options] sourcecodename.java

•   Trình thông dịch, 'java'

     –   java [options] classname

•   Trình dịch ngược, 'javap'

     –   javap [options] classname

•   Công cụsinh tài liệu, 'javadoc'

     –   javadoc [options] sourcecodename.java

----------------------- Page 12-----------------------

• Chương trình tìm lỗi - Debug, 'jdb‘

     – jdb [options] sourcecodename.java

        OR

     –  jdb -host -password [options]

        sourcecodename.java

• Chương trình xem Applet ,

    'appletviewer‘

     – appletviewer [options]

        sourcecodename.java / url

----------------------- Page 13-----------------------

Các gói chuẩn của Java

 •  java.lang

 •  java.applet

 •  java.awt

 •  java.io

 •  java.util

 •  java.net

 •  java.awt.event

 •  java.rmi

 •  java.security

 •  java.sql

----------------------- Page 14-----------------------

   Các đặc trưng mớI của

                               Java2

•  Swing

•  Kéo và thả

•  Java 2D API

•  Âm thanh

•  RMI

----------------------- Page 15-----------------------

                        Chương 2

Các phần tửcơbản ngôn ngữJava

----------------------- Page 16-----------------------

                                   Cấu trúc một

                           chương trình Java

•  Xác lập thông tin môi trường

•  Khai báo lớp đối tượng (Class)

•  Các thành phần (Tokens):

     – Định danh

     – Từkhóa / từdựphòng

     – Ký tựphân cách

     – Nguyên dạng (Literals)

     – Toán tử

----------------------- Page 17-----------------------

 Ví dụmột chương trình Java

                                  mẫu

//  This is a simple program called “Ex1.java”

class Ex1

{

   public static void main(String args[])

    {

       System.out.println(“My first program in Java”);

    }

}

----------------------- Page 18-----------------------

    Biên dịch chương trình java

•  ..\jdk\bin>javac Ex1.java

•  ..\jdk\bin>java Ex1

•  Kết quả:

     My first program in Java

----------------------- Page 19-----------------------

 Truyền đối sốtrong dòng lệnh

class Pass

{

  public static void main(String parameters[])

  {

    System.out.println("This         is   what   the   main    method

    received");

    System.out.println(parameters[0]);

    System.out.println(parameters[1]);

    System.out.println(parameters[2]);

  }

}

----------------------- Page 20-----------------------

Truyền đối sốtrong dòng lệnh

                      (Tiếp theo…)

----------------------- Page 21-----------------------

Các phần tửcơ bản củangôn ngữ

                                 Java

   •  Lớp        và     phương           thức       (Classes            &

      Methods)

   •  Kiểu dữliệu

   •  Biến số

   •  Toán tử

   •  Cấu trúc điều khiển

----------------------- Page 22-----------------------

                 Lớp trong Java

• Cú pháp khai báo lớp (Class)

    class Classname

    {

              var_datatype variablename;

              :

              met_datatype methodname(parameter_list)

              :

    }

----------------------- Page 23-----------------------

Lớp mẫu

----------------------- Page 24-----------------------

   Các lớp lồng nhau (Nested

                        Classes)

 Việc  định  nghĩa  một  lớp  bên  trong  một  lớp

khác được gọi là “xếp lồng” (Nesting)

 Các kiểu xếp lồng:

     Tĩnh (Static)

      Động (Non-static)

----------------------- Page 25-----------------------

                        Kiểu dữliệu

 Kiểu dữliệu cơ sở(Primitive Data Types)

 Kiểu dữliệu tham chiếu (Reference data types)

----------------------- Page 26-----------------------

              Kiểu dữliệu cơ sở

•    byte

•    char

•    boolean

•    short

•    int

•    long

•    float

•    double

----------------------- Page 27-----------------------

          Kiểu dữliệu tham chiếu

•  Mảng (Array)

•  Lớp (Class)

•  Interface

----------------------- Page 28-----------------------

     Ép kiểu (Type Casting)

•  Kiểu dữliệu này được chuyển đổi sang

    một kiểu dữliệu khác

•  Ví dụ

        float c = 34.89675f;

        int b = (int)c + 10;

----------------------- Page 29-----------------------

                              Biến số

•  Khai báo biến sốgồm 3 thành phần:

     – Kiểu dữliệu của biến số

     – Tên biến

     – Giá trịban đầu của biến (không bắt buộc)

•  Cú pháp

     datatype identifier [=value][,

       identifier[=value]...];

----------------------- Page 30-----------------------

Những từkhóa của Java

----------------------- Page 31-----------------------

                           Khai báo mảng

•  Ba cách đểkhai báo mảng:

      – datatype identifier [ ];

      – datatype identifier [ ] = new

          datatype[size];

      – datatype identifier [ ]=

          {value1,value2,….valueN};

----------------------- Page 32-----------------------

                    Phương thức

           (Methods in Classes)

•  Phương  thức  được  định  nghĩa  như là

    một hành động hoặc một tác vụthật sự

   của đối tượng

•  Cú pháp

     access_specifier modifier datatype

         method_name(parameter_list)

     {

    //body of method

     }

----------------------- Page 33-----------------------

Ví dụvềsửdụng phương thức

 class Temp {

    static int x = 10;                   // variable

    public static void show( ) {        // method

       System.out.println(x);

    }

    public static void main(String args[ ]) {

      Temp t = new Temp( );                  // object 1

       t.show( );                           // method call

      Temp t1 = new Temp( );               // object 2

       t1.x = 20;

       t1.show( );

   }

 }

----------------------- Page 34-----------------------

                         Access specifiers

•  public

•  private

•  protected

----------------------- Page 35-----------------------

                         Method Modifiers

•  static

•  abstract

•  final

•  native

•  synchronized

•  volatile

----------------------- Page 36-----------------------

Những phương thức được nạp chồng :

                 (Methods Overloading)

  •  Những phương thức được nạp chồng :

      –  Cùng ởtrong một lớp

      –  Có cùng tên

      –  Khác nhau vềdanh sách tham số

  •  Những phương thức được nạp chồng là

     một  hình  thức  đa  hình  (polymorphism)

     trong quá trình biên dịch (compile time)

----------------------- Page 37-----------------------

               Ghi đè phương thức

               (Methods Overriding)

•  Những phương thức được ghi đè:

     –  Có mặt trong lớp cha (superclass) cũng

        nhưlớp kếthừa (subclass)

     – Được định nghĩa lại trong lớp kếthừa

        (subclass)

•  Những phương thức được ghi đè là một

    hình thức đa hình (polymorphism) trong

   quá trình thực thi (Runtime)

----------------------- Page 38-----------------------

              Phương thức khởi tạo

                (Class Constructors)

•   Là một phương thức đặc biệt dùng đểkhởi

   tạo  giá  trịcho  các  biến  thành  viên  của  lớp

    đối tượng

•   Có cùng tên với tên lớp và không có giá trị

   trảvề

•  Được gọi khi đối tượng được tạo ra

•   Có 2 loại:

     – Tường minh (Explicit constructors)

     – Ngầm định (Implicit constructors)

----------------------- Page 39-----------------------

     Phương thức khởi tạo của lớp dẫn xuất

               (Derived class constructors)

•  Có cùng tên với lớp dẫn xuất (subclass)

•  Mệnh  đề gọi  constructor   của  lớp  cha

    (superclass)   phải  là  mệnh  đềđầu  tiên

   trong        constructor              của      lớp       dẫn       xuất

    (subclass)

----------------------- Page 40-----------------------

                          Các toán tử

•  Các loại toán tử:

     – Toán tửsốhọc (Arithmetic operators)

     – Toán tửdạng Bit (Bitwise operators)

     – Toán tửso sánh (Relational operators)

     – Toán tửlogic (Logical operators)

     – Toán tửđiều kiện (Conditional operator)

     – Toán tửgán (Assignment operator)

----------------------- Page 41-----------------------

                               Toán tửsốhọc

                       Arithmetic Operators

+               Addition (Phép cộng)

-               Subtraction (Phép trừ)

*               Multiplication (Phép nhân)

/               Division (Phép chia)

%               Modulus (Lấy sốdư)

++              Increment (Tăng dần)

--              Decrement (Giảm dần)

----------------------- Page 42-----------------------

+=                              Phép cộng và gán

-=                              Phép trừvà gán

*=                              Phép nhân và gán

/=                              Phép chia và gán

%=                              Phép lấy sốdưvà gán

----------------------- Page 43-----------------------

                          Toán tửBit

                 (Bitwise Operators)

~                           Phủđịnh (NOT)

&                           Và (AND)

|                           Hoặc (OR)

^                           Exclusive OR

>>                          Dịch sang phải (Shift right)

<<                          Dịch sang trái (Shift left)

----------------------- Page 44-----------------------

                      Toán tửso sánh

              (Relational Operators)

==                               So sánh bằng

!=                               So sánh khác

<                                Nhỏhơn

>                                Lớn hơn

<=                               Nhỏhơn hoặc bằng

>=                               Lớn hơn hoặc bằng

----------------------- Page 45-----------------------

                            Toán tửLogic

                    (Logical Operators )

&&                                 Logical AND

||                                 Logical OR

!                                  Logical unary NOT

----------------------- Page 46-----------------------

                        Toán tửđiều kiện

                   (Conditional Operator)

•  Cú pháp

    Biểu thức 1 ? Biểu thức 2 : Biểu thức 3;

•   Biểu thức 1

   Điều      kiện     kiểu     Boolean         trả về giá        trị True

    hoặc False

•   Biểu thức 2

   Trảvềgiá trịnếu kết quảcủa mệnh đề1 là

   True

•   Biểu thức 3

----------------------- Page 47-----------------------

                         Toán tửgán

             (Assignment Operator)

=     Assignment (Phép gán)

Giá trịcó thểđược gán cho nhiều biến số

•     Ví dụ

       a = b = c = d = 90;

----------------------- Page 48-----------------------

      Thứtựưu tiên của các toán tử

Thứtự                                    Toán tử

    1.           trong ngoặc tính trước

     2.          Các toán tửđơn như+,-,++,--

     3.          Các toán tửsốhọc và các toán tửdịch

                    như*,/,+,-,<<,>>

     4.          Các toán tửquan hệnhư>,<,>=,<=,= =,!=

     5.          Các toán tửlogic và Bit như&&,II,&,I,^

     5.          Các toán tửgán như=,*=,/=,+=,-=

 Thứtựcủa  các  toán  tửcó  thể được  thay  đổi  bằng

   cách sửdụng các dấu ngoặc đơn trong mệnh đề

----------------------- Page 49-----------------------

      Các kí tựđịnh dạng xuất dữliệu

                  (Escape Sequences)

Escape

                 Mô tả

Sequence

         Xuống dòng mới

      \r         Chuyển con trỏđến đầu dòng hiện hành

      \t         Chuyển con trỏđến vịtrí dừng Tab kếtiếp

                 (ký tựTab)

      \\         In dấu \

      \’         In dấu nháy đơn (’)

      \’’        In dấu nháy kép (’’)

----------------------- Page 50-----------------------

                 Các lệnh điều khiển

•   Điều khiển rẻnhánh:

     – Mệnh đềif-else

     – Mệnh đềswitch-case

•   Vòng lặp (Loops):

     – Vòng lặp while

     – Vòng lặp do-while

     – Vòng lặp for

----------------------- Page 51-----------------------

                              Lệnh if-else

•     Cú pháp

       if (condition)

       {

       action1 statements;

       }

       else

       {

       action2 statements;

       }

----------------------- Page 52-----------------------

            Lệnh switch-case

•  Cú pháp

    switch (expression)

    {

           case 'value1': action1 statement(s);

                                  break;

           case 'value2': action2 statement(s);

                                  break;

           :

           :

           case 'valueN': actionN statement(s);

                                   break;

----------------------- Page 53-----------------------

                       Lệnh lặp while

 Cú pháp

     while(condition)

     {

              action statements;

              :

              :

     }

----------------------- Page 54-----------------------

              Lệnh lặp do-while

• Cú pháp

     do

     {

                action statements;

                :

                :

     } while(condition);

----------------------- Page 55-----------------------

                  Vòng lặp for

•  Cú pháp

   for(initialization                statements;               condition;

   increment statements)

   {

         action statements;

         :

         :

    }

----------------------- Page 56-----------------------

----------------------- Page 57-----------------------

                  Chương 3

              Gói & Interface

(Packages & Interfaces)

----------------------- Page 58-----------------------

                      Giới thiệu

•   Những thành phần cơbản của 1 chương

trình Java:

     – Gói (Packages)

     – Giao diện (Interfaces)

•   Những phần của một chương trình Java:

     – Lệnh khai báo gói(package )

     – Lệnh chỉđịnh gói được dùng (Lệnh import)

     – Khai báo lớp public (một file java chỉchứa 1 lớp

        public class)

     – Các lớp khác (classes private to the package)

•   Tập tin nguồn Java có thểchứa tất cảhoặc

một vài trong sốcác phần trên.

----------------------- Page 59-----------------------

                      Interfaces

•  Chương trình Java chỉcó thểkếthừa từ

    1 lớp duy nhất trong cùng một thời

   điểm, nhưng có thểdẫn xuất cùng lúc

    nhiều Interfaces

•  Không được phép có những phương

   thức cụthể(concrete methods)

•  interface cần phải được hiện thực

    (implements).

----------------------- Page 60-----------------------

    Các bước tạo interface

•  Định nghĩa Interface

•  Biên dịch Interface

•  Hiện thực Interface

•  Tính chất của   interface:

     –  Tất cảphương thức trong interface phải là

        public.

     –  Các   phương  thức  phải  được  định  nghĩa

        trong lớp dẫn xuất giao diện đó.

----------------------- Page 61-----------------------

               Sửdụng                    Interface

•   Không  thểdẫn   xuất   từlớp   khác,  nhưng  có

   thểdẫn xuất  từnhững interface khác

•   Nếu  một   lớp   dẫn   xuất   từmột   interface   mà

    interface  đó  dẫn   xuất   từcác   interface   khác

   thì lớp đó phải định nghĩa tất cảcác phương

   thức có trong các interface đó

•   Khi định nghĩa một interface mới thì một kiểu

   dữliệu tham chiếu cũng được tạo ra.

----------------------- Page 62-----------------------

                    Gói (Packages)

•  Tương   tự nhưthưmục  lưu  trữnhững

    lớp, interface và các gói con khác. Đó

    là những thành viên của gói

----------------------- Page 63-----------------------

•  Những ưu điểm khi dùng gói (Package):

    –   Cho phép tổchức các lớp vào những đơn

       vịnhỏhơn

    –   Giúp tránh được tình trạng trùng lặp khi

        đặt tên.

    –   Cho phép bảo vệcác lớp đối tượng

    –   Tên gói (Package) có thểđược dùng để

        nhận dạng chức năng của các lớp.

----------------------- Page 64-----------------------

•  Những lưu ý khi tạo gói:

    – Mã nguồn phải bắt đầu bằng lệnh                 ‘package’

    – Mã nguồn phải nằm trong cùng thưmục mang tên

       của gói

    – Tên gói nên bắt đầu bằng ký tựthường (lower case)

       đểphân biệt giữa lớp đối tượng và gói

    – Những lệnh khác phải viết phía dưới dòng khai báo

       gói là mệnh đềimport, kếđến là các mệnh đềđịnh

       nghĩa lớp đối tượng

    – Những lớp đối tượng trong gói cần phải được biên

       dịch

    – Để chương  trình  Java   có  thểsửdụng  những  gói

       này, ta phải import gói vào trong mã nguồn

----------------------- Page 65-----------------------

•  Import gói (Importing packages):

     –  Xác định tập tin cần được import trong gói

     –  Hoặc có thểimport toàn bộgói

----------------------- Page 66-----------------------

              Các bước tạo ra gói

                          (Package)

•  Khai báo gói

•  Import những gói chuẩn cần thiết

•  Khai báo và định nghĩa các lớp đối

   tượng có trong gói

•  Lưu các định nghĩa trên thành tập tin

    .java, và biên dịch những lớp đối tượng

   đã được định nghĩa trong gói.

----------------------- Page 67-----------------------

        Sửdụng những gói do người dùng định

                nghĩa (user-defined packages)

•  Mã nguồn của những chương trình này phải ở

   cùng      thư mục         của     gói    do     người     dùng      định

   nghĩa.

•  Để những           chương        trình    Java       khác    sử dụng

   những gói này, import gói vào trong mã nguồn

•  Import những lớp đối tượng cần dùng

•  Import toàn bộgói

•  Tạo tham chiếu đến những thành viên của gói

----------------------- Page 68-----------------------

           Xác lập CLASSPATH

•  Là  danh  sách  các  thưmục,   giúp  cho

   việc tìm kiếm các tập tin lớp đối tượng

   tương ứng

•  Nên        xác       lập     CLASSPATH                    trong       lúc

   thực thi (runtime), vì nhưvậy nó sẽxác

    lập  đường  dẫn  cho  quá  trình  thực  thi

    hiện hành

----------------------- Page 69-----------------------

   Gói và điều khiển truy xuất

(Packages & Access Control)

----------------------- Page 70-----------------------

                  Gói java.lang

•  Mặc định thì bất cứchương trình Java

    nào cũng import gói java.lang

•  Những lớp Wrapper (bao bọc) cho các

    kiểu dữliệu nguyên thủy:

----------------------- Page 71-----------------------

                          Lớp String

•  Phương thức khởi tạo (Constructor):

     –  String str1 = new String();

     –  String str2 = new String(“Hello World”);

     –  char ch[ ] = {“A”,”B”,”C”,”D”,”E”};

     –  String str3 = new String(ch);

     –  String str4 = new String(ch,0,2);

----------------------- Page 72-----------------------

                     String Pool

•  ‘String Pool’ đại diện cho tất cảcác ký

    tựđược tạo ra trong chương trình

•  Khái niệm ‘String Pool’

----------------------- Page 73-----------------------

 Những phương thức của lớp String

•   charAt( )

•   startsWith()

•   endsWith( )

•   copyValueOf( )

•   toCharArray( )

•   indexOf( )

•   toUpperCase( )

•   toLowerCase( )

•   trim( )

•   equals( )

----------------------- Page 74-----------------------

          Lớp StringBuffer

•   Cung cấp những phương thức khác nhau để

   thao tác trên đối tượng string (chuỗi ký tự)

•   Những đối tượng của lớp này khá linh hoạt

•   Cung       cấp      những        phương          thức      khởi      tạo

    (constructor)             đã         được           nạp         chồng

    (overloaded)

•   Những phương thức của lớp StringBuffer:

     – append( )

     – insert( )

     – charAt( )

     – setCharAt( )

     – setLength( )

     – getChars( )

----------------------- Page 75-----------------------

                Lớp java.lang.Math

•   abs()                                   •   random()

•   ceil()                                  •   sqrt()

•   floor()                                 •   sin()

•   max()                                   •   cos()

•   min()                                   •   tan()

•   round()

----------------------- Page 76-----------------------

                 Lớp Runtime

•  Đóng gói (Encapsulates) môi trường thực thi

•   Dùng đểquản lý bộnhớ, và thi hành những

   tiến trình cộng thêm

•   Phương thức:

     – exit(int)

     – freeMemory( )

     –  getRuntime( )

     –  gc( )

     – totalMemory( )

     – exec(String)

----------------------- Page 77-----------------------

                    Lớp System

•  Cung  cấp  những  hạ tầng  chuẩn  như nhập

   (Input),   xuất  (Output)   và  các  luồng  lỗi(Error

   Streams)

•  Cung       cấp     khả năng           truy     xuất     đến     những

   thuộc      tính    của     hệ thống          thực     thi   Java,       và

   những thuộc tính môi trường nhưphiên bản,

   đường dẫn, nhà cung cấp…

•  Phương thức:

    – exit(int)

    – gc()

    – getProperties()

    – setProperties()

    – currentTimeMillis()

----------------------- Page 78-----------------------

                    Lớp Class

•  Thể hiện             (Instance)   của  lớp  này  che

   giấu  tình  trạng  thực  thi  của  đối  tượng

   trong một ứng dụng Java

•  Đối tượng hoặc thểhiện của lớp này có

   thểtạo ra bằng 1 trong 3 cách sau:

     – Sửdụng phương thức getClass( ) của đối tượng

     – Sửdụng phương thức tĩnh forName( ) của lớp để

        tạo ra một thểhiện của lớp đó trong lúc đặt tên

        cho lớp

     – Sửdụng đối tượng ClassLoader đểnạp một lớp

        mới

----------------------- Page 79-----------------------

                     Lớp Object

•   Là lớp cha (superclass) của tất cảcác lớp

•   Phương thức:

     –  equals(Object)

     –  finalize()

     –  notify()

     –  notifyAll()

     –  toString()

     –  wait()

----------------------- Page 80-----------------------

                      Gói java.util

•  Cung cấp phần lớn những lớp Java

    hữu dụng và thường xuyên cần đến

    trong hầu hết các ứng dụng

•  Giới thiệu những lớp trừu tượng sau:

     –  Hashtable

     –  Random

     –  Vector

     –  StringTokenizer

----------------------- Page 81-----------------------

                    Lớp Hashtable

•  Mởrộng lớp trừu tượng Dictionary

•  Dùng đểnối kết những khóa vào những

   giá trịcụthể

•  Phương thức khởi tạo Hashtable:

       –  Hashtable(int)

       –  Hashtable(int, float)

       –  Hashtable( )

----------------------- Page 82-----------------------

     Những phương thức của lớp

                          Hashtable

•  clear()                                •   keys()

•  done()                                 •   put(Object, Object)

•  contains(Object)                       •   rehash()

•  containsKey(Obj                        •   remove(Object

   ect)                                       key)

•  elements()                             •  size()

•  get(Object key)                        •  toString()

•   isEmpty()

----------------------- Page 83-----------------------

                 Lớp Random

•   Tạo     ra   những       số ngẫu        nhiên     theo     thuật    toán

    pseudo

•   Những phương thức nhận giá trịngẫu nhiên:

     –  nextDouble( )

     –  nextFloat( )

     –  nextGaussian( )

     –  nextInt( )

     –  nextLong( )

•   Phương thức khởi tạo (Constructors):

     –  random()

     –  random(long)

----------------------- Page 84-----------------------

      Những phương thức của lớp

                               Random

•   nextDouble()

•   nextFloat()

•   nextGaussian()

•   nextInt()

•   nextLong()

•   setSeed(long)

----------------------- Page 85-----------------------

                        Lớp Vector

•   Cung  cấp  khả năng  co   giản  cho  mảng  khi

   thêm phần tửvào mảng

•   Lưu trữnhững thành phần của kiểu Object

•   Một     Vector       riêng    rẽ có       thể lưu        trữ những

    phần tửkhác nhau, đó là những instance của

    những lớp khác nhau

•   Phương thức khởi tạo (Constructors):

     – Vector(int)

     – Vector(int, int)

     – Vector()

----------------------- Page 86-----------------------

Những phương thức của lớp

                         Vector

•  addElement(Object)                     •  isEmpty( )

•  capacity( )                            •  lastElement( )

•  clone( )                               •  lastIndexOf(Object)

•  contains(Object)                       •  lastIndexOf(Object,

•  copyInto(Object [ ])

                                          •  removeAllElements(

•  elementAt(int)

•  elements( )

                                          •  removeElement(Obj

•  ensureCapacity(int)                       ect)

•  firstElement( )                        •  removeElementAt(in

•   indexOf(Object)                          t)

•   indexOf(Object, int)                  •  setElementAt(Object

•   insertElementAt(Objec                    , int)

----------------------- Page 87-----------------------

       Lớp StringTokenizer

•   Có thểđược dùng đểtách một chuỗi thành

    những         thành        phần       cấu       thành       của       nó

    (constituent tokens)

•   Ký  tựphân  cách  có  thểđược  chỉđịnh  khi

    một  đối  tượng  StringTokenizer  được  khởi

   tạo

•   Phương thức khởi tạo (Constructors):

     –  StringTokenizer(String)

     –  StringTokenizer(String, String)

     –  StringTokenizer(String, String, Boolean)

•   Lớp StringTokenizer sửdụng giao diện liệt

----------------------- Page 88-----------------------

Những phương thức của lớp

                StringTokenizer

•   countTokens( )

•   hasMoreElements( )

•   hasMoreTokens( )

•   nextElement( )

•   nextToken( )

•   nextToken(String)

----------------------- Page 89-----------------------

       Chương 4

Xửlý biệt lệ

----------------------- Page 90-----------------------

          Giới thiệu vềbiệt lệ

•   Là một kiểu lỗi đặc biệt

•   Nó xảy ra trong thời gian thực thi đoạn lệnh

•   Thông thường các điều kiện thực thi chương

   trình gây ra biệt lệ

•   Nếu các điều kiện này không được quan tâm,

   thì việc thực thi có thểkết thúc đột ngột

----------------------- Page 91-----------------------

Mục đích của việc xửlý biệt lệ

   • Giảm  thiểu  việc   kết   thúc   bất   thường   của   hệ

     thống và của chương trình.

   • Ví dụ, thao tác xuất/nhập trong một tập tin, nếu

     việc  chuyển đổi  kiểu  dữ liệu  không  thực  hiện

     đúng, một biệt lệsẽxảy ra và chương trình bị

     hủy mà không đóng tập tin. Lúc đó tập tin sẽ

     bịhưhại và các nguồn tài nguyên được cập

     phát cho tập tin không được thu hồi lại cho hệ

     thống.

----------------------- Page 92-----------------------

                    Xửlý biệt lệ

•   Khi một biệt lệxảy ra, đối tượng tương ứng với biệt lệ

    đó sẽđược tạo ra.

•  Đối tượng này sau đó được truyền tới phương thức

    nơi mà biệt lệxảy ra.

•  Đối tượng này chức các thông tin chi tiết vềbiệt lệ.

    Thông tin này có thểnhận được và xửlý.

•   Lớp   ’throwable’  mà  Java   cung  cấp  là  lớp  trên  nhất

    của lớp biệt lệ.

----------------------- Page 93-----------------------

         Mô hình xửlý biệt lệ

•   Mô hình được biết đến là mô hình ‘catch and

   throw’

•   Khi  một  lỗi  xảy  ra,   biệt   lệsẽđuợc   chặn   và

    được vào một khối.

•   Từkhóa đểxửlý biệt lệ:

     –  try

     –  catch

     –  throw

     –  throws

     –  finally

----------------------- Page 94-----------------------

Cấu trúc của mô hình xửlý biệt lệ

  •  Cú pháp

       try { ….  }

       catch(Exception e1) { …. }

       catch(Exception e2) { …. }

       catch(Exception eN) { …. }

       finally { …. }

----------------------- Page 95-----------------------

 Mô hình ‘Catch and Throw’                                 nâng cao

•  Người lập trình chỉquan tâm tới các lỗi

    khi cần thiết.

•  Một thông báo lỗi có thểđược cung cấp

   trong exception-handler.

----------------------- Page 96-----------------------

             Khối ‘try’ và ‘catch’

•  Được  sử dụng  đểthực   hiện   trong   mô   hình

    ‘catch and throw’ của xửlý biệt lệ.

•   Khối lệnh ‘try’ gồm tập hợp các lệnh thực thi

•   Một phương thức mà có thểbắt biệt lệ, cũng

    bao gồm khối lệnh ‘try’.

•   Một  hoặc  nhiều  khối  lệnh  ‘catch’  có  thểtiếp

   theo sau một khối lệnh ‘try’

•   Khối  lệnh  ‘catch’  này  bắt  biệt   lệtrong   khối

    lệnh ‘try’.

----------------------- Page 97-----------------------

Khối lệnh ‘try’ và ‘catch’ Blocks

 •  Đểbắt bất kỳloại biệt lệnào, ta phải chỉra kiểu

    biệt lệlà ‘Exception’

    catch(Exception e)

 •  Khi  biệt   lệ bị bắt  không  biết  thuộc  kiểu  nào,

    chúng ta có thểsửdụng lớp ‘Exception’ đểbắt

    biệt lệđó.

 •  Lỗi  sẽ được  truyền  thông  qua   khối  lệnh  ‘try

    catch’  cho  tới  khi  chúng  bắt  gặp  một  ‘catch’

    tham chiếu tới nó, hoặc chương trình sẽbịkết

    thúc

----------------------- Page 98-----------------------

Khối lệnh chứa nhiều Catch

•  Các  khối  chứa  nhiều  ‘catch()’  xử lý  các

    kiểu biệt lệkhác nhau một cách độc lập.

•  Ví dụ

      try

      {   doFileProcessing();

         displayResults();               }

      catch(LookupException e)

      {   handleLookupException(e);                       }

      catch(Exception e)

      {

      System.err.println(“Error:”+e.printStackTrace

----------------------- Page 99-----------------------

 Khối lệnh chứa nhiều Catch (tt)

•   Khi sửdụng các ‘try’ lồng nhau, khối ‘try’ bên

   trong được thi hành đầu tiên

•   Bất kỳbiệt lệnào bịchặn trong khối lệnh ‘try’

   sẽbịbắt giữtrong khối lệnh ‘catch’ tiếp ngay

   sau.

•   Nếu khối lệnh  ‘catch’ thích  hợp  không được

   tìm thấy, thì các khối ‘catch’ của khối ‘try’ bên

    ngoài sẽđược xem xét

•   Ngược lại, Java Runtime Environment sẽxử

    lý biệt lệ.

----------------------- Page 100-----------------------

                   Khối ‘finally’

•   Thực hiện tất cảcác việc thu dọn khi biệt lệ

   xảy ra

•   Có thểsửdụng kết hợp với khối ‘try’

•   Chứa các câu lệnh thu hồi tài nguyên vềcho

    hệthống hay lệnh in ra các câu thông báo:

     –  Đóng tập tin

     –  Đóng lại bộkết quả(được sửdụng trong chương

        trình cơsởdữliệu)

     –  Đóng lại các kết nối được tạo trong cơsởdữliệu.

----------------------- Page 101-----------------------

                Khối ‘finally’ (tt)

•   Ví dụ

     try

     {

        doSomethingThatMightThrowAnException( );

     }

     finally

     {

        cleanup( );

     }

----------------------- Page 102-----------------------

              Khối ‘finally’ (tt)

•   Là tùy chọn không bắt buộc

•  Được đặt sau khối ‘catch’

•   Khối ‘finally’ bảo đảm lúc nào cũng được thực

    hiện bất chấp biệt lệcó xảy ra hay không.

----------------------- Page 103-----------------------

Các biệt lệđược định nghĩa với

          lệnh ‘throw’ và ‘throws’

     •   Các biệt lệthì được chặn với sựtrợgiúp của từ

         khóa ‘throw’

     •   Từkhóa ‘throw’ chỉra một biệt lệvừa xảy ra.

     •   Toán hạng của throw là một đối tượng của một

         lớp, mà lớp này được dẫn xuất từlớp ‘Throwable’

     •   Ví dụcủa lệnh ‘throw’

          try{

               if  (flag < 0)

               {

                  throw       new    MyException(          )   ;   //   user-

            defined

              }

----------------------- Page 104-----------------------

   Các biệt lệđược định nghĩa vớ

          lệnh ‘throw’ và ‘throws’(tt)

•  Một phương thức đơn có thểchặn nhiều hơn một

    biệt lệ

•  Ví dụtừkhóa ‘throw’ xửlý nhiều biệt lệ

     public class Example {

       public void exceptionExample( ) throws

     ExException,            LookupException  {

           try

           {   // statements          }

           catch(ExException exmp)

           { …. }

           catch(LookupException lkpex)

           { …. }               }       }

----------------------- Page 105-----------------------

  Các biệt lệđược định nghĩa với

         lệnh ‘throw’ và ‘throws’(tt)

•  Lớp        ‘Exception’             thực       thi     giao        diện

   ‘Throwable’  và  cung   cấp   các   tính   năng

   hữu dụng đểphân phối cho các biệt lệ.

•  Một  lớp  con   của  lớp  Exception   là  một

   biệt lệmới có thểbắt giữđộc lập các loại

   Throwable khác.

----------------------- Page 106-----------------------

        Danh sách các biệt lệ

•    RuntimeException

•    ArithmeticException

•    IllegalAccessException

•    IllegalArgumentException

•    ArrayIndexOutOfBoundsException

•    NullPointerException

•    SecurityException

•    ClassNotFoundException

----------------------- Page 107-----------------------

   Danh sách các biệt lệ(tt)

•  NumberFormatException

•  AWTException

•  IOException

•  FileNotFoundException

•  EOFException

•  NoSuchMethodException

•  InterruptedException

----------------------- Page 108-----------------------

                        Chương V

LẬP TRÌNH GIAO DIỆN VỚI AWT

----------------------- Page 109-----------------------

GIỚI THIỆU VỀAWT

•   AWT       viết      tắt   của     Abstract            Windowing

    Toolkit

•   AWT       là   tập      hợp      các     lớp   Java       cho      phép

    chúng ta tạo một GUI

•   Cung   cấp   các   mục   khác   nhau  đểtạo   hoạt

    động và hiệu ứng GUI như

     –Containers

     –Components

     –Layout managers

     –Graphics và drawing capabilities

     –Fonts

     –Events

----------------------- Page 110-----------------------

•   AWT bao gồm các lớp, interfaces và các gói

    khác

----------------------- Page 111-----------------------

                      Components

•   Tất cảcác thành phần cấu tạo nên chương

   trình GUI được gọi là component.

•  Ví dụ

     – Containers,

     – textfields, labels, checkboxes, textareas

     – scrollbars, scrollpanes, dialog

----------------------- Page 112-----------------------

                        Containers

•  Là      thành         phần        mà     có     thể chứa             các

   thành phần khác. có thểvẽvà tô màu.

•  Có các frames, panes,latches, hooks

•  Java.awt              chứa         một       lớp       có     tên        là

    Container.  Lớp   này   dẫn   xuất   trực   tiếp

   và không trực tiếp theo 2 cách là:

     –  Frames

     –  Panels

----------------------- Page 113-----------------------

                           Frames

•   Là các cửa sổ

•   Là lớp con của Windows

•  Được hiển thịtrong một cửa sổvà có đường

   viền

----------------------- Page 114-----------------------

                            Panels

•   Là các vùng chứa trong một cửa sổ.

•   Hiển   thị trong   một   cửa   sổ mà  trình   duyệt

    hoặc       appletviewer           cung      cấp      và   không        có

    đường viền.

•  Được   sửdụng  đểnhóm   một   sốcác   thành

    phần

•   Một panel không có sẳn vì thếchúng ta cần

    phải thêm nó vào frame.

•   Hàm dựng

      –   Panel()

----------------------- Page 115-----------------------

                                Dialog

•   Là một lớp con của lớp Window

•   Đối tượng dialog được cấu trúc như sau  :

 Frame myframe = new Frame(“My frame”);

 String title = “Title”;

 boolean modal = true;

 Dialog dlg = new Dialog( myframe, title, modal);

----------------------- Page 116-----------------------

          Các Components khác

•   Ví dụ

     –  textfields, labels, checkboxes, textareas

     –  scrollbars, scrollpanes, dialog

----------------------- Page 117-----------------------

                                  Label

•   Được dùng đểhiển thịchuỗi (String)

•   Các hàm dựng:

      –   Label( )

      –   Label(String labeltext)

      –   Label(String labeltext, int alignment)

•   Các phương thức:

      – setFont(Font f)

      –  setText(String s)

      –   getText( )

----------------------- Page 118-----------------------

                     TextField

•  Là điều khiển text cho phép hiển thịtext hoặc

   cho user nhập dữliệu vào.

•  Các hàm dựng:

    –  TextField( )

    –  TextField(int columns)

    –  TextField(String s)

    –  TextField(String s, int columns)

•  Các phương thức:

    – setEchoChar(char)

    –  setTest(String s)

    –   getText( )

    –  setEditable(boolean)

    –   isEditable( )

----------------------- Page 119-----------------------

                      TextArea

•  Được dùng khi text có nội dung từhai

    dòng trởlên

•  Là      điều      khiển        text      có    thể soạn            thảo

    được với nhiều dòng

•  Các bước đểtạo TextArea:

     –  Tạo một phần tử(element)

     –  Chỉra sốdòng hay sốcột (tùy chọn)

     –  Chỉra vịtrí của điều khiển trên màn hình

----------------------- Page 120-----------------------

               TextArea (tt…)

•  Các hàm dựng:

     –  TextArea( )

     –  TextArea(int rows, int cols )

     –  TextArea(String text)

     –  TextArea(String text, int rows, int cols)

----------------------- Page 121-----------------------

       Các phương thức của

                            TextArea

•   setText(String)

•   getText( )

•   setEditable(boolean)

•    isEditable( )

•    insertText(String, int)

•    replaceText(String, int, int)

----------------------- Page 122-----------------------

                          Button

•   Các nút Push hay Command là cách dễnhất

   đểlấy các sưkiện của user

•   Các bước đểtạo button:

     –  Tạo    một    phần     tử button,       nên   tạo   cho     nó   một

        caption đểchỉra mục đích của nó

     –  Chỉra vịtrí đặt button trên màn hình

     –  HIển thịra trên màn hình

•   Các hàm dựng:

     –  Button( )

     –  Button(String text)

----------------------- Page 123-----------------------

                Checkboxes and

                    RadioButtons

• Checkboxes được dùng khi cho phép user nhiều cọn

  chọn lựa

• Radiobuttons được dùng đểuser chỉra một lựa chọn

  duy nhất

• Các bước đểtạo checkbox hoặc radiobutton:

     –  Tạo một phần tử(element)

     –  Khởi tạo giá trịban đầu (có giá trịselected hay unselected)

     –  Chỉra vịtrí trên màn hình

     –  Hiển thịra màn hình

• Các hàm dựng đểtạo checkbox:

     –  Checkbox( )

     –  Checkbox(String text)

• Để tạo          radiobutton,         ta    phải     tạo     đối     tượng

  CheckBoxGroup trước khi tạo button

----------------------- Page 124-----------------------

                  Choice Lists

•  Lớp ‘Choice’ cho phép ta tạo danh sách có nhiều

   chọn lựa

•  Khi list được tạo lần đầu tiên, nó được khởi tạo là

   empty

•  Các bước đểtạo danh sách chọn lựa:

    – Tạo một phần tử

    – Thêm các mục (có kiểu Strings) vào danh sách đó,

       từng mục một

    – Chỉra vịtrí trên màn hình

    – Hiển thịra màn hình

•  Ví dụ

         Choice colors=new Choice( );

         colors.addItem(“Red”);

         colors.addItem(“Green”);

----------------------- Page 125-----------------------

          Trình quản lý bốtrí

              Layout Manager

•  Các loại layout khác nhau:

     –  Flow Layout

     –  Border Layout

     –  Card Layout

     –  Grid Layout

     –  GridBag Layout

•  Trình quản lý layout được thiết lập bằng

   cách gọi phương thức ‘setLayout( )’

----------------------- Page 126-----------------------

                    FlowLayout

•   Là  trình  quản  lý  layout   mặc  định   cho   các

   applet và các panel

•   Với  FlowLayout  các  thành  phần  sẽ được

   xắp xếp từgóc trái trên đến góc phải dưới

   của màn hình

•   Các constructor:

     FlowLayout mylayout = new FlowLayout();

     FlowLayout exLayout = new

      flowLayout(FlowLayout.RIGHT);

----------------------- Page 127-----------------------

               BorderLayout

•   Là trình quản lý layout mặc định cho Window,

    Frame và Dialog

•   Trình quản lý này có thểxắp xếp đến 5 thành

    phần trong container

•   Các thành phần có thểđược đặt vào 5 hướng

    NORTH, EAST, SOUTH, WEST và CENTER

    của container

•  Ví    dụ:  Để thêm   một   thành   phần   vào   vùng

    North của container

     Button b1= new Button(“North Button”);

     setLayout(new BorderLayout( ));

     add(b1, BorderLayout.NORTH);

----------------------- Page 128-----------------------

                   CardLayout

•     Có thểlưu trữmột danh sách các kiểu layout

      khác nhau

•     Mỗi layout được xem nhưmột thẻ(card)

•     Thẻthường là đối tượng Panel

•     Một thành phần độc lập nhưbutton sẽđiều

      khiển các thẻ được đặt ởphía trên nhất

•     Các bước đểtạo CardLayout:

     –   Bốtrí layout của panel chính là CardLayout

     –   Lần lượt thêm các panel khác vào panel chính

----------------------- Page 129-----------------------

                    GridLayout

•  Hỗtrợviệc chia container thành một lưới

•  Các       thành        phần  được            bố trí      trong       các

    dòng và cột

•  Một  ô   lưới  nên  chứa  ít  nhất  một  thành

    phần

•  Kiểu   layout   này được   sửdụng  khi  tất  cả

    các thành phần có cùng kích thước

•  Hàm constructor

     GridLayout   gl  =   new   GridLayout(no.   of   rows,

     no. of columns);

----------------------- Page 130-----------------------

               GridBagLayout

•  Bốtrí các thành phần một cách chính xác

•  Các thành phần không cần có cùng kích

    thước

•  Các thành phần được xắp xếp trong một

    lưới chứa các dòng và các cột

•  Thứ tự đặt  các  thành  phần  không  tuân

    theo      hướng          từ trái-sang-phải                và     trên-

   xuống-dưới

•  Hàm constructor

    GridBagLayout gb = new GridBagLayout( );

----------------------- Page 131-----------------------

                GridBagLayout

•  Để sử dụng  layout   này,   bạn  cần  phải

    biết thông tin vềkích cỡvà cách bốtrí

    của các thành phần

•  Lớp ‘GridBagLayoutConstraints’ lưu trữ

   tất cảcác thông tin mà lớp GridLayout

   yêu cầu: Vịtrí và kích thuớc mỗi thành

    phần

----------------------- Page 132-----------------------

             Xửlý các sựkiện

•   Các  sự kiện  (Events)  được  xử lý  bằng  các

   công cụsau:

     – Abstract Windowing Toolkit

     –  Trình duyệt.

     –  Các  trình  xử lý  sự kiện  do   các  lập  trình  viên  tạo

        riêng.

•   Các ứng dụng cần đăng ký trình xửlý sựkiện

   với đối đối tượng

•   Các  trình  xử lý  này  được  gọi  khi  có  một  sự

    kiện tương ứng xảy ra

----------------------- Page 133-----------------------

    Xửlý các sựkiện                                  (tt…)

•   Event Listener sẽlắng nghe một sựkiện cụ

    thểmà một đối tượng tạo ra

•   Mỗi     event       listener       cung     cấp     các      phương

    thức đểxửlý các sựkiện này

•   Lớp có cài đặt listener cần định nghĩa những

    phương thức này

----------------------- Page 134-----------------------

      Xửlý            các sựkiện(tt…)

•   Các bước cần tuân thủđểsửdụng mô hình

    Event Listener:

     –  Cài đặt Listener tương ứng

     –  Nhận  diện  được  tất  cảcác  thành  phần  tạo  ra  sự

        kiện

     –  Nhận diện được tất cảcác sựkiện được xửlý

     –  Cài đặt các phương thức của listener, và viết các

        đoạn mã đểxửlý sựkiện trong các phương thức

        đó

•   Interface  định   nghĩa   các   phương   thức   khác

    nhau đểxửlý mỗi sựkiện

----------------------- Page 135-----------------------

 Các sựkiện và Listener tương

                                   ứng

•  ActionEvent                       ActionListener

•  AdjustmentEvent                   AdjustmentListener

•  ComponentEvent                    ComponentListener

•  FocusEvent                        FocusListener

•  ItemEvent                         ItemListener

•  WindowEvent                       WindowListener

•  TextEvent                         TextListener

•  MouseEvent                        MouseListener

                                     MouseMotionListener

•  KeyEvent                          KeyListener

----------------------- Page 136-----------------------

                          Menus

•  Các loại menu :

      –   Pull-down

      –   Pop-up menu

•  Chỉcó thểđặt các thanh menubar vào

   trong các Frame mà thôi

•  Các thành phần của menu:

      –   Menubar

      –   MenuItems

----------------------- Page 137-----------------------

Chương VI

            Applets

----------------------- Page 138-----------------------

                    Applets

•  Là một chương trình Java mà chạy với

   sựhổtrợcủa trình duyệt web

•  Tất  cả các  applets   là  lớp   con   của   lớp

    ‘Applet’

•  Đểtạo  một  applet,   bạn  cần  import   hai

   gói sau:

     – java.applet

     – java.awt

----------------------- Page 139-----------------------

               Cấu trúc applet

•  Định nghĩa một applet từbốn sựkiện xảy ra

   trong quá trình thực thi

•  Đối với mỗi sựkiện được định nghĩa bởi một

    phương thức tương ứng.

•   Các phương thức:

     –  init( )

     –  start( )

     –  stop( )

     –  destroy( )

----------------------- Page 140-----------------------

•   Các phương thức khác:

     –  paint( )

     –  repaint( )

     –  showStatus( )

     –  getAppletInfo( )

•   Các       phương           thức      init(),      start(),       stop(),

    destroy(), and paint() được thừa kếtừapplet.

•   Mỗi phương thức này mặc định là rỗng. Vì thế

    các phương thức này phải được nạp chồng.

----------------------- Page 141-----------------------

Biên dịch và thực thi applet

•   Một  applet   thì  được  biên  dịch  theo   cú  pháp

    sau

        javac Applet1.java

•   Đểthực thi một applet, tạo một tập tin HTML

    có sửdụng thẻapplet

     –  Thẻapplet có hai thuộc tính:

           •  Width

           •  Height

     –  Đểtruyền tham sốtới applet, sửdụng thẻ‘param’,

        và tiếp theo là thẻ‘value’

•   Applet        có   thể được          thực      thi   bằng       applet

    viewer

----------------------- Page 142-----------------------

Điểm khác biệt giữa applet và một ứng dụng

      •  Các  ứng  dụng  khi   thực   thi   phải   sửdụng

         trình biên dịch Java, trong khi các applets

         thực thi được trên bất kỳtrình duyệt nào

         mà       hổ trợ Java,                 hoặc       sử dụng

         ‘AppletViewer’ trong JDK.

      •  Một  ứng   dụng  bắt  đầu  với  phương  thức

         ‘main()’.   Còn đối   với   applet   thì  không   sử

         dụng phương thức này

      •  Một           ứng           dụng            sử          dụng

         ‘System.out.println()’ đểhiển thị, trong khi

         môt     applet       thì  sử dụng         phương         thức

         ‘drawstring()’ đểhiển thị.

----------------------- Page 143-----------------------

Những hạn chếvềbảo mật

                   trong applet

•   Không  thểđọc hoặc viết các tập tin   trên  hệ

   thống tập tin của người sửdụng

•   Không thểgiao tiếp với một site trên internet.

    Mà  chỉgiao   tiếp   với   một   dịch   vụtrên   trang

   web có applet.

•   Không thểchạy bất kỳchương trình nào trên

    hệthống của người đọc

•   Không        thể load          bất  kỳ chương             trình     nào

    được lưu trên hệthống của người sửdụng

----------------------- Page 144-----------------------

Chu trình sống của applet

----------------------- Page 145-----------------------

Truyền tham sốtới một applet

    •  Để truyền  tham  số,   sử dụng  PARAM

       trong thẻHTML

    •  Ví dụ

       <applet code = "Mybutton1" width = “100” height = “100”>

       <PARAM NAME = “Mybutton” value = “Display Dialog”>

       </applet>

----------------------- Page 146-----------------------

                    Lớp đồhọa

•  Được cung cấp bởi gói AWT

•   Cung cấp một tập hợp các phương thức để

   vẽnhưsau:

     – Oval

     – Rectangle

     – Square

     – Circle

     – Lines

     – Text in different fonts

----------------------- Page 147-----------------------

       Graphical Background

•  Các phương thức đểvẽnền :

      – getGraphics( )

      – repaint( )

      – update(Graphics g)

      – paint(Graphics g)

----------------------- Page 148-----------------------

  Hiển thịchuổi, ký tựvà bytes

•   Phương   thức  đểvẽhoặc  hiển  thị một  chuổi

   trên frame

     Cú pháp

     – drawString(String str, int  xCoor, int yCoor);

•   Phương  thức  đểvẽ hoặc  hiển  thịcác  ký  tự

   trên frame

     Cú pháp

     – drawChars(char   array[  ],  int  offset,  int  length,

       int  xCoor, int yCoor);

•   Phương  thức  đểvẽhoặc  hiển  thịbytes   trên

   frame

     Cú pháp

     – drawBytes(byte   array[   ],  int  offset,  int  length,

       int  xCoor, int yCoor);

----------------------- Page 149-----------------------

                     Vẽcác hình thể

•  Phương             thức       được         sử dụng             để vẽ

   đường thẳng nhưsau

      Cú pháp

      –  drawLine(int x1, int y1, int x2, int y2);

•  Các phương thức được sửdụng đểvẽ

   đường tròn nhưsau

      Cú pháp

      –  drawOval(int   xCoor,  int   yCoor,  int  width,

         int height);

      –  setColor(Color c);

      –  fillOval(int xCoor,  int yCoor, int width, int

         height);

----------------------- Page 150-----------------------

•  Phương thức sửdụng đểvẽhình vuông:

     Cú pháp

    – drawRect(int xCoor, int yCoor, int width, int

        height);

    – fillRect(int   xCoor,  int   yCoor,  int  width,  int

        height);

•  Các phương thức được sửdụng đểvẽ

    hình vuông có góc tròn

      Cú pháp

    – drawRoundRect(int                   xCoor,      int     yCoor,      int

       width,         int     height,        int       arcWidth,          int

        arcHeight);

    – fillRoundRect (int xCoor, int yCoor, int

       width, int height, int arcWidth, int

        arcHeight);

----------------------- Page 151-----------------------

      3D Rectangles & Arcs

• Các  phương  thức  được  sửdụng  đểvẽ

   hình 3D Cú pháp

     – draw3DRect(int               xCoord,        int     yCoord,        int

       width, int height, boolean raised);

     – drawArc(int   xCoord,  int   yCoord,  int  width,

       int height, int arcwidth, int archeight);

     – fillArc(int xCoord, int yCoord, int width, int

       height, int arcwidth, int archeight);

----------------------- Page 152-----------------------

          Drawing PolyLines

•  Các phương thức được sửdụng đểvẽ

    nhiều được thẳng

     Cú pháp

     –  drawPolyline(int xArray[ ], int yArray[ ], int

        totalPoints);

     –  g.setFont(new Font("Times Roman",

        Font.BOLD,15));

----------------------- Page 153-----------------------

  Vẽvà tô các hình đa giác

•  Các phương thức đểvẽvà tô các hình đa

   giác

    Cú pháp

    –   drawPolygon(int x[ ], int y[ ], int

        numPoints);

    –   fillPolygon(int x[ ], int y[ ], int numPoints);

----------------------- Page 154-----------------------

                                      Màu

 •  Java sửdụng màu RGB

 •  Bảng các giá trịmàu

            Element                      Range

              Red                                0-255

              Green                              0-255

              Blue                               0-255

 Cú pháp của hàm dựng đểtạo một màu

       color(int red, int green, int blue);

----------------------- Page 155-----------------------

•    Bảng             trình          bày         các          giá        trị

     thường

         Color                    Red             Green             Blue

         White                        255             255               255

         Light Gray                   192             192               192

         Gray                         128             128               128

         Dark Gray                64              64                64

         Black                    0               0                  0

         Pink                         255             175               175

         Orange                       255             200            0

         Yellow                       255             255            0

         Magenta                      255         0                     255

----------------------- Page 156-----------------------

                             Font

•  Gói java.awt package cung cấp bởi lớp

    ‘Font’

•  Các phương thức của lớp Font:

     –  getAllFont( )

     –  getLocalGraphicsEnvironment( )

     –  getFont( )

     –  getFontList( )

----------------------- Page 157-----------------------

•  Hàm dựng Font nhận 3 tham số

     –  Tên  font   trong  chuổi  định  dạng;   tên  này

        có trong phương thức getFontList( ).

     –  Kiểu      của     font.      Ví  dụ như:           Font.BOLD,

        Font.PLAIN, Font.ITALIC

     –  Kích thước của font.

•  Ví dụ

     Font f1 = new Font("SansSerif", Font.ITALIC, 16);

     g.setFont(f1);

----------------------- Page 158-----------------------

              Lớp FontMetrics

•  Đo lường các ký tựkhác nhau hiển thịtrong

   các font khác nhau.

•   Việc    đo    lường       bao     gồm      ‘height’,       ‘baseline’,

    ‘ascent’, ‘descent’ và ‘leading’ của font.

•   Nó không cụthểvì nó là một lớp trừu tượng

----------------------- Page 159-----------------------

   Lớp FontMetrics (tiếp theo…)

•   Phương thức:

     –  getFontMetrics(f1)

     –  getHeight( )

     –  getAscent( )

     –  getDescent( )

     –  getLeading( )

     –  getName( )

----------------------- Page 160-----------------------

                          Kiểu vẽ

•  Các đối tượng đểvẽđược sửdụng.

•  Method            used        to     make         old     and       new

   contents visible on the screen

     setXORMode(Color c)

•  Method   used   to   revert   to   the   overwrite

    mode

     setPaintMode( )

----------------------- Page 161-----------------------

                Chương VII

Lập trình đa tuyến

----------------------- Page 162-----------------------

                          Tuyến

•  Lập trình đa tuyến là một đặc trưng của

   Java

•  Tuyến là đơn vịnhỏnhất của đoạn mã

    có thểthi hành được mà thực hiện một

    công việc riêng biệt

----------------------- Page 163-----------------------

                            Đa tuyến

•  Là khả năng làm việc với nhiều tuyến

•  Đa        tuyến       chuyên          sử dụng             cho       việc

   thực thi nhiều công việc đồngthời

•  Đa        tuyến        giảm       thời      gian       rỗi    của       hệ

   thống đến mức thấp nhất.

----------------------- Page 164-----------------------

           Tạo và quản lý tuyến (1)

•  Khi       chương            trình      Java       thực       thi    hàm

    main() tức là tuyến main được thực thi.

   Tuyến           này     được         tạo     ra    một       cách       tự

    động. tại đây :

       - Các tuyến con sẽđược tạo ra từđó

       - Nó là tuyến cuối   cùng   kết   thúc   việc   thực

        hiện.     Trong        chốc     lát   tuyến      chính       ngừng

        thực thi, chương trình bịchấm dứt

•  Tuyến có thểđược tạo ra bằng 2 cách:

     –  Dẫn xuất từlớp Thread

     –  Dẫn xuất từRunnable.

----------------------- Page 165-----------------------

Vòng đời của một tuyến

----------------------- Page 166-----------------------

Trạng thái của tuyến và các

 phương thức của lớp tuyến

 •   trạng thái:                            •   Phương thức:

      –   born                                   –   start( )

      –   ready to run

                                                 –   sleep( )

      –   running

                                                 –   wait( )

      –   sleeping

      –   waiting                                –   notify( )

      –   ready                                  –   run( )

      –   blocked                                –   stop( )

      –   dead

----------------------- Page 167-----------------------

            Các phương thức Khác

•   enumerate(Thread t)

•   getName( )

•   isAlive( )

•   getPriority( )

•   setName(String name)

•  join( )

•   isDaemon( )

•   setDaemon(Boolean on)

•   resume( )

•   sleep( )

•   start( )

----------------------- Page 168-----------------------

Phân chia thời gian giữa các tuyến

  •  CPU chỉthực thi chỉmột tuyến tại một

     thời điểm nhất định.

  •  Các tuyến có độưu tiên bằng nhau thì

     được phân chia thởi gian sửdụng bộvi

     xửlý.

----------------------- Page 169-----------------------

       tuyến Daemon(ngầm)

•  Hai  kiểu  tuyến  trong  một  chương  trình

   Java:

    – Các tuyến người sửdụng

    –  tuyến ngầm

•  tuyến ngầm dọn rác

----------------------- Page 170-----------------------

        Đa tuyến với Applets

•   Các      chương          trình     Java      dựa       trên    Applet

   thường sửdụng nhiều hơn một tuyến

•   Trong          đa       tuyến          với       Applets,            Lớp

    ‘java.applet.Applet’             là   lớp    con     được       tạo    ra

    một Applet người sửdụng đã định nghĩa

•   nó không thểthực hiện được trực tiếp lớp con

    của lớp tuyến trong các applet

•   Con đường đểlớp con sửdụng lớp tuyến:

     –  Sửdụng một đối tượng của tuyến người sửdụng

        định nghĩa, mà, lần lượt, dẫn xuất lớp tuyến

     –  Thực thi chạy giao tiếp (interface)

----------------------- Page 171-----------------------

           Sựđồng bộtuyến

•  Thâm nhập các tài nguyên/dữliệu bởi

    nhiều tuyến

•  Sựđồng bộ(Synchronization)

•  Sựquan sát (Monitor)

•  Mutex

----------------------- Page 172-----------------------

                          Mã đồng bộ

•  Đểthâm nhập sựquan sát của một đối

   tượng,   lập  trình  viên  sửdụng  từ khóa

    ‘synchronized’ đểgọi một phương thức

    hiệu chỉnh (modified method)

•  Khi một tuyến đang được thực thi trong

    phạm         vi    một       phương            thức      đồng         bộ

    (synchronized), bất kỳtuyến khác hoặc

    phương thức đồng bộkhác mà cốgắng

    gọi nó trong thời gian đó sẽphải đợi

----------------------- Page 173-----------------------

  Khuyết điểm của các phương

                       thức đồng bộ

•  Các trạng thái chắc   chắn   không   lợi   ích

    cho đa tuyến

•  Trình         biên       dịch      Java        từ Sun          không

    chứa nhiều phương thức đồng bộ

•  Các phương thức đồng bộchậm hơn từ

    ba đến bốn lần so với các phương thức

   tương ứng không đồng bộ.

----------------------- Page 174-----------------------

Kỹthuật “wait-notify” (đợi –

                thông báo) (1)

•  tuyến   chia   các   tác   vụ thành   các  đơn   vị

    riêng biệt và logic (hợp lý)

•  Đểtránh trường hợp kiểm soát vòng, Java

    bao gồm một thiết kếtốt trong tiến trình kỹ

    thuật   truyền   thông   sử dụng   các   phương

    thức “wait()” (đợi), “notify()” (thông báo) và

    “notifyAll()” (thông báo hết) :

     –  wait( )

     –  notify( )

     –  notifyAll( )

----------------------- Page 175-----------------------

      Kỹthuật “wait-notify” (đợi –

                      thông báo) (1)

•  Các   chức   năng   của   các   phương   thức

    “wait()”, “notify()”, và “notifyAll()” là :

      –   wait( )

      –   notify( )

      –   notifyAll( )

•  tuyến ưu tiên cao nhất chạy đầu tiên

•  Cú pháp của các phương thức:

      –   final void wait( ) throws IOException

      –   final void notify( )

      –   final void notifyAll( )

----------------------- Page 176-----------------------

Một sốđiểm cần nhớtrong khi

sửdụng phương thức wait():

•  tuyến đang gọi đưa vào CPU

•  tuyến đang gọi đưa vào khóa

•  tuyến        đang         gọi    đi    vào       vùng      đợi      của

----------------------- Page 177-----------------------

Các          điểm           chính           cần         nhớ về

phương thức notify()

   •  Một   tuyến  đưa   ra   ngoài   vùng  đợi   của  monitor,  và  vào

      trạng thái sẵn sàng

   •  tuyến   mà đã  được   thông   báo   phải   thu   trởlại   khóa   của

      monitor trước khi nó có thểbắt đầu

   •  Phương thức notify() là không chính xác

   •  Trong   một   số trường   hợp   này,  các   phương   thức   của

      monitor đưa ra 2 sựđềphòng:

       –  Trạng   thái   của  monitor  sẽ được   kiểm   tra   trong   một   vòng   lặp

          “while” tốt hơn là câu lệnh if

       –  Sau khi thay đổi trạng thái của monitor, phương thức notifyAll()

          sẽđược sửdụng, tốt hơn phương thức notify().

----------------------- Page 178-----------------------

Sựbếtắt (Deadlocks)

•   Một “deadlock” (sựbếtắt) xảy ra khi hai tuyến

   có một phụthuộc vòng quanh trên một cặp đối

   tượng đồng bộ

•   Nó khó đểgỡlỗi một bếtắt bởi những nguyên

    nhân sau:

     –  Nó hiểm khi xảy ra, khi hai tuyến chia nhỏ

        thời gian trong cùng một con đường

     –  Nó có thểbao hàm nhiều hơn hai tuyến và

        hai đối tượng đồng bộ

•    Nếu      một     chương         trình    đa     tuyến      khóa      kín

   thường   xuyên,  ngay   lập   tức   kiểm   tra   lại  điều

----------------------- Page 179-----------------------

Thu              dọn             “rác”             (Garbage

collection)

    •  Cải tạo hoặc làm trống bộnhớđã định vị

       cho các đối tượng mà các đối tượng này

       không sửdụng trong thời gian dài

    •  Sự dọn   rác   thực   thi   như là  một   tuyến

       riêng biệt có quyền ưu tiên thấp

    •  Sửdụng   câu   lệnh   sau  đểtắt  đi   sựdọn

       rác trong ứng dụng:

        java –noasyncgc…

----------------------- Page 180-----------------------

Phương                   thức        finalize()               (hoàn

thành)

   •  Java  cung   cấp   một  con  đường  để làm   sạch

       một tiến trình trước khi điều khiển trởlại hệđiều

       hành

   •  Phương thức finalize(), nếu hiện diện, sẽđược

      thực thi trên mỗi đối   tượng,   trước   khi   sựdọn

       rác

   •  Câu lệnh của phương thức finalize() như sau

       :

       –  protected void finalize( ) throws Throwable

   •  Tham chiếu không phải là sựdọn rác; chỉcác

      đối tượng mới được dọn rác

----------------------- Page 181-----------------------

Chương VIII

                Các luồng I/O

----------------------- Page 182-----------------------

Các luồng

•   Các   luồng   là  những đường ống   dẫn đểgửi

   và     nhận       thông      tin   trong      các     chương         trình

   java.

•   Khi một luồng đọc hoặc ghi , các luồng khác bị

    khoá.

•   Nếu   lỗi   xẩy   ra   trong   khi  đọc   hoặc   ghi   luồng,

    một ngoại lệsẽkích hoạt.

•   Lớp ‘java.lang.System’ định nghĩa luồng nhập

   và xuất chuẩn.

----------------------- Page 183-----------------------

Các lớp luồng I/O

•  Lớp System.out.

•  Lớp System.in.

•  Lớp System.err.

----------------------- Page 184-----------------------

               Lớp InputStream

•   Là lớp trừu tượng

•  Định nghĩa cách nhận dữliêu

•   Cung   cấp   số phương   thức   dùng  đểđọc   và

    các luồng dữliệu làm đầu vào.

•   Các phương thức:

     –  read( )

     –  available( )

     –  close ( )

     –  mark ( )

     –  markSupported( )

     –  reset( )

     –  skip( )

----------------------- Page 185-----------------------

Lớp OutputStream

 •   Là lớp trừu tượng.

 •   Định nghĩa cách ghi dữliệu vào luồng.

 •   Cung        cấp     tập    các     phương         thức     trợ giúp.

     trong việc tạo, ghi và xửlý các luồng xuất.

 •   Các phương thức:

      –   write(int)

      –   write(byte[ ])

      –   write(byte[ ], int, int)

      –   flush( )

      –   close( )

----------------------- Page 186-----------------------

      Nhập mảng các Byte

•  Sửdụng các đệm bộnhớ

•  Lớp ByteArrayInputStream

•  Tạo   ra   một   luồng   nhập   từđệm   bộnhớ

    không gì cảvềmảng các byte.

     –  Không hỗtrợcác phương thức mới

     –  Các        phương          thức     nộp      chồng        của     lớp

        InputStream,             giống      như ‘read()’,          ‘skip()’,

        ‘available()’ và ‘reset()’.

----------------------- Page 187-----------------------

                 Byte Array Output

•  sửdụng các vùng đệm bộnhớ

•  Lớp ByteArrayOutputStream

     – Tạo ra một luồng kết xuất trên mảng byte

     – Cung cấp các khả năng bổsung cho mảng

        kết xuất tăng trưởng nhằm chừa chổcho dữ

        liệu mới ghi vào.

     – Cũng          cung       cấp     các      phương          thức     để

        chuyển  đổi   luồng   tới   mảng   byte,   hay  đối

        tượng String.

----------------------- Page 188-----------------------

•  Phương thức của lớp

     ByteArrayOutputStream :

      –    reset( )

      –    size( )

      –    writeTo( )

----------------------- Page 189-----------------------

    Các lớp nhập/xuất tập tin

•   Các lớp này trợgiúp trong Java đểhổtrợcác

   thao tác nhập và xuất:

     –  File

     –  FileDescriptor

     –  FileInputStream

     –  FileOutputStream

•   Các           lớp         File,         FileDescriptor,                và

    RandomAccessFile được sửdụng hỗtrợtrực

   tiếp hoặc truy cập nhập/xuất ngẫu nhiên.

----------------------- Page 190-----------------------

Lớp tập tin

     •  Được sửdụng truy cập các đối tượng tập tin

        và thw mục

     •  Những   tập   tin   có   tên được  đặt   tên   theo   qui

        ước của hệđiều hành chủ

     •  Lớp   này   cung   cấp   phương   thức   khởi   tạo  để

        tạo ra các thư mục và tập tin

     •  Tất   cảcác   thao   tác   thư mục   và  tập   tin  đều

        được sửdụng các phương thức truy cập và

        các phương thức thư mục mà các lớp tập tin

        cung cấp

----------------------- Page 191-----------------------

           Lớp FileDescriptor

•  Cung   cấp   việc   truy   cập   tới   các   tập   tin

    mô tả

•  Không cung cấp bất kỳtính rõ nét nào

   tới thông tin mà hệđiều hành duy trì.

•  Cung   cấp   chỉmột   phương   thức   gọi   là

    ‘valid( )’

----------------------- Page 192-----------------------

Lớp FileInputStream

•  Cho   phép  đầu   vào  đọc   từ một                            tập   tin

   trong một mẫu của một dòng

•  Các đối tượng được tạo ra sửdụng chuỗi

   tên         tập        tin,       tập       tin,      đối        tượng

    FileDescriptor như một tham số.

•  Các        phương            thức      nạp      chồng         của     lớp

    InputStream. nó cung cấp phương thức

    ‘finalize( )’ và ‘getFD( )’

----------------------- Page 193-----------------------

Lớp FileOutputStream

     •  Cho   phép   kết   xuất  đểghi   ra   một   luồng

        tập tin

     •  Các đối tượng cũng tạo ra sửdụng một

        chuỗi   tên   tập   tin,   tạp   tin,   hay đối   tượng

        FileDescriptor như một tham số.

     •  Lớp       này     nạp      chồng       các      phương          thức

        của       lớp      OutputStream               và     cung        cấp

        phương thức                 ‘finalize( )’ và ‘getFD( )’

----------------------- Page 194-----------------------

                 Nhập xuất lọc

•   Lọc:

     –  Là  kiểu   luồng   sửa  đổi   cách  điều   quản   một   luồng

        hiện có.

     –  về cơ bản được   sửdụng đểthích  ứng   các   luồng

        theo các nhu cầu của chương trình cụthể.

     –  Bộlọc nằm giữa luồng nhập và luồng xuất.

     –  Thực hiện   một sốtiến   trình đặt  biệt   trên   các   byte

        được chuyển giao từđầu vào đến kết xuất.

     –  Có thểphối hợp đểthực hiện một dãy các tuỳchọn

        lọc.

----------------------- Page 195-----------------------

Lớp FilterInputStream

 •  Là lớp trừu tượng.

 •  Là cha của tất cảcác lớp luồng nhập đã lọc.

 •  Cung cấp khả năng tạo ra một luồng từluồng

    khác.

 •  Một luồng có thểđọc và cung cấp cung cấp

    dưới dạng kết xuất cho luồng khác.

 •  duy       trì  một       dãy     các     đối     tượng        của     lớp

    ‘InputStream’

 •  Cho        phép       tạo    ra    nhiều       bộ lọc        kết    xích

    (chained filters

 •  ).

----------------------- Page 196-----------------------

     Lớp FilterOutputStream

•  Là           dạng              bổ  trợ  cho                           lớp

    ‘FilterInputStream’.

•  Là cha của tất cảcác lớp luồng kết xuất.

•  Duy             trì       đối          tượng             của          lớp

    ‘OutputStream’ như là một biến ‘out’.

•  Dữliệu ghi ra lớp này có thểsửa đổi để

   thực   hiện   các   thao   tác   lọc,   và   sau  đó

    phản hồi đến đối tượng ‘OutputStream’.

----------------------- Page 197-----------------------

Vùng đệm nhập/xuất

     •   Vùng đệm:

          –  Là kho lưu trữdữliệu.

          – Có thểcung cấp dữliệu thay vì quay trợlại nguồn

            dữliệu gốc ban đầu.

          – Java sửdụng   vùng đệm   nhập   và kết   xuất  đểtạm

            thời lập cache dữliệu được đọc hoặc ghi vào một

             luồng.

     •   Trong khi thực hiện vùng đệm nhập:

          – Số lượng byte lớn được đọc cùng thời điểm, và lưu

            trữtrong  một vùng đệm nhập.

          –  Khi   chương   trình đọc   luồng   nhập,   các   byte   nhập

            được đọc vào vùng đệm nhập.

----------------------- Page 198-----------------------

Vùng đệm nhập/xuất (tt…)

•   Trong       trường       hợp      vùng     đệm       kết   xuất,     một

    chương trình ghi ra một luồng.

•   Dữliệu  kết   xuất  đựơc lưu trữtrong   một   vùng

    đệm kết xuất.

•   Dữliệu được lưu trữ cho đến khi vùng đệm trợ

    nên đầy, hay luồng kết xuất được xảtrống.

•   Kết thúc, vùng đệm kết xuất được chuyển gửi

    đến đích của luồng xuất.

----------------------- Page 199-----------------------

Lớp BufferedInputStream

     •  Tựđộng tạo ra và duy trì vùng đệm đểhổtrợ

        vùng đệm nhập.

     •  bởi lớp ‘BufferedInputStream’                  là một bộđệm,

        nó có thểáp đụng cho một sốcác đối tượng

        nhất định của lớp ‘InputStream’.

     •  Cũng       có  thể phối        hợp     các    tập    tin  đầu    vào

        khác.

     •  Sửdụng vài biến đểtriển khai vùng đệm nhập.

----------------------- Page 200-----------------------

  Lớp BufferedInputStream

                      (Contd…)

•  Định nghĩa hai phương thức thiết lập:

     –  Một   chó  phép   chỉđịnh   kích   thước   của   vùng  đệm

        nhấp.

     –  phương thức kia thì không.

•   Cả hai phương thức thiết lập đều tiếp nhận một

   đối tượng của lớp ‘InputStream’ như một tham

   số.

•   Nạp      chồng       các     phương          thức     truy    cập     mà

    InputStream cung cấp, và không đưa vào bất

    kỳ phương thức mới nào.

----------------------- Page 201-----------------------

Lớp BufferedOutputStream

•   Thực       hiện      vùng     đệm        kết    xuất     theo      cách

   tương ứng với lớp ‘BufferedInputStream’.

•  Định nghĩa hai phương thức thiết lập. Nó cho

    phép chúng ta ấn định kích thước của vùng

    đệm   xuất   trong   một   phương   thức   thiết   lập,

    cũng   giống   như cung   cấp   kích   thước   vùng

    đệm mặc định.

•   Nạp       chồng        tất   cả  phương             thức     của      lớp

    ‘OutputStream’               và   không  đưa   vào   bất   kỳ

    phương thức nào.

----------------------- Page 202-----------------------

Lớp Reader và Writer

     •  Là các lớp trừu tượng.

     •  Chúng   nằm   tại  đỉnh   của   hệ phân   cấp

        lớp, hỗtrợviệc đọc và ghi các luồng ký

        tựunicode.

----------------------- Page 203-----------------------

Lớp Reader

•     Hỗtrợcác phương thức sau:

       –    read( )

       –    reset( )

       –    skip( )

       –    mark( )

       –    markSupported( )

       –    close( )

       –    ready( )

----------------------- Page 204-----------------------

Lớp Writer

       •  Hỗtrợcác phương thức sau :

            –   write( )

            –   flush( )

            –   close( )

----------------------- Page 205-----------------------

 Nhập/xuất chuỗi và mảng ký tự

•  Hỗtrợnhập và xuất từcác vùng đệm bộ

    nhớ

•  Hỗtrợ8 bít ký tựnhập và kết xuất

•  Lớp   ‘CharArrayReader’  không   bổ sung

    phương thức mới vào các phương thức

    mà lớp ‘Reader’ cung cấp.

----------------------- Page 206-----------------------

      Nhập/xuất chuỗi và mảng ký tự

•  Lớp ‘CharArrayWriter’ bổ sung phương

   thức sau đây vào phương thức của lớp

   ‘Writer’ cung cấp:

    –   reset( )

    –   size( )

    –   toCharArray( )

    –   toString( )

    –   writeTo( )

----------------------- Page 207-----------------------

Nhập/xuất chuỗi và mảng ký tự

•   Lớp ‘StringReader’ trợgiúp đọc các ký tựđầu

   vào từsâu chuỗi.

•   Nó  không   bổsung   bất   kỳ phương   thức   nào

    mà lớp      Reader cung cấp.

•   Lớp ‘StringWriter’ trợgiúp đểghi luồng kết xuất

    ký tựra một đối tượng ‘StringBuffer’.

•   Lớp này bổsung thêm các phương thức sau:

     –  getBuffer( )

     – toString( )

----------------------- Page 208-----------------------

Lớp PrinterWriter

     •  Thực hiện một kết xuất.

     •  Lớp này có phương thức bổsung , trợgiúp in

        các kiểu dữliệu cơ bản .

     •  Lớp PrintWriter thay thếlớp ‘PrintStream’

     •  Thực   tế cải   thiện   lớp   ‘PrintStream’;   lớp   này

        dùng một dấu tách dòng phụthuộc nền tảng

        điểm các dòng thay vì ký tự‘

’.

     •  Cung cấp phần hỗtrợ cho các ký tựunicode

        so với PrintStream.

     •  Các phương thức:

         –  checkError( )

----------------------- Page 209-----------------------

Giao diện DataInput

•  Được   sửdụng đểđọc   các   byte   từ luồng   nhị

    phân, và

•   Is  used   to   read   bytes   from   a   binary   stream,

   and xây dựng lại dữliệu trong một sốkiểu dữ

    liệu nguyên thuỷ.

•   Cho   phép   chúng   ta   chuyển  đổi   dữ liệu   từtừ

    khuôn   dạng   UTF-8  được   sửa  đổi   Java  đến

   dạng chuỗi

•  Định   nghiã   số  phương   thức,   bao   gồm   các

    phương thức đểđọc các kiểu dữliệu nguyên

   thuỷ.

----------------------- Page 210-----------------------

Những phương thức giao diện

                        DataInput

    •  boolean   readBoolean(  •                 float readFloat( )

                                              •  int readInt( )

    •  byte readByte( )                       •  double readDoubl

    •  char readChar( )

                                              •  String readUTF( )

    •  short readShort( )

                                              •  String readLine( )

    •  long readLong( )

----------------------- Page 211-----------------------

Giao diện DataOutput

    •  Được sửdụng đểxây dựng lại dữliệu một số

        kiểu   dữ liệu   nguyên   thuỷvào   trong   dãy   các

        byte

    •   Ghi các byte dữliệu vào luồng nhịphân

    •   Cho phép chúng ta chuyển đổi một chuỗi vào

        khuôn dạng UTF-8 được sửa đổi Java và viết

        nó vào trong một dãy.

    •  Định       nghĩa      một    số  phương          thức     và  tất    cả

        phương         thức     kích     hoạt     IOException          trong

        trường hợp lỗi.

----------------------- Page 212-----------------------

Các phương thức giao diện

                      DataOutput

 •   void writeBoolean(boolean b)

 •   void writeByte( int value)

 •   void writeChar(int value)

 •   void writeShort(int value)

 •   void writeLong(long value)

 •   void writeFloat(float value)

 •   void writeInt(int value)

 •   void writeDouble(double value)

 •   void writeUTF Strin                      value

----------------------- Page 213-----------------------

    Lớp RandomAccessFile

•   Cung cấp khả năng thực hiện I/O theo các vị

   trí cụthểbên trong một tập tin.

•   dữ liệu       có   thể đọc         hoặc      ghi    ngẫu   nhiên  ở

    những vịtrí bên trong tập tin thay vi một kho

    lưu trữthông tin liên tục.

•   phương   thức   ‘seek(   )’  hỗtrợtruy   cập   ngẫu

    nhiên.

•   Thực hiện cảđầu vào và đầu ra dữliệu.

•   Hỗtrợcác   cấp   phép  đọc   và  ghi   tập   tin   cơ

    bản.

•   Kế thừa            các      phương          thức       từ các         lớp

    ‘                ’     ‘                   ’

----------------------- Page 214-----------------------

             Các phương thức của lớp

                     RandomAccessFile

•  seek( )

•   getFilePointer( )

•   length( )

----------------------- Page 215-----------------------

Gói java.awt.print

    •  Gồm có các giao diện

        – Pageable:

              •   Định   nghĩa   các   phương   thức   dùng  đểcác  đối   tượng

                  biểu thịcác trang sẽđược in.

              •   Chỉđịnh số trang  đã được in, và trang hiện tại hay là

                  tranh giới trang đã được in

        – Printable:

              •   Chi định phương thức ‘print( )’ sửdụng đểin một trang

                  trên đối tượng ‘Graphics’

        – PrinterGraphics:

              •   Cung cáp khả năng truy cập đối tượng ‘PrinterJob’

----------------------- Page 216-----------------------

•   Giao diê n ‘PrinterGraphics’ cung cấp các lớp

   sau:

     –  Paper

     –  Book

     –  PageFormat

     –  PrinterJob

•   Gói  ‘java.awt.print’           kích hoạt các ngoại lệ:

     –  PrinterException

     –  PrinterIOException

     –  PrinterAbortException

----------------------- Page 217-----------------------

                        Chương IX

KẾT NỐI CSDL

Java Database Connectivity

----------------------- Page 218-----------------------

                          Tổng quan

•  JDBC cung cấp tập các lớp và interface

    cho phép chương trình Java có thểnói

    chuyện được với hệCSDL

•  Tập các lớp của JDBC

có thểlàm việc được với

mọi hệcsdl.

----------------------- Page 219-----------------------

•  Có 3 bước chính đểkết nối CSDL.

     – Nạp database drivers

     – Tạo nối kết, Tạo đối tượng Connection

     – Tạo đối tượng Statement đểthực thi các

        lệnh sql..

----------------------- Page 220-----------------------

                                            Ví dụ

try{

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    Connection con=DriverManager.getConnection("jdbc:odbc:ATM");

     Statement stmt = con.createStatement();

    :

    :

    :

    :

----------------------- Page 221-----------------------

                     Database URL

•  Database URL là một chuổi được dùng

   đểkết nối csdl.

•  cú pháp :

• jdbc:subprotocol name:other_stuff

•  The subprotocol name được dùng tuỳ

   vào loại driver sửdụng đểkết nối csdl.

•    ví dụ: subprotocol name là odbc nếu

   driver là cầu nối jdbcodbc

•  Other_stuff cũng phụthuộc vào loại

   driver nào được sửdụng. ví dụnếu

   driver là cầu nối jdbcodbc thì thành phần

    này là tên của đối tượng ODBC

----------------------- Page 222-----------------------

                   Database Driver

•   Bảo đảm ứng dụng java tương tác với mọi

   csdl dưới một cách thức chuẩn và duy nhất.

•   Bảo đảm những yêu cầu từ chương trình sẽ

   được biểu diễn trong csdl dưới một ngôn ngữ

    mà csdl hiểu được

•   nhận các yêu cầu từclient, chuyển nó nó vào

   định dạng mà csdl có thểhiểu được và thể

    hiện trong csdl.

•   Nhận các phản hồi, chuyển nó ngược lại định

   dạng dữliệu java và thểhiện trong ứng dụng.

----------------------- Page 223-----------------------

                        Nạp Driver

•  Lớp DriverManager chịu trách nhiệm nạp driver và

   tạo kết nối đến csdl.

DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());

•  hoặc

Class.forName(String);

    – This returns the object associated with the class with

       the given string name.

    – Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

•  Equivalent to:

   new sun.jdbc.odbc.JdbcOdbcDriver();

    If you have a driver from another vendor, then

   find out the class name of that driver and load it

   instead.

----------------------- Page 224-----------------------

                        JDBC Driver

•  Có 4 loại JDBC Driver

     – Loại 1: JDBC/ODBC

     – Loại 2: Native-API

     – Loại 3: Open Protocol-Net

     – Loại 4: Proprietary-Protocol-Net

•  Loại 2,3,4 nói chung được viết bởi nhà

    cung cấp csdl. hiệu quả hơn loại 1

    nhưng thực hiện phức tạp hơn.

----------------------- Page 225-----------------------

                     Loại I JDBC/ODBC

•    jdk hỗtrợcầu nối jdbc-odbc (jdbc-odbc

     bridge).

•    Mềm dẻo nhưng không hiệu quả.

                                  Aplication                Client

                                  Aplication

                                 JDBC Driver

                                 JDBC Driver                  Disk

                                                              Disk

                                 ODBC Driver

                                 ODBC Driver

                                Network Interface

                                                                         Network Interface

                                                                             Database

                                                                             Database

                                                                                         Server

----------------------- Page 226-----------------------

                         Loại 2: Native-API

•    Tốt hơn loại 1, loại này cho phép JDBC giao

     tiếp trực tiếp với các driver hay các hàm API

     của CSDL.

                                Aplication                     Client

                                Aplication

                               JDBC Driver

                               JDBC Driver                       Disk

                                                                 Disk

                             Native Database Library

                             Native Database Library

                              Network Interface

                                                                               Network Interface

                                                                                   Database

                                                                                    Database

                                                                                                 Server

----------------------- Page 227-----------------------

         Loại 3: Open Protocol-Net

•    Drivers

       – Có thểchuyển các yêu cầu đến các csdl nằm ởxa.

       – Có thểgiao tiếp với nhiều loại CSDL.

       – Không phải của nhà cung cấp csdl

                               Aplication                    Client

                                Aplication

       – Tất cảbằng mã java

                           JDBC Driver Client

                            JDBC Driver Client                Disk

                                                               Disk

                             Network Interface

                                                                           Network Interface

                                                      Server

                                                                           JDBC Driver Server

                                                                           JDBC Driver Server

                                                        Database

                                                        Database

                                                                           Native Database Library

                                                                            Native Database Library

----------------------- Page 228-----------------------

    Loại 4: Proprietary-Protocol Net

•  100% java

•  Có khả năng giao tiếp trực tiếp với hệ

                            Aplication                    Client

                             Aplication

     CSDL không cần chuyển đổi

                           JDBC Driver

                            JDBC Driver                     Disk

                                                            Disk

                          Network Interface

                                                                         Network Interface

                                                                             Database

                                                                             Database

                                                                                     Server

----------------------- Page 229-----------------------

                       Gói Java.sql

•   Cung cấp tập hợp các lớp và interface dùng để

   trao đổi với CSDL.

•   Các lớp

     – DriverManager

     – Date, Time

     – Timestamp

     – Types

•   Các Interfaces

        Driver                             PreparedStatement

        Connection                         CallableStatement

        DatabaseMetaData                   ResultSet

        Statement                          ResultSetMetaData

----------------------- Page 230-----------------------

           Đối tượng Statement

•  Đối tượng Connection chứa liên kết trực

   tiếp đến csdl.

•  Sửdụng đối tượng Connection đểtạo đối

   tượng Statement.

    – Statement s = con.createStatement();

•  Đối tượng này có nhiệm vụgửi các câu

    lệnh sql đến csdl.

•    executeQuery(String) or

   executeUpdate(String) method

•  Cùng một đối tượng Statement có thểsử

   dụng cho nhiều câu lệnh sql khác nhau.

----------------------- Page 231-----------------------

•   Có 3 phương thức thực thi

     – executeQuery()

     – executeUpdate()

     – execute()

•   The executeQuery()

     – Nhận câu lệnh SQL (select) làm đối số, trảlại đối

        tượng ResultSet

•   ResultSet rs = s.executeQuery(“SELECT *

    FROM Books”);

----------------------- Page 232-----------------------

•  Phương thức executeUpdate()

    – Nhận các câu lệnh sql dạng cập nhật

    – Trảlại sốnguyên biểu thịsốhàng được cập

        nhật.

    – UPDATE, INSERT, or DELETE.

•  Phương thức execute()

    – Được áp dụng cho trường hợp không rõ loại

        sql nào được thựưc hiện.

    – Được áp dụng cho trường hợp câu lệnh sql

        đwocj tạo ra tựđộng bởi chương trình.

----------------------- Page 233-----------------------

                           ResultSet

•   Chứa một hoặc nhiều hàng dữliệu từviệc thực

    hiện câu lệnh truy vấn.

•   Có thểlấy dữliệu từng hàng dữliệu một trong

    ResultSet.

•   Sửdụng phương thức next() đểdi chuyển đến

    hàng      dữliệu tiếp theo trong ResultSet.

•   Hàm next() trảlại true chỉrằng hàng chứa dữ

    liệu, trảlại false hàng cuối không chứa dữliệu.

•   Thực hiện

while (rs.next()){

    // examine a row from the results

    }

----------------------- Page 234-----------------------

•  Đểlấy dữliệu ởcác cột trên mỗi hàng

    của ResultSet, ta dùng các phương

   thức.

     – get type(int | String)

          • Đối sốlà chỉsốcột tính từ1.

          • Áp dụng cho các cột có kiểu dữliệu là int, float,

            Date.....

     – Ví dụ:

          • String isbn = rs.getString(1); // Column 1

          • float price = rs.getDouble(“Price”);

----------------------- Page 235-----------------------

              ResultSet Metadata

•  Đối tượng này cho biết thông tin vềResultSet

•   ResultSet rs = stmt.executeQuery(SQLString);

    ResultSetMetaData rsmd = rs.getMetaData();

    int numberOfColumns = rsmd.getColumnCount();

•   getColumnName(int column)

----------------------- Page 236-----------------------

            Prepared Statements

•   To execute a Statement object many times, it

   will reduce execution time to use

    PreparedStatement object

•   PreparedStatement object

     – unlike a Statement object, it is given an SQL

        statement when it is created.

     – The advantage to this is that in most cases, this

        SQL statement will be sent to the DBMS right

        away, where it will be compiled.

     – As a result, the PreparedStatement object

        contains not just an SQL statement, but an SQL

        statement that has been precompiled.

     – This means that when the Pre                 aredStatement is

----------------------- Page 237-----------------------

Các đối tượng Statement khác

•  Prepared Statements

•  Callable Statement

----------------------- Page 238-----------------------

              Database Metadata

•  Đối tượng này cho biết thông tin vềcsdl.

----------------------- Page 239-----------------------

                      Chương trình m                                      u

import java.sql.*;

class JDBCDemo1 {

    public static void main(String[] args) {

 try{

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

     Connection con=DriverManager.getConnection("jdbc:odbc:Accserver");

    Statement stmt = con.createStatement();

    ResultSet rs = stmt.executeQuery(args[0]);

    ResultSetMetaData rsmd = rs.getMetaData();

    int numberOfColumns = rsmd.getColumnCount();

    for(int j=1; j<=numberOfColumns;j++) {

           System.out.println(rsmd.getColumnLabel(j));

           }

    while(rs.next()) {

           for(int i=1; i<=numberOfColumns;i++){

           System.out.println(rs.getObject(i));

                      }}

           rs.close();

           stmt.close();

      catch Exce  tion e     S  stem.out.  rintln  "Error " + e

Bạn đang đọc truyện trên: Truyen2U.Pro