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ụ:
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ự.
68 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 505 | 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 PhD9/27/202119/27/20211Nội dungXây dựng LớpXử lý chuỗiCác lớp toán họcMảng9/27/202129/27/20212Xâ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)9/27/202139/27/20213Định nghĩa đầy đủ của 1 lớp9/27/202149/27/20214Xâ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);DeclarationInstantiationInitialization9/27/202159/27/20215Khai 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;9/27/202169/27/20216Ví 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 MyClass9/27/202179/27/20217Khởi tạo đối tượng9/27/202189/27/20218Khởi tạo đối tượng9/27/202199/27/20219Sử 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); 9/27/2021109/27/202110Truyề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.9/27/2021119/27/202111Truyền tham đối Kết quả???9/27/2021129/27/202112Kết quảBefore modify() d.height = 10dim = 11After modify() d.height = 119/27/2021139/27/202113Truyền tham đốiKết quả???9/27/2021149/27/202114Kết quảBefore modify():Nguyen Van AAfter modify():Tran Thi B9/27/2021159/27/202115Truyền tham đốiKết quả???9/27/2021169/27/202116Kết quảBefore swap a: 1 , b: 2After swap a: 1 , b: 29/27/2021179/27/202117Truyền tham đốiKết quả???9/27/2021189/27/202118Dọ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.9/27/2021199/27/202119Dọ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ày9/27/2021209/27/202120Ví dụ9/27/2021219/27/202121Kết quảTotal JVM memory: 5177344Before Memory = 4974672After Memory = 4728504After GC Memory = 50458649/27/2021229/27/202122Xử 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.9/27/2021239/27/202123Chuỗi trong Java9/27/202124Khai 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ỗi9/27/2021259/27/202125Chuỗ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ự.9/27/2021269/27/202126Khai 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);9/27/2021279/27/202127Lớ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.9/27/2021289/27/202128Lệ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);9/27/2021299/27/202129StringVí 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 =09/27/2021309/27/202130Cá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()9/27/2021319/27/202131Lớ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ình9/27/2021329/27/202132Lệnh dựng chuỗi StringBufferpublic StringBuffer();public StringBuffer(int capacity);public StringBuffer(String str);public StringBuffer(CharSequence seq);9/27/2021339/27/202133Cá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()9/27/2021349/27/202134StringBuilderÁ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 StringBuffer9/27/2021359/27/202135Lớ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. 9/27/2021369/27/202136Ví dụ9/27/2021379/27/202137Cá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);9/27/2021389/27/202138Các lớp số Java9/27/202139Lớ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. 9/27/2021409/27/202140Constructor 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.9/27/2021419/27/202141Math 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)9/27/2021429/27/202142Các phương thức tiện ích của MathDemoabs();min(), max()rint(), round(), ceil(), floor()power(), IEEremainder()sqrt()sin(), cos(), tan()random()9/27/2021439/27/202143Lớp RandomConstructorRandom r = new Random();Random r = new Random(12); Các phương thức lớp RandomsetSeed()nextXXX()nextXXX(max)9/27/2021449/27/202144Cá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 Double9/27/2021459/27/202145Mả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-length9/27/202147Đặ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 lookup9/27/202148Tạ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};9/27/202149Ví 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 nhau9/27/202150Mảng các dữ liệu nguyên thủy9/27/202151Mảng đối tượng9/27/202152Thao 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.length9/27/202153Ghi 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.9/27/202154Mả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;9/27/202155Mảng nhiều chiều9/27/202156Ví dụ9/27/202157Ví dụ9/27/202158Sao 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()9/27/202159Sao 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ếu9/27/202160Sao 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 dung9/27/202161Sao 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 dung9/27/202162Sao 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)9/27/202163Ví dụ9/27/202164Bài tậpLỗi gì?9/27/202165Mảng rải rác tam giác (Triangular Sparse Array)9/27/202166Mảng rải rác tam giác (Triangular Sparse Array)9/27/202167Cá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:NegativeArraySizeExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionArrayStoreException9/27/202168
Các file đính kèm theo tài liệu này:
- bai_giang_cong_nghe_java_chuong_4_lop_mang_va_cac_lop_thuong.ppt