1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Session04 lop, mang va mot so lop thuong dung

17 31 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 685,78 KB

Nội dung

2/23/2018 Nội dung • • • • CƠNG NGHỆ JAVA CH4 LỚP, MẢNG VÀ CÁC LỚP THƯỜNG DÙNG Xây dựng Lớp Xử lý chuỗi Các lớp toán học Mảng Giảng viên: ThS Lê Nhật Tùng www.lenhattung.com 2/23/2018 http://www.lenhattung.com Xây dựng lớp 2/23/2018 2/23/2018 http://www.lenhattung.com http://www.lenhattung.com Định nghĩa đầy đủ 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) 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com 2/23/2018 Xây dựng lớp Khai báo • Hàm dựng (constructor) • Cú pháp – Có tên với lớp mà thuộc – Định nghĩa cú pháp để tạo đối tượng thuộc lớp – Khởi gán giá trị ban đầu (nếu có) • Primitive types • Reference types • Khởi tạo đối tượng: Declaration – Với kiểu khai báo giá trị name giá trị mặc định Java khởi gán, null Route route = new Route("New York", "Boston"); ClockTime d = new ClockTime(23, 50); 2/23/2018 Type name; – Khai báo biến tên name dùng để tham chiếu tới liệu có kiểu type – Type có hai dạng: Initialization http://www.lenhattung.com Instantiation Ví dụ 2/23/2018 http://www.lenhattung.com Khởi tạo đối tượng • MyClass myObj = new MyClass(); or MyClass myObj; • MyParent myObj = new MyClass(); or MyParent myObj; • MyInterface myObj = new MyClass(); or MyInterface myObj; • Note: MyParent MyInterface phải super class MyClass 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com 2/23/2018 Khởi tạo đối tượng Sử dụng đối tượng • Bạn sử dụng đối tượng theo cách: – Tham chiếu tới thuộc tính objectReference.variableName; • Ví dụ: System.out.println("Chieu cao cua rectOne: "+ rectOne.height); – Triệu gọi phương thức objectReference.methodName(argumentList); • Ví dụ: System.out.println(“Dien tich cua rectOne: " + rectOne.area()); 2/23/2018 http://www.lenhattung.com Truyền tham đối 2/23/2018 http://www.lenhattung.com 10 Truyền tham đối • Java cung cấp cách để truyền tham đối: – Truyền tham trị: (primitive data) có ý nghĩa thay đổi 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 phương thức ảnh hưởng tới đối tượng dùng làm tham đối Kết quả??? 2/23/2018 http://www.lenhattung.com 11 2/23/2018 http://www.lenhattung.com 12 2/23/2018 Kết Truyền tham đối Before modify() d.height = 10 dim = 11 After modify() d.height = 11 Kết quả??? 2/23/2018 http://www.lenhattung.com 13 Kết 2/23/2018 http://www.lenhattung.com 14 Truyền tham đối Before modify():Nguyen Van A After modify():Tran Thi B Kết quả??? 2/23/2018 http://www.lenhattung.com 15 2/23/2018 http://www.lenhattung.com 16 2/23/2018 Kết Truyền tham đối Before swap a: , b: After swap a: , b: Kết quả??? 2/23/2018 http://www.lenhattung.com 17 2/23/2018 http://www.lenhattung.com Dọn rác Dọn rác: nulling a reference • Java cung cấp 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 khơng tham chiếu tới  gom rác • Cách để dọn rác set tham chiếu đối tượng thành null 18 Garbage collection làm việc sau câu lệnh 2/23/2018 http://www.lenhattung.com 19 2/23/2018 http://www.lenhattung.com 20 2/23/2018 Ví dụ Kết Total JVM memory: 5177344 Before Memory = 4974672 After Memory = 4728504 After GC Memory = 5045864 2/23/2018 http://www.lenhattung.com 21 2/23/2018 http://www.lenhattung.com Xử lý trước gom rác • finally() methods: – Giải phóng tài nguyên cấp phát trước gom rác đối tượng – Không nên overridden lại phương thức bạn khơng biết chắn lúc hàm hủy gọi 2/23/2018 http://www.lenhattung.com 23 Chuỗi Java 2/23/2018 http://www.lenhattung.com 22 2/23/2018 Khai báo sử dụng chuỗi Chuỗi với vai trò đối tượng • Java hỗ trợ Unicode  kí tự dài 16 bit • Ví dụ chuỗi • Trong Java chuỗi có ba thể – String: bất biến – StringBuffer: khả biến, multi-thread – StringBuilder: khả biến, single-thread – System.out.println(“Hello world”); • Ghép chuỗi: • Đều đối tượng khơng phải mảng kí tự – Dùng toán tử + += để ghép chuỗi – Ví dụ: double distance = 45.5; System.out.println("Distance = "+ distance +" miles."); Distance = 45.5 miles 2/23/2018 Chuỗi http://www.lenhattung.com 25 2/23/2018 http://www.lenhattung.com Khai báo sử dụng kí tự Lớp String • char có độ dài bytes chứa số ngun khơng dấu • Hằng kí tự biểu diễn dấu nháy đơn (’) • Bạn nhập kí tự đơn dãy escape sequence \uxxx định thứ tự theo thập lục phân • Áp dụng cho chuỗi có độ dài cố định, khơng đổi q trình chạy • Đối tượng String không đổi 26 char c = '\u0a76'; System.out.println("Char = "+ c); 2/23/2018 http://www.lenhattung.com 27 2/23/2018 http://www.lenhattung.com 28 2/23/2018 Lệnh dựng chuỗi String • • • • • • • • • • • • • • • 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); 2/23/2018 http://www.lenhattung.com • Ví dụ: – String s = new String(); Chiều dài =0 – Chú ý: • Kí tự Java kí tự 16bit, khơng phải ASCII bit • Các encoding (charset): chế độ mã hóa kí tự sử dụng hệ thống để chuyển đổi kí tự ASCII thành Unicode – VD: UTF-8, UTF-16, US-ASCII, ISO-8859-1, … 29 2/23/2018 http://www.lenhattung.com Các phương thức chuỗi String Lớp StringBuffer • Demo: • Áp dụng cho chuỗi có độ dài khả biến, thay đổi q trình chạy • Đối tượng StringBuffer thay đổi • Áp dụng cho đa tiến trình – 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(…) 30 – Phương thức lập 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() 2/23/2018 http://www.lenhattung.com 31 2/23/2018 http://www.lenhattung.com 32 2/23/2018 Lệnh dựng chuỗi StringBuffer • • • • Các phương thức chuỗi • Demo – Tính dung lượng chiều dài lớp StringBuffer: public StringBuffer(); public StringBuffer(int capacity); public StringBuffer(String str); public StringBuffer(CharSequence seq); • length(), capacity(), ensureCapacity(…), setLength(…) – Phương thức char StringBuffer • charAt(…), getChars(…), setCharAt(…) – Nối thêm lớp StringBuffer • append(…) – Xóa, thay • delete(…), replace(…) – Chuỗi • substring(…) – Chèn lớp • insert(…) – Khác • reverse(), toString(), readObject(…) 2/23/2018 http://www.lenhattung.com 33 2/23/2018 http://www.lenhattung.com 34 StringBuilder Lớp Character • Áp dụng cho chuỗi khả biến thay đổi q trình chạy • Đối tượng StringBuilder thay đổi • Xử lý nhanh, thay cho StringBuffer trường hợp có tiến trình • Các phương thức tương tự StringBuffer • Là lớp bao char, cung cấp phương thức tĩnh (static) hữu ích 2/23/2018 http://www.lenhattung.com Method 35 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 2/23/2018 http://www.lenhattung.com 36 2/23/2018 Ví dụ Các kí số Character • Character hữu ích khi: chuyển đổi kí tự thành số nguyên số char c = 'F'; int digit = Character.digit(c, 16); System.out.println(c + " = "+ digit); 2/23/2018 http://www.lenhattung.com 37 2/23/2018 int digit = 12; char c = Character.forDigit(digit, 16); System.out.println(digit + " = " + c); http://www.lenhattung.com 38 Lớp Math Các lớp số Java 2/23/2018 http://www.lenhattung.com • Lớp Math cung cấp phương thức hữu ích để thực nhiều thao tác toán học khác • Lớp Math tự động nhập vào trình ứng dụng mà không cần import 2/23/2018 http://www.lenhattung.com 40 2/23/2018 Constructor lớp Math Math field • private Math(){} : Khơng thể tạo đối tượng thuộc lớp • Các phương thức static  dùng tham chiếu thân lớp mà không cần khởi tạo đối tượng • Math có trường tĩnh: 2/23/2018 2/23/2018 http://www.lenhattung.com 41 – E: số logarit tự nhiên (2.71828) – PI: giá trị đại diện cho π (3.14159) Các phương thức tiện ích Math Lớp Random • Demo • Constructor – abs(); – min(), max() – rint(), round(), ceil(), floor() – power(), IEEremainder() – sqrt() – sin(), cos(), tan()… – random() 2/23/2018 http://www.lenhattung.com http://www.lenhattung.com 42 – Random r = new Random(); – Random r = new Random(12); • Các phương thức lớp Random – setSeed() – nextXXX() – nextXXX(max) 43 2/23/2018 http://www.lenhattung.com 44 2/23/2018 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 2/23/2018 http://www.lenhattung.com Mảng 45 Định nghĩa Đặc điểm mảng • Mảng cấu trúc giữ không nhiều giá trị kiểu liệu • Chiều dài mảng phải xác định khởi tạo mảng không thay đổi  mảng cấu trúc fix-length • Các phần tử mảng là: – primitive datatype – reference datatype • Lưu trữ truy xuất phần tử theo mục • Là lớp Object thực interfaces Serializable Cloneable • Một số đặc tính mảng: – random access – linear lookup 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com 2/23/2018 Tạo mảng • Khai báo mảng • Khởi tạo mảng Ví dụ type[] array_name; int[] anArray = new int[10]; int[] anArray; float[] anArrayOfFloats; boolean[] anArrayOfBooleans; Object[] anArrayOfObjects; String[] anArrayOfStrings; … String names[] = new String[3]; names[0] = "Leonardo"; names[1] = "da"; names[2] = "Vinci"; Giống String names[] = {"Leonardo", "da", "Vinci"}; new elementType[arraySize] Giống • Khởi tạo giá trị mảng String names[] = new String []{"Leonardo", "da", "Vinci"}; boolean[] answers = { true, false, true}; 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com Mảng liệu nguyên thủy Mảng đối tượng 2/23/2018 2/23/2018 http://www.lenhattung.com http://www.lenhattung.com 2/23/2018 Thao tác mảng Ghi • Truy xuất đến phần tử • Mảng rỗng chiều dài 0, lúc khơng truy xuất phần tử mảng • Sau khởi tạo, biến mảng tham chiếu tới phần tử mảng 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 2/23/2018 http://www.lenhattung.com Mảng nhiều chiều 2/23/2018 http://www.lenhattung.com Mảng nhiều chiều • Khi phần tử mảng tham chiếu tới mảng khác  bạn cần tới mảng đa chiều • Chỉ cần thêm cặp [] muốn có thêm chiều int coordinates[][]; coordinates[0][0] = 2; 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com 2/23/2018 Ví dụ 2/23/2018 Ví dụ http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com Sao chép liệu mảng Sao chép liệu mảng • Java hỗ trợ cách chép liệu mảng • Toán tử gán: – Toán tử gán – clone() – System.arraycopy() Nhận xét: hai mảng tham chiếu tới đối tượng mảng khi thay đổi thay đổi Copy tham chiếu 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com 2/23/2018 Sao chép liệu mảng Sao chép liệu mảng • Hàm System.arraycopy(): • Hàm clone() Nhận xét: hai biến mảng tham chiếu tới đối tượng mảng khác Khi thay đổi mảng không ảnh hưởng tới mảng Copy nội dung 2/23/2018 http://www.lenhattung.com Sao chép liệu mảng Nhận xét: hai biến mảng tham chiếu tới đối tượng mảng khác Khi thay đổi mảng không ảnh hưởng tới mảng Copy nội dung 2/23/2018 http://www.lenhattung.com Ví dụ • Hàm System.arraycopy(…) dùng để copy để copy liệu từ mảng sang mảng khác public static void arraycopy(Object source,int srcIndex, Object dest,int destIndex, int length) 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com 2/23/2018 Bài tập Mảng rải rác tam giác (Triangular Sparse Array) • Lỗi gì? 2/23/2018 http://www.lenhattung.com Mảng rải rác tam giác (Triangular Sparse Array) 2/23/2018 http://www.lenhattung.com Các biệt lệ mảng • Khi thao tác mảng gặp số biệt lệ sau: – NegativeArraySizeException – IndexOutOfBoundsException – ArrayIndexOutOfBoundsException – ArrayStoreException 2/23/2018 http://www.lenhattung.com 2/23/2018 http://www.lenhattung.com ... 23 Chuỗi Java 2/23/2018 http://www.lenhattung.com 22 2/23/2018 Khai báo sử dụng chuỗi Chuỗi với vai trò đối tượng • Java hỗ trợ Unicode  kí tự dài 16 bit • Ví dụ chuỗi • Trong Java chuỗi có... 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... • Kí tự Java kí tự 16bit, khơng phải ASCII bit • Các encoding (charset): chế độ mã hóa kí tự sử dụng hệ thống để chuyển đổi kí tự ASCII thành Unicode – VD: UTF-8, UTF-16, US-ASCII, ISO-8859-1,

Ngày đăng: 05/11/2019, 00:07

w