Nội dung chính • Giới thiệu về NNLT hướng đối tượng Java • Bảng chữ cái và định danh • Kiểu dữ liệu nguyên thủy • Chương trình Java • Biên dịch và thực hiện chương trình • Tham số từ đối[r]
(1)Chương Ngôn ngữ lập trình Java Nguyễn Dư Nghĩa Khoa : Công nghệ thông tin (2) Nội dung chính • Giới thiệu NNLT hướng đối tượng Java • Bảng chữ cái và định danh • Kiểu liệu nguyên thủy • Chương trình Java • Biên dịch và thực chương trình • Tham số từ đối dòng lệnh •Cấu trúc điều khiển • Mảng (3) Giới thiệu • Vài nét lịch sử: • Cuối 1990, James Gosling (Cty Sun Microsystem) xây dựng và đặt tên Oak • Sau đó Oak đổi tên Java • Năm 1993 hỗ trợ Web/Internet • Năm 1995 Sun Microsystem công bố chính thức Java (4) Giới thiệu (tiếp) • Đặc trưng NNLT Java: “Java là ngôn ngữ đơn giản, hướng đối tượng, phân tán, thông dịch lẫn biên dịch, mạnh mẽ, bảo mật, cấu trúc độc lập, khả chuyển, hiệu cao và linh động” (Sun Microsystem) (5) Giới thiệu (tiếp) • Đơn giản: • Xây dựng từ C và C++, bỏ phức tạp C • Bộ biên dịch có kích thước nhỏ (bản 1.4 6MB) • Hướng đối tượng: • Chương trình Java viết hoàn toàn HĐT • Mọi khai báo lớp (6) Giới thiệu (tiếp) • Phân tán (distributed): • Hỗ trợ các ứng dụng phân tán qua lập trình mạng • Một chương trình Java có thể kết hợp từ nhiều chương trình khác trên Internet • Thông dịch (Interpreter) và biên dịch (compiler): • Một chương trình Java biên dịch (sang mã bytecode) sau đó thông dịch để thực thi (7) Giới thiệu (tiếp) • Mạnh mẽ: • Java có hệ thống thư viện lớn • Ràng buộc người lập trình chặt chẽ • Bảo mật (security): • Các bước kiểm tra trước thực chương trình chặt chẽ • Java không dùng biến trỏ nên không truy xuất trực tiếp nhớ (8) Giới thiệu (tiếp) • Kiến trúc trung tính (Neutral architecture): Chương trình java dịch sang bytecode có thể thực trên hệ thống máy tính khác nhau: Macintosh, Intel, Sun, Alpha, và trên nhiều hệ điều hành khác nhau: Windows, Unix, Sun Solaris, Macintosh,… Chương trình thông dịch trên hệ thống tạo thành máy ảo java (JVM) (9) Giới thiệu (tiếp) • Khả chuyển: • Khẩu hiệu Java “Write Once, Run Anywhere” nhờ máy ảo Java tương thích môi trường (10) Giới thiệu (tiếp) • Hiệu cao (High-performance): • Tính hiệu chung so với C và C++ • Tốc độ chương trình Java chậm • Đa tuyến (Multi-Thread): • Cho phép lập trình tạo nhiều tiến trình đồng thời • Linh động (flexible): • Trong chạy có thể tự liên kết với các lớp máy chủ xa trên Internet 10 (11) Giới thiệu (tiếp) • Bộ công cụ JDK (Java Development Kit) • Bộ công cụ phát triển trên môi trường Java bao gồm: • Chương trình dịch: javac.exe • Trình thông dịch: java.exe • Tạo tài liệu: javadoc.exe • Thực thi applet: appletviewer.exe • Các thư viện •… 11 (12) Giới thiệu (tiếp) • Các ứng dụng Java: • Ứng dụng Console: thực từ DOS • Ứng dụng desktop giao diện đồ họa • Java Applet • Lập trình mạng • Lập trình ứng dụng Web: servlet, jsp • Lập trình CSDL: JDBC • JavaBean • Lập trình phân tán • Lập trình mobile 12 (13) Cơ Ngôn ngữ lập trình Java 13 (14) Bảng chữ cái và định danh • Bảng chữ cái: • Các chữ cái: A, B, , Z, a, …, z • Các chữ số: 0, 1, …, • Các ký tự khác: +, -, … • Định danh (Identifier): • Bắt đầu chữ cái _ $ • Có thể dùng chữ cái, chữ số, dấu _ định danh • Phân biệt chữ hoa và chữ thường 14 (15) Các kiểu liệu nguyên thủy {1} • Số nguyên: Kiểu Kích thước Phạm vi byte byte -128->127 short bytes -32768->32767 Int bytes -2 147 483 648 ->… long bytes -9,223,372,036,854,775,808 • Các phép toán: +, -, *, /, %, ++, -15 (16) Các kiểu liệu nguyên thủy • Ký tự: • char • 2bytes (dùng bảng mã unicode) • Hằng ký tự: đặt ‘’ • Các ký tự đặc biệt: • \b xóa lùi • \t tab • \n xuống dòng • \” “ • \’ ‘ \ • \\ • \uxxxx ký tự unicode 16 (17) Các kiểu liệu …(tiếp) • Logic: boolean • Giá trị: true, false • Các phép toán: !, &&, || 17 (18) Các kiểu liệu … (tiếp) • Số thực: Kiểu Kích thước Phạm vi float bytes 1.40129846432481707e-45 3.40282346638528860e+38 double bytes 4.94065645841246544e-324 1.79769313486231570e+308 • Các phép toán: +,-,*,/,%,++,-• Các hằng: NaN (không phải số), Infinity (vô cùng) 18 (19) Các kiểu liệu … (tiếp) • Khai báo biến: • Kiểu liệu <ds biến>; Ví dụ: int x, y; • Phép gán: • biến = <biểu thức>; • Kết phép gán trả giá trị biểu thức • Được phép gán: a = b = c; • Các phép gán mở rộng: +=, -=, *=, /=, %= 19 (20) Các kiểu liệu …(tiếp) • Chuyển đổi kiểu liệu: • Hằng xác định kiểu liệu: • 1.2 double • 1.2f float • 123l long • Chuyển đổi kiểu tự động: • byte->short->int->long->float>double • Ép kiểu: (kiểu)<biểu thức> • Ví dụ: int x = (int) 123.45; //x=123 20 (21) Thứ tự ưu tiên các phép toán • [] ,., (params), expr++, expr-• ++expr, expr, +expr, -expr, ! • */% • +• <, >, <=, >= • ==, != • && • || • ?: • =, +=, -=, *=, /=, %= 21 (22) Chương trình Java • Chú thích: • Trên dòng: //Chú thích • Nhiều dòng: /* Các dòng chú thích */ • Lệnh đơn: kết thúc ; • Khối lệnh: { } 22 (23) Chương trình Java (tiếp) • Cấu trúc chương trình Java đơn giản: import <gói thư viện>; class <TênLớp> { public static void main(String args[]) { } Các lệnh } • Các lệnh hàm main thực thực thi chương trình 23 (24) Chương trình Java (tiếp) • Ví dụ: chương trình in lên màn hình dòng chữ “Chao Java” class Chao{ public static void main(String args[]) { System.out.println("Chao Java."); } } 24 (25) Chương trình Java (tiếp) • Lưu chương trình: Chao.java (trùng tên lớp) • Biên dịch chương trình từ DOS: • javac Chao.java => Chao.class • Thông dịch: Java Chao 25 (26) Biên dịch và thông dịch chương trình Java 26 (27) Chương trình Java (tiếp) • Tham số từ dòng lệnh: • Khi thực chương trình từ dòng lệnh có thể truyền tham số vào chương trình • Các tham số đưa vào mảng các xâu hàm main(String args[]) • Truyền tham số từ dòng lệnh: • Java <TênLớp> <ds đối số> • Ví dụ: chương trình in lên màn hình dòng “Chao <Tên>” với <Tên> đưa vào từ tham số 27 (28) Chương trình Chao2.java class Chao2 { public static void main(String args[]) { System.out.print("Chao " + args[0]); } } 28 (29) Thực chương trình 29 (30) Cấu trúc điều khiển • Rẽ nhánh: if (<điều kiện>) <Công việc 1>; [else <Công việc 2>;] • Nếu <điều kiện> đúng thì thực <Công việc 1>, ngược lại thực <Công việc 2> (nếu có) 30 (31) Cấu trúc điều khiển (tiếp) • Lựa chọn: switch (<biểu thức>) { case gt1: CV1; case gt2: CV2; … case gtn: CVn; default: CVn+1; } • Nếu giá trị <biểu thức> trùng với giá trị (gt) nào thì thực các công việc (CV) từ đó đến hết khối • Để dừng thực CV thì dùng lệnh break; 31 (32) Ví dụ • Chương trình đọc số từ thành chữ Số đưa vào từ dòng lệnh class DocSo{ public static void main(String args[]){ byte so = Byte.parseByte(args[0]); switch (so) { Case 0: System.out.println(“Khong”);break; … case 9: System.out.println(“Chin”);break ; } } } 32 (33) Cấu trúc điều khiển (tiếp) • Lặp for: for (<lệnh 1>;<điều kiện>;<lệnh 2>) <Công việc lặp>; • Thực <lệnh 1> • Nếu <điều kiện> đúng thì thực <Công việc lặp> • Thực <lệnh 2> • Quay lại kiểm tra <điều kiện> • Lặp đến <điều kiện> sai 33 (34) Ví dụ • Chương trình tính tổng các số đưa vào từ tham số class TinhTong{ public static void main(String args[]){ int tong=0,i; for(int i=0; i<args.length; i++) tong+=Integer.parseInt(args[i]); System.out.println(“Tong = ”+tong); } } Thực hiện: java TinhTong 34 (35) Cấu trúc điều khiển (tiếp) • Lặp while: while(<điều kiện>) <Công việc lặp>; Thực <Công việc lặp> <điều kiện> còn đúng • while: do{ <Công việc lặp>; } while (<điều kiện>); 35 (36) Cấu trúc điều khiển (tiếp) • Lệnh break: • Ra khỏi cấu trúc chuyển đến lệnh sau cấu trúc đó • Lệnh continue: • Quay lại đầu vòng lặp 36 (37) Mảng • Khai báo biến mảng: •KiểuDữLiệu tênBiếnMảng[]; •KiểuDữLiệu[] tênBiếnMảng; Ví dụ: int m[]; • Hoặc int[] m; • Cấp phát ô nhớ cho mảng: tênBiếnMảng = new KiểuDữLiệu[sốPT]; • Ví dụ: m = new int[10]; 37 (38) Mảng (tiếp) • Khai báo và khởi tạo: • KiểuDữLiệu tênBiếnMảng[]={ds các gt}; Ví dụ: int m[]={1,2,3,4}; • Thao tác với biến mảng: • Thao tác phần tử: tênBiếnMảng[i] • Chỉ số • Ví dụ: m[0]=1; m[1]=10;… • Số phần tử mảng: m.length 38 (39) Ví dụ: • Sinh ngẫu nhiên mảng số nguyên Sắp xếp, in lên màn hình class SapXep{ public static void main(String args[]) { int a[] = new int[100],i,j; for(i=0;i<100;i++) a[i]=(int)(Math.random()*100); 39 (40) Ví dụ for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(a[i]>a[j]) { int tg=a[i]; a[i]=a[j]; a[j]=tg; } System.out.println("Mang ngau nhien:"); for(i=0;i<100;i++) System.out.print(a[i]+ " "); } } 40 (41) Mảng (tiếp) • Mảng chiều: • Là mảng mảng chiều • Khai báo: • Kiểu biến[][]; • Cấp phát ô nhớ: biến=new kiểu[m][n]; • Khởi tạo: int m[][]={{1,2,3},{4,5,6}}; • Thao tác: biến[i][j] 41 (42) Ví dụ • Chương trình sinh ngẫu nhiên mảng chiều Tính tổng các số dòng lẻ mảng 42 (43) Nhập liệu từ bàn phím import java.io.*; class Input { public static int InputInt() { String str=null; DataInputStream stream = new DataInputStream(System.in); try{str = stream.readLine(); } catch(IOException e){} return Integer.valueOf(str).intValue(); } 44 (44) Nhập số thực public static float InputFloat() { String str=null; DataInputStream stream = new DataInputStream(System.in); try{ str = stream.readLine(); } catch(IOException e){} return Float.valueOf(str).floatValue(); } 45 (45) Nhập ký tự public static float InputChar() { String str=null; DataInputStream stream = new DataInputStream(System.in); try{ str = stream.readLine(); } catch(IOException e){} return str.charAt(0); } 46 (46) Ví dụ • Nhập độ dài bán kính hình tròn, tính chu vi và diện tích class HinhTron{ public static void main(String args[]) { int r; double dt, cv; System.out.print(“Nhap ban kinh ”); r = Input.InputInt(); dt = r * r * Math.PI; cv = 2*r* Math.PI; System.out.println(“Dien tich: ”+dt+“chu vi:”+cv); } } 47 (47) Bài thực hành số 1 Chương trình tính n! với n là tham số đưa vào từ dòng lệnh Chương trình sinh mảng ngẫu nhiên các số nguyên Liệt kê các số nguyên tố có mảng Chương trình sinh mảng ngẫu nhiên các số nguyên Liệt kê các số Fibonaci có mảng 48 (48)