Bài giảng Công nghệ Java - Chương 4: Lớp, mảng và các lớp thường dùng
Nội dung
• Xây dựng Lớp
• Xử lý chuỗi
• Các lớp toán học
• Mảng
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)
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng 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 hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Công nghệ Java - Chương 4: Lớp, mảng và các lớp thường dùng
CÔNG NGHỆ JAVA CH4. LỚP, MẢNG VÀ CÁC LỚP THƯỜNG DÙNG Quang Dieu Tran PhD 4/7/2018 1 Nội dung • Xây dựng Lớp • Xử lý chuỗi • Các lớp toán học • Mảng 4/7/2018 2 4/7/2018 2 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) 4/7/2018 3 Định nghĩa đầy đủ của 1 lớp 4/7/2018 4 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: Route route = new Route("New York", "Boston"); ClockTime d = new ClockTime(23, 50); Declaration Instantiation Initialization 4/7/2018 5 Khai báo • Cú pháp – 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. Type name; 4/7/2018 6 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 4/7/2018 7 Khởi tạo đối tượng 4/7/2018 8 Khởi tạo đối tượng 4/7/2018 9 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 • Ví dụ: System.out.println("Chieu cao cua rectOne: "+ rectOne.height); – Triệu gọi các phương thức • Ví dụ: System.out.println(“Dien tich cua rectOne: " + rectOne.area()); objectReference.variableName; objectReference.methodName(argumentList); 4/7/2018 10 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. 4/7/2018 11 Truyền tham đối Kết quả??? 4/7/2018 12 Kết quả Before modify() d.height = 10 dim = 11 After modify() d.height = 11 4/7/2018 13 Truyền tham đối Kết quả??? 4/7/2018 14 Kết quả Before modify():Nguyen Van A After modify():Tran Thi B 4/7/2018 15 Truyền tham đối Kết quả??? 4/7/2018 16 Kết quả Before swap a: 1 , b: 2 After swap a: 1 , b: 2 4/7/2018 17 Truyền tham đối Kết quả??? 4/7/2018 18 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. 4/7/2018 19 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 4/7/2018 20 Ví dụ 4/7/2018 21 Kết quả Total JVM memory: 5177344 Before Memory = 4974672 After Memory = 4728504 After GC Memory = 5045864 4/7/2018 22 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. 4/7/2018 23 Chuỗi trong Java 4/7/2018 24 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 4/7/2018 25 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ự. 4/7/2018 26 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); 4/7/2018 27 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. 4/7/2018 28 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); 4/7/2018 29 String • Ví dụ: – String s = new String(); – 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, Chiều dài =0 4/7/2018 30 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() 4/7/2018 31 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 4/7/2018 32 Lệnh dựng chuỗi StringBuffer • public StringBuffer(); • public StringBuffer(int capacity); • public StringBuffer(String str); • public StringBuffer(CharSequence seq); 4/7/2018 33 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() 4/7/2018 34 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 4/7/2018 35 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) boolean isDigit(char ch) Determines whether the specified char value is a letter or a digit, respectively. boolean isWhiteSpace(char ch) Determines whether the specified char value is white space according to the Java platform. boolean isUpperCase(char ch) boolean isLowerCase(char ch) Determines whether the specified char value is upper- or lowercase, respectively. char toUpperCase(char ch) char toLowerCase(char ch) Returns the upper- or lowercase form of the specified char value. toString(char ch) Returns a String object representing the specified character value. 4/7/2018 36 Ví dụ 4/7/2018 37 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ố. int digit = 12; char c = Character.forDigit(digit, 16); System.out.println(digit + " = " + c); char c = 'F'; int digit = Character.digit(c, 16); System.out.println(c + " = "+ digit); 4/7/2018 38 Các lớp số Java 4/7/2018 39 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. 4/7/2018 40 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. 4/7/2018 41 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) 4/7/2018 42 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() 4/7/2018 43 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) 4/7/2018 44 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 4/7/2018 45 Mảng Đị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 4/7/2018 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 4/7/2018 48 Tạo mảng • Khai báo mảng • Khởi tạo mảng • Khởi tạo giá trị mảng type[] array_name; int[] anArray = new int[10]; int[] anArray; float[] anArrayOfFloats; boolean[] anArrayOfBooleans; Object[] anArrayOfObjects; String[] anArrayOfStrings; new elementType[arraySize] boolean[] answers = { true, false, true}; 4/7/2018 49 Ví dụ String names[] = new String[3]; names[0] = "Leonardo"; names[1] = "da"; names[2] = "Vinci"; String names[] = {"Leonardo", "da", "Vinci"}; Giống nhau String names[] = new String []{"Leonardo", "da", "Vinci"}; Giống nhau 4/7/2018 50 Mảng các dữ liệu nguyên thủy 4/7/2018 51 Mảng đối tượng 4/7/2018 52 Thao tác trên mảng • Truy xuất đến các phần tử • Xác định chiều dài for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " "); } arrayname.length 4/7/2018 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. 4/7/2018 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; 4/7/2018 55 Mảng nhiều chiều 4/7/2018 56 Ví dụ 4/7/2018 57 Ví dụ 4/7/2018 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() 4/7/2018 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 4/7/2018 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 4/7/2018 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 4/7/2018 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) 4/7/2018 63 Ví dụ 4/7/2018 64 Bài tập • Lỗi gì? 4/7/2018 65 Mảng rải rác tam giác (Triangular Sparse Array) 4/7/2018 66 Mảng rải rác tam giác (Triangular Sparse Array) 4/7/2018 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 4/7/2018 68
File đính kèm:
- bai_giang_cong_nghe_java_chuong_4_lop_mang_va_cac_lop_thuong.pdf