Bài giảng Công nghệ Java - Chương 4: Lớp, mảng và các lớp thường dùng - Trần Quang Diệu
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
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.
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;
68 trang |
Chia sẻ: thucuc2301 | Lượt xem: 668 | Lượt tải: 0
Bạn đang xem trước 20 trang 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 - Trần Quang Diệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CÔNG NGHỆ JAVACH4. LỚP, MẢNG VÀ CÁC LỚP THƯỜNG DÙNGQuang Dieu Tran PhD11/27/2020111/27/20201Nội dungXây dựng LớpXử lý chuỗiCác lớp toán họcMảng11/27/2020211/27/20202Xây dựng lớpKhi đị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)11/27/2020311/27/20203Định nghĩa đầy đủ của 1 lớp11/27/2020411/27/20204Xây dựng lớpHà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);DeclarationInstantiationInitialization11/27/2020511/27/20205Khai báoCú 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à typeType có thể có hai dạng:Primitive typesReference typesVớ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;11/27/2020611/27/20206Ví dụMyClass myObj = new MyClass(); or MyClass myObj;MyParent myObj = new MyClass(); or MyParent myObj;MyInterface myObj = new MyClass(); orMyInterface myObj;Note: MyParent và MyInterface phải là super class của MyClass11/27/2020711/27/20207Khởi tạo đối tượng11/27/2020811/27/20208Khởi tạo đối tượng11/27/2020911/27/20209Sử dụng đối tượngBạ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ínhVí dụ: System.out.println("Chieu cao cua rectOne: "+ rectOne.height);Triệu gọi các phương thứcVí dụ: System.out.println(“Dien tich cua rectOne: " + rectOne.area());objectReference.variableName;objectReference.methodName(argumentList); 11/27/20201011/27/202010Truyền tham đốiJava 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 đầuTruyề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.11/27/20201111/27/202011Truyền tham đối Kết quả???11/27/20201211/27/202012Kết quảBefore modify() d.height = 10dim = 11After modify() d.height = 1111/27/20201311/27/202013Truyền tham đốiKết quả???11/27/20201411/27/202014Kết quảBefore modify():Nguyen Van AAfter modify():Tran Thi B11/27/20201511/27/202015Truyền tham đốiKết quả???11/27/20201611/27/202016Kết quảBefore swap a: 1 , b: 2After swap a: 1 , b: 211/27/20201711/27/202017Truyền tham đốiKết quả???11/27/20201811/27/202018Dọn rácJava 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.11/27/20201911/27/202019Dọn rác: nulling a referenceCách đầu tiên để dọn rác là set tham chiếu của đối tượng thành nullGarbage collection sẽ làm việc sau câu lệnh này11/27/20202011/27/202020Ví dụ11/27/20202111/27/202021Kết quảTotal JVM memory: 5177344Before Memory = 4974672After Memory = 4728504After GC Memory = 504586411/27/20202211/27/202022Xử lý trước khi gom rácfinally() 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.11/27/20202311/27/202023Chuỗi trong Java11/27/202024Khai báo và sử dụng chuỗiJava hỗ trợ Unicode mỗi kí tự dài 16 bitVí dụ hằng chuỗiSystem.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ỗi11/27/20202511/27/202025Chuỗi với vai trò là đối tượngTrong Java chuỗi có ba thể hiệnString: bất biếnStringBuffer: khả biến, multi-threadStringBuilder: khả biến, single-threadĐều là các đối tượng chứ không phải là các mảng kí tự.11/27/20202611/27/202026Khai 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);11/27/20202711/27/202027Lớ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.11/27/20202811/27/202028Lệnh dựng chuỗi Stringpublic 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);11/27/20202911/27/202029StringVí dụ:String s = new String();Chú ý:Kí tự trong Java là kí tự 16bit, không phải ASCII 8 bitCá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 =011/27/20203011/27/202030Các phương thức chuỗi StringDemo:Phương thức kiểm tra lớp Stringlength(), charAt(), getChars(..), getBytes(), hashCode()Phương thức so sánh lớp Stringequals(), equalsIgnoreCase(), compareTo(), compareToIgnoreCase (), regionMatches(), startsWith(), endWith()Phương thức lập chỉ mục lớp StringindexOf(), lastIndexOf()Phương thức chuyển đổi lớp Stringsubstring(), concat(), replace(), toLowerCase(), toUpperCase(), trim(), toCharArray(), intern()11/27/20203111/27/202031Lớ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ình11/27/20203211/27/202032Lệnh dựng chuỗi StringBufferpublic StringBuffer();public StringBuffer(int capacity);public StringBuffer(String str);public StringBuffer(CharSequence seq);11/27/20203311/27/202033Các phương thức chuỗiDemoTính dung lượng và chiều dài lớp StringBuffer:length(), capacity(), ensureCapacity(), setLength()Phương thức char của StringBuffercharAt(), getChars(), setCharAt()Nối thêm lớp StringBufferappend()Xóa, thay thếdelete(), replace()Chuỗi consubstring()Chèn lớpinsert()Khácreverse(), toString(), readObject()11/27/20203411/27/202034StringBuilderÁ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 đượcXử 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 StringBuffer11/27/20203511/27/202035Lớp CharacterLà lớp bao của char, nó cung cấp các phương thức tĩnh (static) hữu ích.MethodDescriptionboolean 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. 11/27/20203611/27/202036Ví dụ11/27/20203711/27/202037Các kí số CharacterCharacter 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);11/27/20203811/27/202038Các lớp số Java11/27/202039Lớp MathLớ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. 11/27/20204011/27/202040Constructor của lớp Mathprivate Math(){} : Không thể tạo ra 1 đối tượng thuộc lớp nàyCá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.11/27/20204111/27/202041Math fieldMath 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)11/27/20204211/27/202042Các phương thức tiện ích của MathDemoabs();min(), max()rint(), round(), ceil(), floor()power(), IEEremainder()sqrt()sin(), cos(), tan()random()11/27/20204311/27/202043Lớp RandomConstructorRandom r = new Random();Random r = new Random(12); Các phương thức lớp RandomsetSeed()nextXXX()nextXXX(max)11/27/20204411/27/202044Các lớp bao bọc sốLớp bao bọc BooleanLớp bao bọc IntegerLớp bao bọc LongLớp bao bọc ByteLớp bao bọc ShortLớp bao bọc FloatLớp bao bọc Double11/27/20204511/27/202045MảngĐịnh nghĩaMả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-length11/27/202047Đặc điểm mảngCác phần tử trong mảng có thể là:primitive datatypereference datatypeLư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 accesslinear lookup11/27/202048Tạo mảngKhai báo mảngKhởi tạo mảngKhởi tạo giá trị mảngtype[] 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};11/27/202049Ví dụString names[] = new String[3];names[0] = "Leonardo";names[1] = "da";names[2] = "Vinci";String names[] = {"Leonardo", "da", "Vinci"};Giống nhauString names[] = new String []{"Leonardo", "da", "Vinci"};Giống nhau11/27/202050Mảng các dữ liệu nguyên thủy11/27/202051Mảng đối tượng11/27/202052Thao tác trên mảngTruy xuất đến các phần tửXác định chiều dàifor (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " ");}arrayname.length11/27/202053Ghi 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.11/27/202054Mảng nhiều chiềuKhi 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ềuint coordinates[][];coordinates[0][0] = 2;11/27/202055Mảng nhiều chiều11/27/202056Ví dụ11/27/202057Ví dụ11/27/202058Sao chép dữ liệu trên mảngJava hỗ trợ 3 cách sao chép dữ liệu mảngToán tử gánclone()System.arraycopy()11/27/202059Sao chép dữ liệu trên mảngToán tử gán: Nhận xét: cả hai mảng cùng tham chiếu tới 1 đối tượng mảngkhi thay đổi thì cả 2 cùng thay đổiCopy tham chiếu11/27/202060Sao chép dữ liệu trên mảngHà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 nhauKhi thay đổi trên 1 mảng sẽ không ảnh hưởng tới mảng kiaCopy nội dung11/27/202061Sao chép dữ liệu trên mảngHàm clone()Nhận xét: hai biến mảng tham chiếu tới 2 đối tượng mảng khác nhauKhi thay đổi trên 1 mảng sẽ không ảnh hưởng tới mảng kiaCopy nội dung11/27/202062Sao chép dữ liệu trong mảngHà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)11/27/202063Ví dụ11/27/202064Bài tậpLỗi gì?11/27/202065Mảng rải rác tam giác (Triangular Sparse Array)11/27/202066Mảng rải rác tam giác (Triangular Sparse Array)11/27/202067Các biệt lệ trên mảngKhi thao tác trên mảng có thể gặp 1 số biệt lệ sau:NegativeArraySizeExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionArrayStoreException11/27/202068
Các file đính kèm theo tài liệu này:
- session04_lop_mang_va_mot_so_lop_thuong_dung_509_2001625.ppt