Lập trình hướng đối tượng - Chương 2: Ngôn ngữ lập trình Java

pptx 123 trang vanle 1900
Bạn đang xem 20 trang mẫu của tài liệu "Lập trình hướng đối tượng - Chương 2: Ngôn ngữ lập trình Java", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptxlap_trinh_huong_doi_tuong_chuong_2_ngon_ngu_lap_trinh_java.pptx

Nội dung text: Lập trình hướng đối tượng - Chương 2: Ngôn ngữ lập trình Java

  1. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (Object Oriented Programming) Chương 2. Ngôn ngữ lập trình Java TRẦN MINH THÁI Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 11 tháng 05 năm 2016
  2. Nội dung #2 1. Lịch sử ngôn ngữ Java 2. Giới thiệu các IDE cơ bản 3. Cách biên dịch và chạy chương trình Java 4. Các kiểu dữ liệu và cấu trúc dữ liệu cơ bản trong Java 5. Phương thức trong Java 6. Khai báo phương thức 7. Phương thức tĩnh 8. Nạp chồng các phương thức
  3. #3 Cơ bản về ngôn ngữ Java
  4. Lịch sử ngôn ngữ Java #4 James Gosling và nhóm kỹ sư của Sun Microsystems bắt đầu dự án ngôn ngữ Java vào tháng 6 năm 1991 để lập trình điều khiển các thiết bị điện tử (tivi, máy giặt, tủ lạnh, ) →Ngôn ngữ nhanh, gọn, hiệu quả và độc lập thiết bị →Ra đời 1995, tên gọi ban đầu “Oak” sau đó đổi tên thành “Java” →Kế thừa cú pháp của C & đặc trưng Hướng đối tượng của C++
  5. Lịch sử ngôn ngữ Java #5 • Tháng 6/1995 Sun giới thiệu ngôn ngữ Java (Java 1.0) • 13/11/2006, Sun phát hành Java với phần lớn miễn phí và phần mềm mã nguồn mở theo các điều khoản GNU, General Public License (GPL) • Ngày 08/05/ 2007, Sun cung cấp miễn phí code lõi của Java và open-source
  6. Lịch sử ngôn ngữ Java #6 Các phiên bản • Nền tảng J2SE (Java Standard Edition) tiêu chuẩn • Nền tảng J2EE (Java Enterprise Applications Edition) cho các ứng dụng doanh nghiệp • Nền tảng J2ME (Java Mobile Applications Edition) cho các ứng dụng di động
  7. Ngôn ngữ Java #7 • Là một ngôn ngữ hướng đối tượng (Object Oriented Programming) đầy đủ: không thể viết theo hướng thủ tục • Cho phép tạo Application hoặc Applet (chạy trên trình duyệt có hỗ trợ Java) • Sử dụng 2 cơ chế: Interpreter | Compiler • Viết một lần (Write Once), Chạy ở mọi thiết bị khác nhau (Run Anywhere)
  8. Đặc điểm ngôn ngữ Java #8 1. Đơn giản (Simple) 2. Hoàn toàn hướng đối tượng (Object Oriented) 3. Độc lập phần cứng và hệ điều hành (Platform independent) 4. Bảo mật (Secure) 5. Mạnh mẽ (Robust) 6. Đa luồng (Multithreading) 7. Hiệu suất cao (High performance) 8. Phân tán (Distributed) 9. Linh động (Dynamic)
  9. Đặc điểm ngôn ngữ Java #9 Đơn giản: Java được thiết kế để dễ học, quen thuộc. Nếu hiểu được những khái niệm cơ bản về OOP, sẽ dễ dàng làm chủ Java Loại bỏ những đặc trưng phức tạp: ✓ Con trỏ ✓ Định nghĩa chồng toán tử ✓ Đa kế thừa thay bằng interface ✓ Loại bỏ struct và union ✓
  10. Đặc điểm ngôn ngữ Java #10 • Hướng đối tượng: Mọi thứ là một đối tượng. Java có thể dễ dàng mở rộng kể từ khi nó được dựa trên mô hình đối tượng • Độc lập phần cứng và hệ điều hành: Khi Java được biên dịch, nó không được biên dịch vào một nền tảng cụ thể mà là bytecode. Bytecode này được thông dịch bởi máy ảo (JVM) tùy vào nền tảng mà nó đang thực thi → Không cần biên dịch lại mã nguồn
  11. Đặc điểm của ngôn ngữ Java #11 • Bảo mật: Quản lý thực thi chương trình ở nhiều mức 1. Dữ liệu và phương thức được đóng gói bên trong lớp 2. Trình biên dịch kiểm soát mã an toàn và kiểm soát tuân thủ đúng quy tắc của Java 3. Trình thông dịch kiểm soát bytecode đảm bảo quy tắc an toàn trước khi thực thi 4. Kiểm soát việc nạp vào bộ nhớ, giới hạn truy xuất trước khi nạp vào hệ thống
  12. Đặc điểm của ngôn ngữ Java #12 • Mạnh mẽ: Java nỗ lực loại trừ tình huống dễ bị lỗi bằng cách nhấn mạnh chủ yếu vào việc kiểm tra lỗi thời điểm biên dịch và thực thi ✓Khai báo kiểu dữ liệu tường minh ✓Không dùng con trỏ và phép toán con trỏ ✓Kiểm soát việc truy xuất ngoài phạm vi dữ liệu mảng ✓Cấp phát và giải phóng bộ nhớ được thực hiện tự động (garbage collection) ✓Cơ chế bẫy lỗi giúp kiểm soát và đơn giản trong xử lý lỗi và phục hồi sau lỗi
  13. Đặc điểm của ngôn ngữ Java #13 • Đa luồng: Có thể viết chương trình có thể làm nhiều việc cùng một lúc. Cho phép các nhà phát triển xây dựng các ứng dụng tương tác chạy đồng thời & đồng bộ • Hiệu suất cao: Với việc sử dụng các trình biên dịch Just- In-Time (bytecode → machine code) • Phân tán: Java được thiết kế để hỗ trợ ứng dụng chạy trên mạng, cho môi trường phân tán, chạy trên nhiều nền khác nhau của Internet
  14. Đặc điểm của ngôn ngữ Java #14 • Linh động: Java được coi là linh động hơn so với C hoặc C++ vì nó được thiết kế để thích ứng với môi trường phát triển mở • Các chương trình Java có thể xử lý số lượng lớn thông tin thực thi mà có thể được dùng để xác minh và giải quyết các truy cập đến các đối tượng trong thời gian thực thi
  15. Các thành phần trong môi trường Java #15 1. Java language 2. Bytecode definitions 3. Java/ Sun Class libraries 4. The Java Virtual Machine (JVM) 5. The structure of .class file
  16. JVM? #16 Chương trình Java (file.java) javac.exe : compiler Java Bytecode (file.class) Dùng cơ chế Just-In- Time thông dịch JVM (java.exe) bytecode thành lệnh OS platform máy cụ thể Hardware
  17. Java Run-time Environment (JRE) Compile-Time #17
  18. #18 Java Run-time Environment (JRE) Run-Time
  19. Java Development Kit - JDK #19 Gồm 4 thành phần (download: 1. Classes 2. Compiler 3. Debugger 4. Java Runtime Environment
  20. Các công cụ chính trong JDK #20 Trong thư mục BIN của JDK có: • Javac (Java Compiler): Dịch source code → Independent Bytecode • java : Thực thi class file trong JVM • appletviewer : cho phép chạy applet mà không cần Browser
  21. Các IDE cơ bản #21 • Netbeans: miễn phí và open-source • Eclipse: open-source • Thiết lập môi trường làm việc cho Java sau khi cài đặt, ví dụ ✓Windows: Thêm vào Path ‘c:\Program Files\java\jdk\bin’ ✓Trong Linux, UNIX, Solaris, FreeBSD: Thêm vào cuối file .bashrc: ‘export PATH=/path/to/java:$PATH' Kiểm tra xem cài đặt thành công? → dùng lệnh javac -version java -version
  22. Sử dụng IDE Eclipse #22 • Tạo mới Project
  23. Sử dụng IDE Eclipse #23 • Tạo mới Project - Đặt tên Project - Chọn Finish
  24. Sử dụng IDE Eclipse #24 Tạo mới class
  25. Sử dụng IDE Eclipse #25 • Tạo mới class - Chọn/ tạo Package - Đặt tên Project - Chọn Finish
  26. Sử dụng IDE Eclipse #26
  27. Sử dụng IDE Eclipse #27 • Viết code
  28. Sử dụng IDE Eclipse #28
  29. Biên dịch và chạy chương trình Java bằng lệnh #29 Dùng lệnh trong Command line (Windows) hay Terminal (Linux) - Biên dịch javac ViDu.java - Thực thi chương trình java ViDu Ví dụ file ViDu.java lưu tại đường dẫn C:\Users\Minh-Thai\workspace\JavaProgramming\src\minhthai\oop
  30. Từ khoá vs Định danh #30 • Từ khoá (keyword): Là những từ được Java quy định ý nghĩa và cách sử dụng • Định danh (identifier): Tất cả thành phần của Java phải đặt tên (định danh) như class, biến, phương thức, • Quy định với định danh: • Không đặt trùng với từ khóa • Không bắt đầu bằng chữ số • Ký tự được phép sử dụng: chữ cái, chữ số, $, _ • Phân biệt chữ hoa, chữ thường age, $salary, _value, __1_value 123abc, -salary
  31. Keyword #31 abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while
  32. Cách đặt tên trong Java #32 Phân biệt hoa thường (Case Sensitivity): Hello hello Tên lớp: Ký tự đầu của mỗi từ phải viết IN HOA Ví dụ: class MyFirstJavaClass Tên phương thức: từ đầu viết chữ thường, những từ sau viết IN HOA ký tự đầu Ví dụ: public void myMethodName() Tên chương trình: Đặt tên trùng khớp với tên lớp Ví dụ: Lớp 'MyFirstJavaProgram’ sẽ được lưu là 'MyFirstJavaProgram.java' Hằng số viết IN HOA Ví dụ: MAX_LINE
  33. Các kiểu dữ liệu cơ bản #33 • Biến là một mục dữ liệu được đặt tên • Cách khai báo một biến: type name [= ]; byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE; float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; char aChar = 'S'; boolean aBoolean = true;
  34. Các kiểu dữ liệu cơ bản #34 Keyword Mô tả Kích thước Integers byte Byte-length integer 8-bit two’s complement short Short integer 16-bit two’s complement int Integer 32-bit two’s complement long Long integer 64-bit two’s complement Real numbers float Single-precision floating point 32-bit IEEE 754 double Double-precision floating point 64-bit IEEE 754 Other types char A single character 16-bit Unicode character boolean A boolean value (true/false) true or false
  35. Các kiểu dữ liệu cơ bản #35 Literal Value Kiểu dữ liệu 178 int 8864L long 37.266 double 37.266D double 87.363F float 26.77e3 double ‘c’ char true boolean false boolean
  36. Phạm vi của biến #36
  37. Khai báo biến hằng #37 Giá trị của biến này không thể thay đổi sau khi khởi tạo Khai báo: final type variable [= ]; Ví dụ: final int aFinalVar = 0; final int blankFinal; blankFinal = 0; Mọi thay đổi biến final sau khi đã khởi tạo sẽ phát sinh lỗi compile time
  38. Phép toán số học #38 Operator Sử dụng Mô tả + op1 + op2 Cộng; nối xâu (String) - op1 – op2 Trừ * op1 * op2 Nhân / op1 / op2 Chia % op1 % op2 Phép lấy phần dư của op1 / op2 Chú ý với phép toán %: Dùng cho cả số thực Quy tắc: a % b = (dấu của a) abs(a) % abs(b); Ví dụ: -5 % 3 = -2; -5 % -3 = -2; 5 % 3 = 2; 5 % -3 = 2
  39. Phép toán một ngôi (Unary) #39 Operator Sử dụng Mô tả + +op Trả về kết quả int nếu op kiểu byte, short, char - -op Trả về kết quả đảo dấu của op
  40. Phép toán số học (viết tắt) #40 Operator Sử dụng Mô tả ++ op++ Tăng op lên 1; trả về giá trị của op trước khi tăng ++ ++op Tăng op lên 1; trả về giá trị của op sau khi tăng op Giảm op đi 1; trả về giá trị của op trước khi giảm op Giảm op đi 1; trả về giá trị của op sau khi giảm Ví dụ 1: a = 5; b = a++ + ++a + a++; //a = ?, b = ?; Ví dụ 2: a = 5; b = a + ++a + a++; //a = ?, b = ?;
  41. Phép toán quan hệ #41 Operator Sử dụng Mô tả > op1 > op2 Trả về true nếu op1 lớn hơn op2 >= op1 >= op2 Trả về true nếu op1 lớn hơn hoặc bằng op2 < op1 < op2 Trả về true nếu op1 nhỏ hơn op2 <= op1 <= op2 Trả về true nếu op1 nhỏ hơn hoặc bằng op2 == op1 == op2 Trả về true nếu op1 bằng op2 (hoặc nếu 2 biến đều reference đến 1 object) != op1 != op2 Trả về true nếu op1 khác op2 (hoặc nếu 2 biến reference đến 2 object khác nhau)
  42. Phép toán điều kiện #42 Operator Sử dụng Mô tả && op1 && op2 Trả về true nếu op1 và op2 true. Không lượng giá op2 nếu op1 false || op1 || op2 Trả về true nếu op1 hoặc op2 true. Không lượng giá op2 nếu op1 true ! !op Trả về true nếu op false
  43. Phép toán shift trên bit #43 Operator Sử dụng Mô tả > op1 >> op2 Dịch phải op1 op2 bits. Lấp đầy bên bên trái bằng bit dấu (Signed right shift). >>> op1 >> op2 Dịch phải op1 op2 bits. Lấp đầy bên trái bằng 0 (Unsigned right shift). • Ví dụ: 13 >> 1: 6; -13 >> 1: -6; -13 >>> 1: 2147483641; 1 << 31: -2147483648 • Trước khi thực hiện các phép toán, các kiểu dữ liệu integer (byte, short, char) được chuyển thành kiểu int. Và kết quả trả về là kiểu int (trừ các phép toán ++, , op=)
  44. Phép toán trên bit #44 Operator Sử dụng Mô tả & op1 & op2 AND bit. Chỉ áp dụng cho kiểu integeral. | op1 | op2 OR bit. Chỉ áp dụng cho kiểu integeral. ^ op1 ^ op2 XOR bit. Chỉ áp dụng cho kiểu integeral. ~ ~op Lấy bù bit (complement). (0->1, 1->0). Chỉ áp dụng cho kiểu integral.
  45. Phép toán gán #45 Operator Sử dụng Mô tả = op1 = op2 Gán giá trị op2 cho op1. Trả về giá trị của op1 sau khi gán. op= op1 op= op2 Viết tắt của op1 = op1 op op2. Có một lợi thế: không phải ép kiểu. op có thể là: +, -, *, /, %, &, |, ^, >, >>> Lợi thế không phải ép kiểu: byte a = 2; a = (byte)(a + 3); Viết gọn: a += 3;
  46. Các phép toán khác #46 Operator Sử dụng Mô tả ?: op1 ? op2 : op3 Nếu op1 true, trả về op2; ngược lại trả về op3. [] Dùng cho array Sử dụng khai báo, khởi tạo, truy cập phần tử mảng. . Dùng cho đối tượng Truy cập variables, methods của đối tượng, class. (params) Dùng trong methods Khai báo danh sách các biến. (type) (type)op Ép kiểu new Tạo đối tượng Tạo đối tượng/array mới. instanceof op1 instanceof op2 Return true nếu op1 là một thể hiện của op2. (op2 là class type, interface type, array type).
  47. Biểu thức #47 • Biểu thức là một chuỗi các biến, toán tử, lời gọi phương thức được tạo thành theo đúng cú pháp của ngôn ngữ. Kết quả trả về một giá trị Ví dụ: aChar = ‘S’, “The string “ + “value”, Character.isUpperCase(aChar) • Thứ tự lượng giá các toán hạng trong biểu thức: từ trái -> phải. Sau đó phép toán được thực hiện dựa trên thứ tự tính toán của toán tử. Ví dụ: 1. int[] a = {4, 4}; 2. int b = 1; 3. a[b] = b = 0; → Dòng 3: a[1] = b = 0;
  48. Thứ tự ưu tiên các toán tử #48 Nhóm Toán tử Unary ++ + - ! ~ (type) Arithmetic * / % + - Shift > >>> Comparison >= instanceof == != Bitwise & ^ | Short-circuit && || Condition ?: Assignment = op=
  49. Lệnh (statement) #49 • Câu lệnh tương đương với một câu trong ngôn ngữ tự nhiên. Câu lệnh tạo nên một đơn vị thực thi đầy đủ. • Những biểu thức sau đây có thể tạo thành câu lệnh bằng cách bổ sung dấu (;) vào cuối biểu thức: 1. Những biểu thức gán: a = ‘S’; 2. Biểu thức sử dụng ++, : a++; 3. Gọi phương thức: System.out.println(“String”); 4. Tạo đối tượng: Integer obj = new Integer(4); • Câu lệnh khai báo: double aValue = 933.24; • Câu lệnh điều khiển: for, if, while, do while, switch, return, break, continue
  50. Hiển thị dữ liệu #50 ✓ System.out.println(): Hiển thị dữ liệu và xuống dòng ✓ System.out.print(): Hiển thị dữ liệu ✓ System.out.printf(): Hiển thị dữ liệu có định dạng System.out.format(): Hiển thị dữ liệu có định dạng ✓ Dùng toán tử + để nối các dữ liệu khi hiển thị
  51. Các định dạng dữ liệu #51 • Dạng Boolean: %b • Dạng ký tự: %c • Dạng số nguyên: %d • Dạng số thực: %f • Dạng xâu ký tự: %s
  52. Nhập dữ liệu từ bàn phím – java.io.* #52 1. Đọc dữ liệu vào bộ đệm: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 2. Chuyển dữ liệu từ bộ đệm vào xâu String str = br.readLine(); 3. Chuyển dữ liệu từ xâu thành giá trị: ✓ Integer.parseInt(str) ✓ Long.parseLong(str) ✓ Float.parseFloat(str) ✓ Double.parseDouble(str)
  53. Nhập dữ liệu từ bàn phím – java.io.* #53
  54. Nhập dữ liệu từ bàn phím – java.util.Scanner #54
  55. #55 Cấu trúc lệnh điều khiển trong Java
  56. Khối lệnh (Blocks) #56 • Là một nhóm chứa 0 hoặc nhiều lệnh được đặt trong cặp {} • Thực hiện một cách tuần tự • Có thể được sử dụng ở bất kỳ nơi nào mà lệnh đơn có thể sử dụng • Phạm vi của biến: ✓ Biến chỉ có phạm vi sử dụng trong khối lệnh đã khai báo ✓ Với các khối lệnh lồng nhau có khai báo biến trùng tên, biến ở khối lệnh trong được ưu tiên
  57. Khối lệnh – Ví dụ phạm vi biến #57 { int n = 0; n = n + 1; //n = 1 { int n = 10, m = 10; n = m + 1; //n = 11 } m = m + 1; //Sai cú pháp }
  58. Lệnh có cấu trúc #58 • Lặp • while • do while • for • Rẽ nhánh • if • if else • switch case
  59. Cấu trúc rẽ nhánh if #59 if (bt điều kiện){ //Nếu điều kiện đúng khối lệnh; }
  60. Cấu trúc rẽ nhánh if else #60 if (bt điều kiện){ //Nếu điều kiện đúng khối lệnh 1; } else { //Nếu điều kiện sai khối lệnh 2; }
  61. Cấu trúc rẽ nhánh if else #61
  62. Cấu trúc rẽ nhánh if, if else #62 Áp dụng: • Cho bài toán kiểm tra số chính phương • Đầu vào: số nguyên n • Đầu ra: cho biết n là chính phương (căn bậc 2 của n là nguyên) hay không?
  63. Cấu trúc rẽ nhánh if else lồng nhau #63 if (bt điều kiện 1){ //Nếu điều kiện 1 đúng khối lệnh 1; } else if (bt điều kiện 2){ //Ngược lại, nếu điều kiện 2 đúng khối lệnh 2; } else if (bt điều kiện N){ //Ngược lại, nếu điều kiện N đúng khối lệnh N; } else{ //Không điều kiện nào thoả khối lệnh cho trường hợp còn lại; }
  64. Cấu trúc rẽ nhánh if else lồng nhau #64 • Xếp loại học tập cho học sinh theo bảng sau Điểm trung bình (dtb) Xếp loại Dưới 5.0 Kém Từ 5.0 đến dưới 7.0 Trung bình Từ 7.0 đến dưới 8.o Khá Trên 8.0 Giỏi
  65. Cấu trúc rẽ nhánh if else lồng nhau #65
  66. Cấu trúc rẽ nhánh if else lồng nhau #66 Áp dụng • Cho bài toán giải phương trình bậc nhất • Đầu vào: số nguyên a và b • Đầu ra: nghiệm của phương trình bậc nhất: ax + b = 0
  67. Cấu trúc switch case #67 switch (biểu thức){ case giá trị 1: khối lệnh 1; break; • biểu thức phải trả về case giá trị 2: kiểu dữ liệu byte, short, khối lệnh 2; char int, String break; • giá trị có kiểu byte, short, char int, String case giá trị N: • break thoát khỏi switch khối lệnh N; break; default: khối lệnh cho trường hợp còn lại (nếu có) }
  68. Cấu trúc switch case – Ví dụ #68 switch (number){ case 1: System.out.print(“One”); break; case 2: System.out.print(“Two”); break; case 3: System.out.print(“Three”); break; default: System.out.print(“I don’t know.”); }
  69. Cấu trúc switch case #69 Áp dụng: Cho bài toán đọc một số nguyên gồm 3 chữ số • Đầu vào: số nguyên n gồm 3 chữ số • Đầu ra: số n ghi bằng chữ
  70. Cấu trúc switch case #70 Áp dụng: Cho bài toán kiểm tra kết hợp 3 giá trị ng, th, và nm có phải là ngày/tháng/năm (ng/th/nm) hợp lệ • Đầu vào: ng, th, nm • Đầu ra: ng/th/nm: hợp lệ/ không hợp lệ?
  71. Cấu trúc lặp while, do while #71 while (bt điều kiện) { khối lệnh; } Lặp khi điều kiện còn đúng. Kiểm tra điều kiện trước khi thực hiện lệnh (có thể không thực hiện lệnh lần nào) do { khối lệnh; } while(bt điều kiện); Lặp khi điều kiện còn đúng. Kiểm tra điều kiện sau khi thực hiện lệnh (thực hiện ít nhất 1 lần)
  72. Cấu trúc lặp while, do while #72 Kết quả
  73. Cấu trúc lặp while, do while #73 Kết quả
  74. while vs do while #74 Nếu dùng while Nếu dùng do while
  75. Cấu trúc lặp while, do while #75 Áp dụng: • Cho bài toán tính giai thừa của số nguyên • Đầu vào: số nguyên n • Đầu ra: tính n! Sử dụng cấu trúc while và do while
  76. Cấu trúc lặp for #76 for (bt khởi tạo; điều kiện lặp; bước nhảy) { khối lệnh; } bt khởi tạo và bước nhãy có thể chứa nhiều biểu thức ngăn cách bởi dấu phẩy (,)
  77. Cấu trúc lặp for #77 Áp dụng: Viết lại bài toán tính giai thừa dùng cấu trúc lặp for
  78. Cấu trúc lặp for dùng cho mảng và tập hợp #78 for (biến để chứa giá trị phần tử : tên mảng/ tập hợp) { khối lệnh xử lý giá trị phần tử; } Ví dụ: int[] a = {4, 3, 2, 1}; for(int ai : a) { System.out.println(ai); }
  79. Thay đổi cấu trúc lặp break, continue, return #79 • break dùng để kết thúc vòng lặp for, while, do while break [label]; • continue dùng để bỏ qua vòng lặp hiện tại continue [label]; • return thoát khỏi phương thức và trả về giá trị (nếu có) return giá trị/ biểu thức trả về giá trị;
  80. Thay đổi cấu trúc lặp break, continue, return #80 int sum = 0; outer: for(int i = 0; i < 10; i++){ inner: for(int j = i; j < 10; j++){ sum ++; if (j == 1) continue; if (j == 2) continue outer; if (j == 3) break; if (j == 4) break outer; } } outer System.out.println(“ sum = “ + sum);
  81. #81 Cấu trúc dữ liệu cơ bản trong java
  82. Cấu trúc mảng 1 chiều - Array #82 • Mảng là nhóm giá trị có cùng kiểu, kề nhau, cùng tên gọi, truy xuất phần tử bằng chỉ số đi từ 0 Giá trị 1 4 12 7 8 Chỉ số 0 1 2 3 4 • Định nghĩa có chỉ định số phần tử (size)-> cấp bộ nhớ char ch[] = new char [5]; • Định nghĩa và khởi tạo ban đầu (in-line initialization): int a[] = { 1, 4, 12, 7, 8}; //hoặc int [] a = { 1, 4, 12, 7, 8};
  83. Mảng 1 chiều #83 • Chỉ khai báo: không chỉ định size: long a[]; • Khi sử dụng phải cấp bộ nhớ: a = new long [20]; • Trị mặc định: Toán tử new sẽ xóa bộ nhớ, các giá trị = 0 !!! Sau khi chỉ định kích thước thì kích thước này sẽ không đổi (thuộc tính length của mảng)
  84. Ví dụ tìm max trong mảng 1 chiều #84
  85. Bài tập #85 Viết chương trình xoá phần tử có giá trị x nếu có • Đầu vào: mảng 1 chiều số nguyên a, số nguyên x • Đầu ra: • mảng sau khi xoá x (nếu có) • xuất mảng theo giá trị tăng dần
  86. Mảng 2 chiều #86 • Là một bảng gồm có sd dòng và sc cột • Khai báo: Cột dataType arrayName[sd][sc]; hoặc dataType arrayName[][]; //Cấp phát số dòng Dòng //và số cột trước khi sử dụng • Ví dụ: int a[5][4];//5 dòng, 4 cột int b[][]; b = new int[5][4];
  87. Mảng 2 chiều #87 • Khai báo và khởi tạo giá trị ban đầu: int a[5][4] = {{1, 2, 3, 4}, Cột {5, 6, 7, 8}, 1 2 3 4 {9, 10, 11, 12}, 5 6 7 8 {13, 14, 15, 16}, Dòng 9 10 11 12 {17, 18, 19, 20}}; 13 14 15 16 17 18 19 20 //Có thể không cần chỉ định //số dòng và số cột cho //trường hợp này
  88. Mảng 2 chiều #88 • Truy xuất giá trị của phần tử: arrayName[csd][csc] Cột Trong đó: 1 2 3 4 • csd: chỉ số dòng 5 6 7 8 • csc: chỉ số cột Dòng 9 10 11 12 Cả hai chỉ số này tính từ 0 13 14 15 16 • Ví dụ 17 18 19 20 int x = a[3][2]; //x = 15
  89. Mảng 2 chiều #89
  90. Bài tập #90 Cho bài toán nhập vào ma trận đối xứng cho đồ thị vô hướng có trọng số • Đầu vào: số đỉnh của đồ thị (n) • Đầu ra: ma trận đối xứng
  91. Xâu ký tự - String #91 • Là một lớp trong Java • Khai báo • String variable = new String(literalString); • String varialbe = new String(char[] charArr) Hoặc • String variable = literalString; • Trong đó: • variable: biến • literalString: Giá trị hằng xâu ký tự • charArr: Mảng ký tự • Ví dụ: • String myUniversity = “PTIT”;
  92. Các phương thức của String #92 Phương thức Ý nghĩa Ví dụ trả về ký tự có chỉ String s = "Lap trinh Java"; char charAt(int index) số index (Chỉ số bắt char ch = s.charAt(5); đầu từ 0) //ch = ‘r’ String s = "Lap trinh Java"; chuyển thành chữ String toLowerCase() String s1 = s.toLowerCase(); thường //s1 = “lap trinh java” chuyển thành chữ String s = "Lap trinh Java"; String toUpperCase() hoa String s1 = s.toUpperCase(); //s1 = “LAP TRINH JAVA”
  93. Các phương thức của String #93 Phương thức Ý nghĩa Ví dụ so sánh hai xâu theo String s1 = "Lap trinh Java"; thứ tự từ điển (ưu String s2 = "Huong doi tuong"; tiên chữ thường) String s3 = "lap trinh java"; = 0: 2 xâu giống int n1 = s1.compareTo(s2); nhau //n1>0 int compareTo(String 0: xâu lớn hơn int n3 = s1.compareTo(s1); anotherString //n3=0 int n4 = s1.compareTo(s3); //n4<0 so sánh không kể String s1 = "Lap trinh Java"; int chữ hoa, chữ thường String s2 = "lap trinh java"; compareToIgnoreCase( int n = s1.compareTo(s2); String str) //n=0
  94. Các phương thức của String #94 Phương thức Ý nghĩa Ví dụ so sánh với một đối tượng bất kỳ (một boolean equals (Object đối tượng bất kỳ object) đều có thể chuyển thành String) so sánh với một đối boolean tượng bất kỳ, equalsIgnoreCase(String không phân biệt anotherString) chữ hoa chữ thường String s1 = "abcd"; chuyển xâu thành char[] toCharArray char []arr = s1.toCharArray(); mảng ký tự //arr = ‘a’, ‘b’, ‘c’, ‘d’
  95. Các phương thức của String #95 Phương thức Ý nghĩa Ví dụ String s1 = "abcd"; ghép nội dung str String s2 = "xyz"; String concat(String str) vào cuối xâu s1 = s1.concat(s2); //s1 = “abcdxyz” String s1 = "Lap trinh OOP Java"; trả về chỉ số của char ch = ‘a'; int indexOf(int ch) ký tự đầu tiên có int n = s1.indexOf(ch); giá trị bằng ch //n = 1 String s1 = "Lap trinh OOP Java"; trả về vị trí của String s2 = "Java"; int indexOf(String str) str trong xâu int n = s1.indexOf(s2); //n = 14
  96. Các phương thức của String #96 Phương thức Ý nghĩa Ví dụ String s1 = "Lap trinh OOP trả về xâu khi tất cả ký String replace (char Java"; tự oldChar trong xâu oldChar, char newChar) s1 = s1.replace('a', 'b'); thành newChar //s1 = “Lbp trinh OOP Jbvb” String replace (String trả về xâu khi tất cả xâu String s1 = "huong doi tuong"; oldString, String oldString trong xâu s1 = s1.replace("ng", "mh"); newString) thành newString //s1 = “huomh doi tuomh” String replaceFirst(String trả về xâu khi xâu String s1 = "huong doi tuong"; oldString, String oldString đầu tiên trong s1=s1.replaceFirst("ng", "mh"); newString) xâu thành newString //s1 = “huomh doi tuong” String s1 = "Lap,trinh;Java"; chia xâu thành các xâu String[] split (String regex) String arr[] = s1.split("[ ,;]"); con bởi xâu regex //arr = “Lap”, “trinh”, “Java” trả về xâu được loại bỏ String trim() dấu cách ở đầu và cuối
  97. Các phương thức tĩnh của String #97 Phương thức Ý nghĩa Ví dụ trả về xâu có chứa char []data = {'a', 'b', 'c', 'd'}; static String các ký tự của mảng String s = String.valueOf(data); copyValueOf(char[] data) data //s = “abcd” static String trả về xâu có chứa char []data = {'a', 'b', 'c', 'd'}; copyValueOf(char[] data, count ký tự từ chỉ số String s = String.valueOf(data, 1, 2); int offset, int count) offset của mảng data //s = “bc” trả về xâu hiển thị String s = String.format("%02d : giá trị của đối tượng %02d : %02d", 1, 2, 3); static String format() bất kỳ theo định System.out.println(s); dạng //01 : 02 : 03 trả về xâu chứa nội String s = String.valueOf(123); static String valueOf() dung của một đối //s = “123” tượng nào đó
  98. Bài tập #98 Cho bài toán tìm từ dài nhất • Đầu vào: một câu s • Đầu ra: từ có độ dài dài nhất Lưu ý: Các từ có thể cách nhau bởi khoảng trắng, dấu chấm câu
  99. Bài tập #99 Cho bài toán đảo các từ trong câu • Đầu vào: một câu s • Đầu ra: câu s sau khi đảo các từ • Ví dụ: s = “ca an kien” → đảo từ: “kien an ca”
  100. #100 Phương thức trong Java
  101. Phương thức trong Java #101 1. Phương thức trong Java 2. Khai báo phương thức 3. Phương thức tĩnh 4. Nạp chồng phương thức (method overloading)
  102. Phương thức trong Java #102 • Tập hợp các lệnh để thực hiện một hành động cụ thể nào đó • Mẫu phương thức modifier kieuTraVe tenPhuongThuc (DS tham so) { khối lệnh; } • Ví dụ public static int timMin (int a, int b) { int min = a; if(min>b) min = b; return min; }
  103. Gọi phương thức #103 • Phương thức không trả về giá trị tenPhuongThuc(ds tên đối số); Ví dụ gọi hàm nhập mảng số nguyên a, kích thước n: nhapMang(a, n); • Phương thức trả về một giá trị kieuTraVe bien = tenPhuongThuc(ds tên đối số); Ví dụ gọi hàm tìm giá trị min của mảng a, kích thước n: int giaTriMin = timMin(a, n);
  104. Truyền tham số bởi giá trị #104
  105. Truyền tham số biến (var-args) #105 • Cho phép truyền một số các giá trị cùng kiểu cho tham số biến. Tham số biến của phương thức được khai báo theo cú pháp (phải đặt cuối cùng trong ds tham số và duy nhất) kieuDuLieu tenThamSo Ví dụ public static int timMin(int dsSo){ } Gọi phương thức int gtMin = timMin(5, 7, 9, 20); Hoặc int gtMin = timMin(new int[]{5, 7, 9, 20});
  106. Truyền tham số biến #106
  107. Phương thức tĩnh #107 Phương thức thuộc lớp chứ không phải đối tượng của lớp Được gọi trực tiếp mà không cần tạo một instance của lớp Không thể truy cập thành viên dữ liệu non-static và gọi trực tiếp phương thức non-static Sử dụng từ khoá static trước tên phương thức
  108. Nạp chồng phương thức #108 • Khi một lớp có hai hoặc nhiều phương thức cùng tên nhưng khác nhau về tham số • Ví dụ: public static int timMin(int a, int b){ } public static double timMin(double a, double b){ }
  109. Nạp chồng phương thức #109
  110. Xử lý Exception #110 Exception là một loại lỗi đặc biệt xuất hiện vào lúc thực thi chương trình (run-time) Các trạng thái không bình thường xảy ra trong khi thi hành chương trình → tạo ra các Exception Nếu không xử lý các trạng thái này thì chương trình có thể bị kết thúc đột ngột Ví dụ chia cho 0, nhập sai định dạng, mở file không tồn tại, tràn bộ nhớ,
  111. Một số ngoại lệ cơ bản #111 Ngoại lệ Ý nghĩa Lớp cơ sở cho nhiều ngoại RuntimeException lệ java.lang Lỗi về số học, ví dụ như ArthmeticException ‘chia cho 0’ IllegalAccessException Lớp không thể truy cập IllegalArgumentException Đối số không hợp lệ ArrayIndexOutOfBoundsExeption Lỗi tràn mảng Khi truy cập đối tượng NullPointerException null Cơ chế bảo mật không cho SecurityException phép thực hiện ClassNotFoundException Không thể nạp lớp yêu cầu
  112. Một số ngoại lệ cơ bản #112 Ngoại lệ Ý nghĩa Việc chuyển đổi từ chuỗi sang số NumberFormatException không thành công AWTException Ngoại lệ về AWT IOException Lớp cha của các lớp ngoại lệ I/O FileNotFoundException Không thể định vị tập tin EOFException Kết thúc một tập tin NoSuchMethodException Phương thức yêu cầu không tồn tại InterruptedException Khi một luồng bị ngắt
  113. Mô hình xử lý ngoại lệ #113 try { Đoạn lệnh có khả năng gây ra ngoại lệ } catch(Exception e1) { Xử lý ngoại lệ e1 } catch(Exception e2) { Xử lý ngoại lệ e2 } catch(Exception eN) { Xử lý ngoại lệ eN } finally { Khối lệnh luôn được thực hiện cho dù có ngoại lệ hay không }
  114. Ví dụ 1 #114
  115. Ví dụ 2 #115
  116. Ví dụ 3 #116
  117. Uỷ nhiệm Exception #117 • throw: lệnh chuyển Exception trong khối try của phương thức → để giao cho cho phương thức khác xử lý hoặc xử lý trong catch • throws: liệt kê một số Exception có thể có của phương thức → Nếu không xử lý các Exception này trong catch trong định nghĩa phương thức thì bắt buộc phải xử lý ở các phương thức khác có sử dụng phương thức này
  118. Uỷ nhiệm Exception #118
  119. Ví dụ #119
  120. Tự định nghĩa Exception #120
  121. Tự định nghĩa Exception #121
  122. Bài tập #122 • Bổ sung ví dụ tự định nghĩa Exception bên trên, để bẫy lỗi cho trường hợp người dùng nhập vào giá trị không đúng định dạng hay quá giới hạn kích thước của biến • Nếu nhập không hợp lệ thì cho phép người dùng nhập lại cho đúng
  123. Q&A #123