Lập trình Java cơ bản

Java là một ngôn ngữ lập trình cấp cao theo hướng đối tượng do James Gosling và một số đồng nghiệp ở Sun Microsystems phát triển (với tên gọi ban đầu là Oak). Đây cũng là một phần trong dự án Green (các phần mềm điều khiển thiết bị điện tử dân dụng) của Sun. - Năm 1995 Oak trở thành Java với phiên bản 1.0.

pdf112 trang | Chia sẻ: franklove | Lượt xem: 9130 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Lập trình Java cơ bản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình Java Tổng quan về Java Trang 1 Taøi lieäu hoïc taäp: Lập trình Java cơ bản Giáo viên biên soạn: Nguyễn Tấn Thành Naêm 2007 Lập trình Java Tổng quan về Java Trang 2 Chương 1 TỔNG QUAN VỀ JAVA Sau bài học này, học viên có thể: - Giải thích được kiến trúc Java - Hiểu được các công nghệ hiện có. - Xác định được các môi trường hổ trợ lập trình Java - Viết mã và thi hành 1 chương trình Java đầu tay I. LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN JAVA: - Java là một ngôn ngữ lập trình cấp cao theo hướng đối tượng do James Gosling và một số đồng nghiệp ở Sun Microsystems phát triển (với tên gọi ban đầu là Oak). Đây cũng là một phần trong dự án Green (các phần mềm điều khiển thiết bị điện tử dân dụng) của Sun. - Năm 1995 Oak trở thành Java với phiên bản 1.0. Sau đó, Java không ngừng được phát triển và lần lượt các phiên bản mới được Sun phát hành. Năm 2005, Sun phát hành Java 1.5.0. II. ĐẶC ĐIỂM NGÔN NGỮ JAVA: Đơn giản: - Java phát triển trên nền tảng C++, nhưng đơn giản hơn C++ rất nhiều như: không kế thừa bội, không sử dụng biến con trỏ, cấu trúc “struct” và “union” cũng được loại bỏ khỏi Java,... 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. Phân tán (Distributed): - Java là ngôn ngữ thông dụng trong việc xây dựng các ứng dụng trên mạng nói chung và ứng dụng web nói riêng. Trung lập kiến trúc hệ thống: - Đâ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. Bảo mật cao: - Java cung cấp một số lớp để kiểm tra bảo mật và an toàn hệ thống. Khả năng đa tuyến: - 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. Mạnh mẻ: Lập trình Java Tổng quan về Java Trang 3 - 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. III. KIẾN TRÚC JAVA (JAVA PLATFORM) – CÁC CÔNG NGHỆ HIỆN CÓ: 1) Kiến trúc java: - J2SE (Java 2 Standard Edition) vừa là một đặc tả, cũng vừa là một nền tảng thực thi (bao gồm cả phát triển và triển khai) cho các ứng dụng Java. Nó cung cấp các API, các kiến trúc chuẩn, các thư viện lớp và các công cụ cốt lõi nhất để xây dựng các ứng dụng Java. - J2SE gồm 2 bộ phận chính là: § Java 2 Runtime Environment, Standard Edition (JRE) § Java 2 Software Development Kit, Standard Edition (SDK). - Môi trường thực thi hay JRE cung cấp các Java API, máy ảo Java và các thành phần cần thiết khác để chạy các Applet và ứng dụng viết bằng ngôn ngữ lập trình Java. Môi trường thực thi Java không có các công cụ và tiện ích như là các trình biên dịch hay các trình gỡ lỗi để phát triển các applet và các ứng dụng. - Java 2 SDK là một tập mẹ của JRE, và chứa mọi thứ nằm trong JRE, bổ sung thêm các công cụ như là trình biên dịch và các trình gỡ lỗi cần để phát triển applet và các ứng dụng. Lập trình Java Tổng quan về Java Trang 4 2) Công nghệ Java: Hiện nay, Java có 3 công nghệ: - J2SE (Java 2 Standard Edition): công nghệ Java chuẩn dành cho hầu hết môi trường phát triển ứng dụng Java. - J2EE (Java 2 Enterprise Edition): công nghệ Java dành cho môi trường xí nghiệp (Enterprise) hổ trợ kiến trúc Web, EJB, Transaction, Database... - J2ME (Java 2 Micro Edition): công nghệ phát triển các ứng dụng cho thiết bị điều khiển như đồ gia dụng, điện thoại di động,... IV. CÀI ĐẶT VÀ SỬ DỤNG JDK: 1) Cài đặt: - Download trình biên dịch JDK 1.5.0 trên Windows tại địa chỉ: - Chạy chương trình cài đặt JDK. Thư mục sau cài đặt mặc định là (được gọi là JAVA_HOME): C:\Program File\Java\Jdk1.5.0 - Cập nhật biến đường dẫn trong hệ điều hành Windows 2000/XP/2003. § Start\ Settings\ Control Panel\ System § Click Advanced Tab -> Click Environment Variables § Chọn biến Path trong System Variables -> Click Edit. § Cập nhật lại biến Path cho trình biên dịch JDK Lập trình Java Tổng quan về Java Trang 5 - Click OK. 2) Cấu trúc thư mục của trình biên dịch JDK 3) Các tập tin biên dịch thường dùng: a) Javac: - Dùng để biên dịch chương trình mã nguồn (.java) thành tập tin byte code (.class) b) Java: - Trình thông dịch java, dùng để thi hành chương trình java application c) Appletviewer: - Trình duyệt applet, dùng để thi hành chương trình java applet $java filename $appletview filename.html $javac filename.java - Chứa trình biên dịch và các công cụ hỗ trợ. - Chứa các chương trình mẫu. - Chứa các tập tin biên dịch native code - Môi trường thực thi ứng dụng java. - Chứa những tập tin thư viện .jar - Các chương trình mẫu đơn giản. Lập trình Java Tổng quan về Java Trang 6 d) Jdb: - Dùng để debug chương trình Java. V. CÁC KIỂU CHƯƠNG TRÌNH JAVA: 1) Applets: Đây là chương trình ký sinh chạy trên Internet thông qua các trình duyệt Web hỗ trợ Java như Internet Explorer (IE) hay Netscape Navigator. 2) Ứng dụng dòng lệnh (console): 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. 3) Ứng dụng đồ họa (graphics): Đâ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. 4) Servlet: 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. Chúng 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. 5) Ứng dụng cơ sở dữ liệu (Database): Các ứng dụng này sử dụng JDBC API để kết nối và lập trình với cơ sở dữ liệu. VI. CHƯƠNG TRÌNH JAVA ĐẦU TIÊN: Lập trình Java Tổng quan về Java Trang 7 1) Chương trình ứng dụng console: Yêu cầu: Chương trình hiển thị dòng chữ “Welcome to Java program”. Thực hiện: - Bước 1: Tạo tập tin java nguồn Welcome.java (sử dụng chương trình NotePad) - Bước 2: Biên dịch tập tin nguồn. § Chọn Start -> Run và nhập lệnh cmd. § Chuyển đến thư mục chứa tập tin nguồn cần biên dịch. § Dùng lệnh javac để biên dịch tập tin nguồn. D:\Lab1\javac Welcome.java Biên dịch tập tin nguồn class Welcome{ //main method public static void main(String args[]){ //display the string System.out.println("\n Welcome to Java program"); } } Lập trình Java Tổng quan về Java Trang 8 - Bước 3: Chạy chương trình. § Dùng lệnh java để chạy chương trình. Kết quả chương trình console 2) Chương trình Java Applet: Yêu cầu: - Chương trình vẽ chuỗi “Welcome to Java Programming” ra cửa sổ applet. Thực hiện: - Bước 1: § Tạo tập tin java nguồn WelcomeApplet.java. § Tạo tập tin WelcomeApplet.html (dùng để nhúng applet) - Bước 2: Biên dịch tập tin nguồn thành tập tin .class. D:\Lab1\javac WelcomeApplet.java A Simple Program Here is the output of my program: import java.awt.Graphics; import javax.swing.JApplet; public class WelcomeApplet extends JApplet{ public void paint(Graphics g){ super.paintComponents(g); g.drawString( "Welcome to Java Programming!",25,25); } } D:\Lab1\java Welcome Lập trình Java Tổng quan về Java Trang 9 - Bước 3: Chạy chương trình: Kết quả chương trình sử dụng applet § Ta có thể xem applet bằng trình duyệt Web. D:\Lab1\appletviewer WelcomeApplet.html Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 10 Chương 2 CẤU TRÚC LẬP TRÌNH CƠ BẢN TRONG JAVA Sau bài học này, học viên có thể: - Xác định được cấu trúc chung của một chương trình viết bằng Java - Nhận dạng các kiểu dữ liệu - Nhận dạng các toán tử - Nhập/xuất trong java - Nhận biết các cấu trúc lập trình cơ bản trong java I. CẤU TRÚC CHUNG CỦA 1 CHƯƠNG TRÌNH JAVA: 1) Cấu trúc chung: 2) Câu chú thích (comment): - Chú thích 1 dòng: - Chú thích trên nhiều dòng: - Chú thích dạng tài liệu: II. KIỂU DỮ LIỆU: Java là ngôn ngữ có kiểu rõ ràng, nghĩa là một biến phải có khai báo kiểu. Java cung cấp 2 loại kiểu dữ liệu: - Các kiểu dữ liệu nguyên thủy (primitive) - Các kiểu dữ liệu tham chiếu (reference) Lưu ý: - Trong C và C++, kiểu dữ liệu bị phụ thuộc vào hệ nền. Thí dụ khi thực thi chương trình trên hệ MS-DOS hay Win 3.1, kiểu int là 2 bytes, trên Windows chế độ 32 bit /* chú thích dòng 1 chú thích dòng 2 */ // lời chú thích public class Tên_Lớp { public static void main(String[] args) { // các câu lệnh } } /** document ...*/ Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 11 thì kiểu int là 4 bytes. Nhưng đối với Java, kích thước của tất cả kiểu dữ liệu là độc lập hệ nền. 1) Các kiểu dữ liệu nguyên thủy (primitive): a) Kiểu số (nguyên, thực): Kiểu Kích thước Miền giá trị int 4 bytes –2.147.483.648 ® 2.147.483. 647 short 2 bytes –32.768 ® 32.767 long 8 bytes –9.223.372.036.854.775.808 ® 9.223.372.036.854.775.807 byte 1 byte –128 ® 127 float 4 bytes ±3.40282347E+38F double 8 bytes ±1.79769313486231570E+308 b) Kiểu kí tự (char): - Kích thước 2 byte. c) Kiểu luận lý (boolean): - Kiểu boolean có 2 giá trị true. false Chú ý: - Trong java không có kiểu unsigned 2) Các kiểu dữ liệu tham chiếu (reference): - Trong Java có 3 kiểu dữ liệu tham chiếu: Kiểu dữ liệu Miền giá trị Mảng (Array) Tập hợp các dữ liệu cùng loại. Lớp (Class) Tập hợp các biến và các phương thức. Giao diện (Interface) Là một lớp trừu tượng được tạo ra để bổ sung cho các kế thừa đa lớp trong Java. III. BIẾN VÀ HẰNG TRONG JAVA: 1) Biến: - Vùng nhớ lưu trữ tạm thời dữ liệu nhập vào hay tính toán để xử lý. Giá trị của biến có thể thay đổi. Khai báo 1 biến: Khai báo nhiều biến: , ,...; ; Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 12 Khai báo biến: Ví dụ: int x; float a. b=6; 2) Hằng: - Vùng nhớ lưu trữ tạm thời dữ liệu để xử lý. Hằng có giá trị không đổi. Khai báo hằng: Ví dụ: final int MAX=100; //khai báo hằng MAX có giá trị 100. IV. CÁC PHÉP TOÁN TRONG JAVA: 1) Phép toán số học: Phép toán số học Ý nghĩa Phép toán so sánh Ý nghĩa + Phép cộng > Lớn hơn - Phép trừ >= Lớn hơn hay bằng * Phép nhân < Nhỏ hơn / Phép chia (nguyên,thực) <= Nhỏ hơn hay bằng % Phép lấy số dư (nguyên) == Bằng ++ Tăng một đơn vị != Khác -- Giảm một đơn vị ! Phủ định Phép toán luận lý Ý nghĩa Phép toán khác Ý nghĩa && Và = Gán || Hay (;) Thay đổi độ ưu tiên ? Điều kiện [;] Truy xuất phần tử của mảng Đặc biệt: phép toán + còn dùng với ý nghĩa nối chuỗi. - Number + String -> String - Boolean + String -> String Ví dụ: System.out.println(“ Hello ” + “World!”); // Kết quả in trên màn hình: Hello World! final =; ; Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 13 Ví dụ: int x=5; System.out.println(“Value x =” + x); // Kết quả in trên màn hình: Value x=5 2) Chuyển kiểu trong java: - Chuyển số nguyên sang số thực và ngược lại: Ví dụ: int n=5; double x; x=n; System.out.println(d); //kết quả in trên màn hình: 5.0 Ví dụ: double x=15.7; int n; n=(int) x; System.out.println(n); // Kết quả in ra màn hình: 15 - Chuyển dữ liệu chuỗi sang số: sử dụng các phương thức của các lớp bao kiểu số (Integer. Long. Float. Double...) Ví dụ: Int n; n= Integer.parseInt(“12”); // n có giá trị là 12 Ví dụ: double x; x= Double.parseDouble(“12.25”); // n có giá trị là 12.25 Integer.parseInt(chuổi dạng số nguyên) Float.parseFloat(chuổi dạng số thực) Double.parseDouble(chuổi dạng số thực) Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 14 V. NHẬP XUẤT TRONG JAVA: Ta dễ dàng xuất một giá trị ra thiết bị chuẩn bằng cách gọi lệnh System.out.println (). - Trước JDK1.5. không có phương pháp thuận lợi để đọc 1 giá trị từ console window. - Trong JDK1.5. java cung cấp luồng nhập Scanner để đọc 1 giá trị bất kỳ từ console window. 1) Lớp Scanner: Dùng để đọc giá trị từ một console. Các bước đọc dữ liệu từ console: - Tạo luồn nhập chuẩn. - Sử dụng các phương thức đọc dữ liệu tương ứng. a) Tạo luồng nhập chuẩn: Cú pháp: b) Các phương thức đọc dữ liệu: Ví dụ: import java.util.*; public class InputTest{ public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.print("What is your name? "); String name = in.nextLine(); System.out.print("How old are you? "); int age = in.nextInt(); // display output on console System.out.println("Hello. "+ name + ". Next year. you'll be " +(age + 1)); } } in.nextLine() đọc dòng dữ liệu in.nextInt() đọc một số nguyên in.nextDouble() đọc một số thực Scanner in = new Scanner(System.in); Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 15 Chú ý: - Nếu sử dụng phiên bản trước JDK1.5.0. ta sẽ rất khó khăn để đọc giá trị từ người dùng ở chế độ console. Phương pháp đơn giản là nên sử dụng hộp thoại (JOptionPane). Với lệnh như sau: - Kết quả nhận được là kiểu chuổi. Để chuyển dữ liệu sang kiểu số ta dùng phương thức chuyển kiểu: Integer.parseInt hoặc Double.parseDouble Ví dụ: import javax.swing.*; public class InputTest{ public static void main(String[] args){ String name = JOptionPane.showInputDialog("What is your name?"); String input = JOptionPane.showInputDialog("How old are you?"); int age = Integer.parseInt(input); JOptionPane.showMessageDialod(null."Hello. " + name + ". Next year. you'll be " +(age + 1)); System.exit(0); } } VI. CẤU TRÚC ĐIỀU KHIỂN: 1) Ý nghĩa: Dùng làm thay đổi trật tự thi hành lệnh của chương trình. Các cấu trúc gồm: - Câu lệnh điều kiện: if. switch. - Câu lệnh lặp: for. while. do-while. - Câu lệnh: break. continue. return. 2) Lệnh và khối lệnh: a) Lệnh: - Là một chỉ thị được kết thúc bằng dấu chấm phẩy “;” String input = JOptionPane.showInputDialog(“Thông báo”); Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 16 b) Khối lệnh: - Là tập hợp nhiều lệnh nằm trong một cặp móc “{” và “}” Ví dụ: { int x =5; // lệnh 1 System.out.println(“Giá trị x=” +x); // lệnh 2 } 3) Câu lệnh điều kiện: a) Câu lệnh if ..else: Dạng 1 (if thiếu): Dạng 2 (if thiếu): Dạng 3 (if mở rộng): if() { } elseif() { } else { ... } if() { } else { } if() { } Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 17 Ví dụ: - Chương trình sau kiểm tra xem số nguyên được nhập vào từ bàn phím là số chẵn hay lẻ và hiển thị thông báo phù hợp. import java.util.Scanner; public class CheckNumber{ public static void main(String args[]){ Scanner in = new Scanner(System.in); System.out.print(“Input a integer value:”); int num = in.nextInt(); if(num %2 == 0) System.out.println(num + “ is an even number”); else System.out.println(num + “ is an odd number”); } } Kết quả của chương trình CheckNumber b) Câu lệnh switch: Cú pháp: Lưu ý: - Biểu thức trong câu lệnh switch phải có giá trị kiểu nguyên (byte,char) Ví dụ: - Chương trình sau kiểm tra ngày hiện tại là thứ mấy trong tuần. switch() { case : lệnh 1; break; case : lệnh 2; break; default: lệnh n; Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 18 import java.util.Date; class DateTest{ public static void main(String agrs[]){ Date today = new Date(); int day = today.getDay(); switch(day){ case 0: System.out.println("Today is Sunday"); break; case 1: System.out.println("Today is Monday"); break; case 2: System.out.println("Today is Tuesday"); break; case 3: System.out.println("Today is Wednesday"); break; case 4: System.out.println("Today is Thursday"); break; case 5: System.out.println("Today is Friday"); break; case 6: System.out.println("Today is Satuday"); break; default: System.out.println("Invalid day of week"); } } } Kết quả của chương trình DateTest Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 19 4) Cấu trúc vòng lặp: a) Vòng lặp while: Cú pháp: b) Vòng lặp do..while: Cú pháp: c) Vòng lặp for: Cú pháp: Ví dụ: public class LoopTest{ public static void main(String args[]){ listNums1(3); listNums2(4); listNums3(5); } // while loops public static void listNums1(int max){ int i=0; while(i<=max){ System.out.println("Number: " + i); i++; //i=i+1; } } // do loops for(;;){ ; ; } do{ ; ; }while(); while(){ ; ; } Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 20 public static void listNums2(int max){ int i=0; do{ System.out.println("Number: " + i); i++; }while(i<=max); } // for loops public static void listNums3(int max){ for(int i=0;i<max;i++){ System.out.println("Number: " + i); } } } Kết quả chương trình LoopTest.java 5) Câu lệnh break, continue và return: a) Lệnh break: - Khi gặp lệnh break, chuong trình sẽ di chuyển điều khiển ra khỏi khối lệnh. Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 21 Ví dụ: int i = 1; while(true){ if(i == 3) break; System.out.println(i); i++; } - Khi i = 3 thì chương trình thoát khỏi vòng lặp và thực hiện lệnh k. b) Lệnh continue: - Di chuyển điều khiển sang lần lặp kế tiếp và không thực hiện lệnh đứng sau nó. Ví dụ: for(i=0; i<5; i++){ if(i%2 == 0) continue; System.out.println(i); } - Khi i = số chẵn thì chương trình sẽ không thực hiện lệnh in i mà thực hiện tiếp vòng lặp kế. c) Lệnh return: - Chấm dứt sự thực thi của một phương thức và trả về giá trị cho lời gọi phương thức. Cú pháp: VII. MẢNG (Array): Mảng là một cấu trúc dữ liệu mà ở đó nó lưu trữ tập hợp các phần tử có giá trị cùng kiểu. Ta truy xuất 1 phần tử của mảng thông qua tên mảng và chỉ số (index) của nó. 1) Mảng 1 chiều: Khai báo: []; return; Hoặc return ; Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 22 Int a[]; Int b[]=new int[10]; // vừa khai báo vừa cấp phát int c[] ={2,3,5,7,11,13}; // vừa khai báo và khởi tạo - Chỉ số phần tử của mảng xuất phát từ 0 ® kích_thước - 1 - Để biết số phần tử của mảng, dùng phương thức length Ví dụ: for(int i = 0; i < a.length; i++) System.out.println(a[i]); - Trong JDK1.5. ta có thể dùng vòng lặp for each để duyệt tập hợp (mảng). Cú pháp: Ví dụ: for(int x:a) System.out.println(x); Ví dụ: - Nhập mảng số nguyên có n phần tử bằng console windows. Tính tổng mảng vừa nhập. import java.util.Scanner; public class ArrayTest{ public static void inputArray(int a[], Scanner in){ for(int i=0;i<a.length;i++){ System.out.print("Input a["+i+ "]:"); a[i]=in.nextInt(); } } public static void outputArray(int a[]){ for(int i=0;i<a.length;i++){ System.out.print(a[i] + " "); } } public static int sumArray(int a[]){ int s=0; for(int i=0;i<a.length;i++){ for(:){ ; ; } Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 23 s+=a[i]; } return s; } public static void main(String args[]){ int a[],n; Scanner in = new Scanner(System.in); System.out.print("Input the elements of the array:"); n= in.nextInt(); a= new int[n]; inputArray(a.in); System.out.println("\n----------------------------"); System.out.print("Array is:"); outputArray(a); System.out.println("\n----------------------------"); System.out.println("Sum of the array:" +sumArray(a)); System.out.println("----------------------------"); } } Kết quả chương trình ArrayTest.java 2) Mảng 2 chiều: Khai báo: [][]; Lập trình Java Cấu trúc lập trình cơ bản trong Java Trang 24 Cấp phát vùng nhớ: Ví dụ: int a[][]; a= new int [3][3]; int b[][]= new int [3][2]; // khai báo và cấp phát int array[] ={{16, 3, 2, 13}, {5, 10, 11, 8}, {9, 6, 7, 12}}; - Truy xuất phần tử dòng i. cột j của mảng: b[i][j] Duyệt mảng 2 chiều: Ví dụ: for(int row = 0;row < array.length;row++){ for(int col = 0;col < array[row].length;col++){ System.out.println(“ ” + array[row][col]); } System.out.println(“\n”); } - Dùng vòng lặp “for each” để duyệt mảng 2 chiều: VIII. GÓI (package): 1) Khái niệm: Gói là thư mục chứa một hay nhiều tập tin .class