Công nghệ Java - Chương 4: Lớp, mảng và các lớp thường dùng

ppt 68 trang vanle 1250
Bạn đang xem 20 trang mẫu của tài liệu "Công nghệ Java - Chương 4: Lớp, mảng và các lớp thường dùng", để 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:

  • pptcong_nghe_java_chuong_4_lop_mang_va_cac_lop_thuong_dung.ppt

Nội dung text: Công nghệ Java - Chương 4: Lớp, mảng và các lớp thường dùng

  1. CÔNG NGHỆ JAVA CH4. LỚP, MẢNG VÀ CÁC LỚP THƯỜNG DÙNG Quang Dieu Tran PhD 7/5/2021 1
  2. Nội dung • Xây dựng Lớp • Xử lý chuỗi • Các lớp toán học • Mảng 7/5/2021 2 7/5/2021 2
  3. Xây dựng lớp • Khi định nghĩa lớp ta cần định nghĩa: – Các thuộc tính (biến) – Các hành vi (hàm) 7/5/2021 3
  4. Định nghĩa đầy đủ của 1 lớp 7/5/2021 4
  5. Xây dựng lớp • Hàm dựng (constructor) – Có cùng tên với lớp mà nó thuộc về – Định nghĩa cú pháp để tạo ra 1 đối tượng thuộc lớp đó – Khởi gán các giá trị ban đầu (nếu có) • Khởi tạo đối tượng: Declaration Route route = new Route("New York", "Boston"); ClockTime d = new ClockTime(23, 50); Initialization 7/5/2021 Instantiation 5
  6. Khai báo • Cú pháp Type name; – Khai báo 1 biến tên name dùng để tham chiếu tới dữ liệu có kiểu là type – Type có thể có hai dạng: • Primitive types • Reference types – Với kiểu khai báo này giá trị của name hoặc là giá trị mặc định do Java khởi gán, hoặc là null. 7/5/2021 6
  7. Ví dụ • MyClass myObj = new MyClass(); or MyClass myObj; • MyParent myObj = new MyClass(); or MyParent myObj; • MyInterface myObj = new MyClass(); or MyInterface myObj; • Note: MyParent và MyInterface phải là super class của MyClass 7/5/2021 7
  8. Khởi tạo đối tượng 7/5/2021 8
  9. Khởi tạo đối tượng 7/5/2021 9
  10. Sử dụng đối tượng • Bạn có thể sử dụng một đối tượng theo 2 cách: – Tham chiếu tới các thuộc tính objectReference.variableName; • Ví dụ: System.out.println("Chieu cao cua rectOne: "+ rectOne.height); – Triệu gọi các phương thức objectReference.methodName(argumentList); • Ví dụ: System.out.println(“Dien tich cua rectOne: " + rectOne.area()); 7/5/2021 10
  11. Truyền tham đối • Java cung cấp 2 cách để truyền tham đối: – Truyền tham trị: (primitive data) chỉ có ý nghĩa và thay đổi trong phương thức. Khi phương thức kết thúc➔ giá trị trở lại giá trị ban đầu – Truyền tham chiếu: (object) thay đổi bên trong phương thức sẽ ảnh hưởng tới đối tượng dùng làm tham đối. 7/5/2021 11
  12. Truyền tham đối Kết quả??? 7/5/2021 12
  13. Kết quả Before modify() d.height = 10 dim = 11 After modify() d.height = 11 7/5/2021 13
  14. Truyền tham đối Kết quả??? 7/5/2021 14
  15. Kết quả Before modify():Nguyen Van A After modify():Tran Thi B 7/5/2021 15
  16. Truyền tham đối Kết quả??? 7/5/2021 16
  17. Kết quả Before swap a: 1 , b: 2 After swap a: 1 , b: 2 7/5/2021 17
  18. Truyền tham đối Kết quả??? 7/5/2021 18
  19. Dọn rác • Java cung cấp cơ chế gom rác tự động Garbage collection mà người lập trình không cần phải quan tâm xử lý rác. • Đối tượng khi không còn tham chiếu nào tới nó nữa ➔ gom rác. 7/5/2021 19
  20. Dọn rác: nulling a reference • Cách đầu tiên để dọn rác là set tham chiếu của đối tượng thành null Garbage collection sẽ làm việc sau câu lệnh này 7/5/2021 20
  21. Ví dụ 7/5/2021 21
  22. Kết quả Total JVM memory: 5177344 Before Memory = 4974672 After Memory = 4728504 After GC Memory = 5045864 7/5/2021 22
  23. Xử lý trước khi gom rác • finally() methods: – Giải phóng tài nguyên cấp phát trước khi gom rác đối tượng. – Không nên overridden lại phương thức này vì bạn không biết chắc chắn lúc nào hàm hủy sẽ được gọi. 7/5/2021 23
  24. Chuỗi trong Java 7/5/2021 24
  25. Khai báo và sử dụng chuỗi • Java hỗ trợ Unicode ➔ mỗi kí tự dài 16 bit • Ví dụ hằng chuỗi – System.out.println(“Hello world”); • Ghép chuỗi: – Dùng các toán tử + và += để ghép chuỗi. – Ví dụ: double distance = 45.5; System.out.println("Distance = "+ distance +" miles."); Distance = 45.5 miles. Chuỗi 7/5/2021 25
  26. Chuỗi với vai trò là đối tượng • Trong Java chuỗi có ba thể hiện – String: bất biến – StringBuffer: khả biến, multi-thread – StringBuilder: khả biến, single-thread • Đều là các đối tượng chứ không phải là các mảng kí tự. 7/5/2021 26
  27. Khai báo và sử dụng kí tự • char có độ dài 2 bytes và chứa các số nguyên không dấu. • Hằng kí tự được biểu diễn trong dấu nháy đơn (’) • Bạn cũng có thể nhập các kí tự đơn bằng dãy escape sequence \uxxx chỉ định thứ tự theo thập lục phân. char c = '\u0a76'; System.out.println("Char = "+ c); 7/5/2021 27
  28. Lớp String • Áp dụng cho các chuỗi có độ dài cố định, không đổi trong quá trình chạy. • Đối tượng String không đổi được. 7/5/2021 28
  29. Lệnh dựng chuỗi String • public String() ; • public String(String original); • public String(char value[]); • public String(char value[], int offset, int count); • public String(int[] codePoints, int offset, int count); • public String(byte bytes[], int offset, int length, String charsetName); • public String(byte bytes[], int offset, int length, Charset charset); (1.6) • public String(byte bytes[], String charsetName); • public String(byte bytes[], Charset charset); (1.6) • public String(byte bytes[], int offset, int length); • public String(byte bytes[]) • public String(StringBuffer buffer); • public String(StringBuilder builder); • public String(byte ascii[], int hibyte, int offset, int count); • public String(byte ascii[], int hibyte); 7/5/2021 29
  30. String • Ví dụ: – String s = new String(); Chiều dài =0 – Chú ý: • Kí tự trong Java là kí tự 16bit, không phải ASCII 8 bit • Các encoding (charset): các chế độ mã hóa kí tự nền được sử dụng trong hệ thống để chuyển đổi kí tự ASCII thành Unicode. – VD: UTF-8, UTF-16, US-ASCII, ISO-8859-1, 7/5/2021 30
  31. Các phương thức chuỗi String • Demo: – Phương thức kiểm tra lớp String • length(), charAt(), getChars( ), getBytes( ), hashCode() – Phương thức so sánh lớp String • equals( ), equalsIgnoreCase( ), compareTo( ), compareToIgnoreCase ( ), regionMatches( ), startsWith( ), endWith( ) – Phương thức lập chỉ mục lớp String • indexOf( ), lastIndexOf( ) – Phương thức chuyển đổi lớp String • substring( ), concat( ), replace( ), toLowerCase( ), toUpperCase( ), trim(), toCharArray( ), intern() 7/5/2021 31
  32. Lớp StringBuffer • Áp dụng cho chuỗi có độ dài khả biến, có thể thay đổi trong quá trình chạy. • Đối tượng StringBuffer có thể thay đổi được • Áp dụng cho đa tiến trình 7/5/2021 32
  33. Lệnh dựng chuỗi StringBuffer • public StringBuffer(); • public StringBuffer(int capacity); • public StringBuffer(String str); • public StringBuffer(CharSequence seq); 7/5/2021 33
  34. Các phương thức chuỗi • Demo – Tính dung lượng và chiều dài lớp StringBuffer: • length(), capacity(), ensureCapacity( ), setLength( ) – Phương thức char của StringBuffer • charAt( ), getChars( ), setCharAt( ) – Nối thêm lớp StringBuffer • append( ) – Xóa, thay thế • delete( ), replace( ) – Chuỗi con • substring( ) – Chèn lớp • insert( ) – Khác • reverse(), toString(), readObject( ) 7/5/2021 34
  35. StringBuilder • Áp dụng cho các chuỗi khả biến có thể thay đổi trong quá trình chạy. • Đối tượng StringBuilder có thể thay đổi được • Xử lý nhanh, thay thế cho StringBuffer trong trường hợp chỉ có 1 tiến trình. • Các phương thức tương tự như của StringBuffer 7/5/2021 35
  36. Lớp Character • Là lớp bao của char, nó cung cấp các phương thức tĩnh (static) hữu ích. Method Description boolean isLetter(char ch) Determines whether the specified char boolean isDigit(char ch) value is a letter or a digit, respectively. Determines whether the specified char boolean isWhiteSpace(char ch) value is white space according to the Java platform. Determines whether the specified char boolean isUpperCase(char ch) value is upper- or lowercase, boolean isLowerCase(char ch) respectively. char toUpperCase(char ch) Returns the upper- or lowercase form of char toLowerCase(char ch) the specified char value. Returns a String object representing the toString(char ch) specified character value. 7/5/2021 36
  37. Ví dụ 7/5/2021 37
  38. Các kí số Character • Character rất hữu ích khi: chuyển đổi kí tự thành số nguyên trong 1 cơ số. char c = 'F'; int digit = 12; int digit = Character.digit(c, 16); char c = Character.forDigit(digit, 16); System.out.println(c + " = "+ digit); System.out.println(digit + " = " + c); 7/5/2021 38
  39. Các lớp số Java 7/5/2021 39
  40. Lớp Math • Lớp Math cung cấp các phương thức hữu ích để thực hiện nhiều thao tác toán học khác nhau. • Lớp Math tự động nhập vào trình ứng dụng mà không cần import. 7/5/2021 40
  41. Constructor của lớp Math • private Math(){} : Không thể tạo ra 1 đối tượng thuộc lớp này • Các hằng và phương thức đều là static ➔ được dùng trong tham chiếu bản thân lớp mà không cần khởi tạo đối tượng. 7/5/2021 41
  42. Math field • Math có 2 trường tĩnh: – E: cơ số của logarit tự nhiên (2.71828) – PI: giá trị đại diện cho π (3.14159) 7/5/2021 42
  43. Các phương thức tiện ích của Math • Demo – abs(); – min(), max() – rint(), round(), ceil(), floor() – power(), IEEremainder() – sqrt() – sin(), cos(), tan() – random() 7/5/2021 43
  44. Lớp Random • Constructor – Random r = new Random(); – Random r = new Random(12); • Các phương thức lớp Random – setSeed() – nextXXX() – nextXXX(max) 7/5/2021 44
  45. Các lớp bao bọc số • Lớp bao bọc Boolean • Lớp bao bọc Integer • Lớp bao bọc Long • Lớp bao bọc Byte • Lớp bao bọc Short • Lớp bao bọc Float • Lớp bao bọc Double 7/5/2021 45
  46. Định nghĩa • Mảng là một cấu trúc giữ không hoặc nhiều giá trị cùng kiểu dữ liệu. • Chiều dài của mảng phải được xác định khi khởi tạo mảng và không thay đổi ➔ mảng là 1 cấu trúc fix-length 7/5/2021 47
  47. Đặc điểm mảng • Các phần tử trong mảng có thể là: – primitive datatype – reference datatype • Lưu trữ và truy xuất các phần tử theo chỉ mục. • Là lớp con của Object và hiện thực 2 interfaces Serializable và Cloneable. • Một số đặc tính của mảng: – random access – linear lookup 7/5/2021 48
  48. Tạo mảng • Khai báo mảng type[] array_name; int[] anArray = new int[10]; int[] anArray; float[] anArrayOfFloats; boolean[] anArrayOfBooleans; Object[] anArrayOfObjects; String[] anArrayOfStrings; • Khởi tạo mảng new elementType[arraySize] • Khởi tạo giá trị mảng boolean[] answers = { true, false, true}; 7/5/2021 49
  49. Ví dụ String names[] = new String[3]; names[0] = "Leonardo"; names[1] = "da"; names[2] = "Vinci"; Giống nhau String names[] = {"Leonardo", "da", "Vinci"}; Giống nhau String names[] = new String []{"Leonardo", "da", "Vinci"}; 7/5/2021 50
  50. Mảng các dữ liệu nguyên thủy 7/5/2021 51
  51. Mảng đối tượng 7/5/2021 52
  52. Thao tác trên mảng • Truy xuất đến các phần tử for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " "); } • Xác định chiều dài arrayname.length 7/5/2021 53
  53. Ghi chú • Mảng rỗng thì chiều dài của nó bằng 0, lúc này không truy xuất được các phần tử mảng. • Sau khi khởi tạo, biến mảng sẽ tham chiếu tới phần tử đầu tiên trong mảng. 7/5/2021 54
  54. Mảng nhiều chiều • Khi mỗi phần tử trong mảng tham chiếu tới một mảng khác ➔ bạn cần tới mảng đa chiều. • Chỉ cần thêm 1 cặp [] khi muốn có thêm 1 chiều int coordinates[][]; coordinates[0][0] = 2; 7/5/2021 55
  55. Mảng nhiều chiều 7/5/2021 56
  56. Ví dụ 7/5/2021 57
  57. Ví dụ 7/5/2021 58
  58. Sao chép dữ liệu trên mảng • Java hỗ trợ 3 cách sao chép dữ liệu mảng – Toán tử gán – clone() – System.arraycopy() 7/5/2021 59
  59. Sao chép dữ liệu trên mảng • Toán tử gán: Nhận xét: cả hai mảng cùng tham chiếu tới 1 đối tượng mảng ➔khi thay đổi thì cả 2 cùng thay đổi ➔Copy tham chiếu 7/5/2021 60
  60. Sao chép dữ liệu trên mảng • Hàm System.arraycopy(): Nhận xét: hai biến mảng tham chiếu tới 2 đối tượng mảng khác nhau ➔Khi thay đổi trên 1 mảng sẽ không ảnh hưởng tới mảng kia ➔Copy nội dung 7/5/2021 61
  61. Sao chép dữ liệu trên mảng • Hàm clone() Nhận xét: hai biến mảng tham chiếu tới 2 đối tượng mảng khác nhau ➔Khi thay đổi trên 1 mảng sẽ không ảnh hưởng tới mảng kia ➔Copy nội dung 7/5/2021 62
  62. Sao chép dữ liệu trong mảng • Hàm System.arraycopy( ) dùng để copy để copy dữ liệu từ mảng này sang mảng khác. public static void arraycopy(Object source,int srcIndex, Object dest,int destIndex, int length) 7/5/2021 63
  63. Ví dụ 7/5/2021 64
  64. Bài tập • Lỗi gì? 7/5/2021 65
  65. Mảng rải rác tam giác (Triangular Sparse Array) 7/5/2021 66
  66. Mảng rải rác tam giác (Triangular Sparse Array) 7/5/2021 67
  67. Các biệt lệ trên mảng • Khi thao tác trên mảng có thể gặp 1 số biệt lệ sau: – NegativeArraySizeException – IndexOutOfBoundsException – ArrayIndexOutOfBoundsException – ArrayStoreException 7/5/2021 68