Công nghệ Java - Chương 2: Các thành phần cơ bản

ppt 84 trang vanle 2020
Bạn đang xem 20 trang mẫu của tài liệu "Công nghệ Java - Chương 2: Các thành phần cơ bản", để 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_2_cac_thanh_phan_co_ban.ppt

Nội dung text: Công nghệ Java - Chương 2: Các thành phần cơ bản

  1. CÔNG NGHỆ JAVA CH2. CÁC THÀNH PHẦN CƠ BẢN 7/5/2021 1
  2. Nội dung • Chú thích • Khối lệnh và câu lệnh • Tập kí tự dùng trong Java • Từ khóa và tên • Kiểu dữ liệu • Hằng • Biến • Chuyển đổi kiểu dữ liệu • Định dạng nhập xuất • Biểu thức và toán tử • Các câu lệnh điều khiển 7/5/2021 2
  3. Chú thích (1) • Chú thích 1 dòng: bắt đầu bằng dấu // • Chú thích nhiều dòng: – bắt đầu bằng /* – kết thúc bằng */ 7/5/2021 3
  4. Chú thích (2) – Chú thích javadoc: • dùng để tài liệu hóa các lớp public hay protected • Bắt đầu bằng / • Kết thúc bằng */ 7/5/2021 4
  5. Chú thích (3) Bắt Kết Mục đích đầu thúc /* */ Đoạn code bị giới hạn là phần ghi chú // Ghi chú trên 1 dòng, trình biên dịch bỏ qua từ // đến cuối dòng / */ Ghi chú dành cho javadoc, trình biên dịch sẽ bỏ qua 7/5/2021 5
  6. Câu lệnh & khối lệnh (1) • Một câu lệnh trong java sẽ được kết thúc bằng dấu chấm phẩy (;) – Ví dụ: private void timgiatriXmax(Integer begin, Integer i, List list) { double xmax = list.get(begin).getX(); int index = begin; for (int j = begin + 1; j = xmax) { xmax = list.get(j).getX(); index = j; } } this.listdiemchot.add(list.get(index)); } 7/5/2021 6
  7. Câu lệnh & khối lệnh (2) • Các câu lệnh đơn có thể nối lại với nhau tạo thành các khối lệnh thuộc 1 lớp. • Bộ lệnh của Java không giới hạn trong cặp dấu ngoặc { và } • Khối lệnh có thể được đặt trong khối lệnh khác. public class Student { private String name; private GregorianCalendar bithDay; private double mark; } 7/5/2021 7
  8. Tên • Qui tắc đặt tên: – Tên có thể được bắt đầu bằng một kí tự, hoặc dấu: $, _ – Tên không thể bắt đầu bằng 1 số – Không được trùng với từ khóa – Tên không được chứa dấu cách – Java phân biệt chữ hoa và chữ thường 7/5/2021 8
  9. Tập kí tự dùng trong Java • Java được xây dựng dựa trên bộ kí tự sau: – 26 chữ cái hoa: A Z, 26 chữ cái thường: a z – 10 chữ số: 0 9 – Các kí hiệu toán học: +, -, *, /, %, =, () – Dấu nối: _ – Các kí hiệu đặc biệt khác: :, :, {}, [], ?, \, &, !, #, $, – Bên cạnh đó Java còn dùng bộ kí tự Unicode 7/5/2021 9
  10. Từ khóa (1) • là những từ có ý nghĩa xác định • Thường dùng để khai báo các kiểu dữ liệu, viết các toán tử và câu lệnh • Chú ý: – Không được dùng từ khóa để đặt tên cho hằng, biến, mảng, hàm, – Từ khóa phải viết bằng chữ thường 7/5/2021 10
  11. Từ khóa (2) Từ khóa Ý nghĩa abstract Dùng để khai báo lớp, hàm trừu tượng. boolean Kiểu dữ liệu logic break Được sử dụng để kết thúc vòng lặp hoặc cấu trúc switch. byte Kiểu dữ liệu số nguyên. case Được sử dụng trong lệnh switch. char Kiểu dữ liệu kí tự. catch Được sử dụng trong xử lý ngoại lệ. class Dùng để khai báo lớp. const Khai báo biến theo sau là biến hằng continue Được dùng trong vòng lặp để bắt đầu một vòng lặp mới. default Được sử dụng trong lệnh switch. do Được sử dụng trong vòng lặp điều kiện sau. 7/5/2021 11
  12. Từ khóa (3) Từ khóa Ý nghĩa double Kiểu dữ liệu số thực. else Khả năng lựa chọn thứ 2 trong câu lệnh If. extends Chỉ rằng một lớp được kế thừa từ một lớp khác. false Giá trị logic. final Dùng để khai báo hằng số, phương thức không thể ghi đè, hoặc lớp không thể kế thừa. finally Phần cuối của khối xử lý ngoại lệ. float Kiểu số thực. for Câu lệnh lặp. goto Nhảy tới dòng lệnh bất kì đã được đặt nhãn if Câu lệnh lựa chọn. implements Chỉ rằng một lớp triển khai từ một giao diện. import Khai báo sử dụng thư viện. 7/5/2021 12
  13. Từ khóa (3) Từ khóa Ý nghĩa instanceof Kiểm tra một đối tượng có phải là một thể hiện của một lớp hay không. int Kiểu số nguyên. interface sử dụng để khai báo giao diện. long Kiểu số nguyên. native Khai báo phương thức được viết bằng ngôn ngữ C++. new Tạo một đối tượng mới. null Một đối tượng không tồn tại. package Dùng để khai báo một gói. private Đặc tả truy xuất. public Đặc tả truy xuất. protected Đặc tả truy xuất. return Trả giá trị về short Kiểu số nguyên. 7/5/2021 13
  14. Từ khóa (4) Từ khóa Ý nghĩa static Dùng để khai báo biến, thuộc tính tĩnh. super Truy xuất đến lớp cha. switch Lệnh lựa chọn. synchronized Một phương thức độc quyền truy xuất trên một đối tượng. this Ám chỉ chính lớp đó. throw Ném ra ngoại lệ. throws Khai báo phương thức ném ra ngoại lệ. true Giá trị logic. try Sử dụng để bắt ngoại lệ. void Dùng để khai báo một phương thức không trả về giá trị. while Dùng trong cấu trúc lặp. 7/5/2021 14
  15. Kiểu dữ liệu • Mỗi biến phải có 1 kiểu dữ liệu • Kiểu dữ liệu xác định miền giá trị cho biến 7/5/2021 15
  16. Kiểu dữ liệu nguyên thủy • là các dữ liệu được xác định trong ngôn ngữ 7/5/2021 16
  17. Kiểu dữ liệu dẫn xuất • Tham chiếu tới một giá trị hay là tập hợp các giá trị mà biến khai báo. • Các kiểu dữ liệu dẫn xuất: 7/5/2021 17
  18. Giá trị mặc định • Lỗi hay gặp phải khi lập trình là sử dụng biến chưa khởi tạo • Java hỗ trợ khởi tạo các giá trị mặc định cho các biến. 7/5/2021 18
  19. Hằng • Từ khóa final chỉ dẫn đến 1 biến không thể thay đổi giá trị. • Các hàm và lớp cũng có thể được khai báo final – Hàm final không thể viết chồng – Lớp final không thể là lớp con final int MAX = 10; 7/5/2021 19
  20. Biến (1) • Biến là một vị trí trong bộ nhớ máy tính mà ở đó giá trị được lưu trữ và có thể được truy xuất sau đó. • Sử dụng để lưu trữ dữ liệu có thể thay đổi trong quá trình thực thi 7/5/2021 20
  21. Biến (2) • Tên biến phải là duy nhất trong 1 phạm vi • Các biến cần được khai báo trước khi sử dụng • Khai báo biến bao gồm đặc tả tên biến, và đặc tả kiểu dữ liệu mà biến đại diện. • Cú pháp: Type variable; Hay Type variable = value; 7/5/2021 21
  22. Biến (3) • Kiểu biến: – Kiểu dữ liệu nguyên thủy – Tên của 1 lớp – Một mảng • Để khai báo 1 biến mới ta phải khai báo 1 lớp mới, sau đó kiểu biến mới được khai báo kiểu là lớp mới đó. 7/5/2021 22
  23. Biến (4) • Các loại biến trong Java: – Biến đối tượng – Biến lớp – Biến cục bộ 7/5/2021 23
  24. Biến đối tượng • Dùng để định nghĩa thuộc tính, trạng thái cho 1 đối tượng • Có thể là biến toàn cục của 1 đối tượng • Khai báo Type variable; 7/5/2021 24
  25. Biến lớp • Tương tự biến đối tượng nhưng giá trị nằm trong chính lớp đó • Ảnh hưởng toàn cục đến 1 lớp và tất cả các đối tượng trong lớp đó • Thích hợp dùng để trao đổi thông tin giữa các đối tượng khác nhau trong cùng một lớp hau theo dõi trạng thái toàn cục của đối tượng • Cú pháp static Type variable; 7/5/2021 25
  26. Biến cục bộ • Được khai báo và sử dụng trong thân phương thức • Bắt buộc phải gán giá trị trước khi sử dụng • Java không có biến toàn cục, biến đối tượng hoặc biến lớp được dùng để truyền thông tin toàn cục 7/5/2021 26
  27. Phạm vi của biến • Biến toàn cục: có thể truy cập bất cứ đâu trong toàn bộ chương trình • Biến cục bộ tồn tại giới hạn và quan hệ chỉ trong phần nhỏ của mã public class MyClass { int i; // member variable int first() { int j; // local variable // i va j deu co the truy cap tu day return 1; } int second() { int j; // local variable // i va j deu co the truy cap tu day return 2; } } 7/5/2021 27
  28. Chuyển đổi kiểu dữ liệu (1) • Dùng để chuyển từ một kiểu dữ liệu này sang kiểu dữ liệu khác • Có 2 dạng ép kiểu: – Ép kiểu ngầm định – Ép kiểu tường minh 7/5/2021 28
  29. Chuyển đổi kiểu dữ liệu (2) 7/5/2021 29
  30. Ép kiểu ngầm định • Khi một kiểu dữ liệu được gán cho 1 biến của 1 kiểu khác ➔ tự động chuyển kiểu • Điều kiện: – Hai kiểu phải tương thích – Kiểu đích phải lớn hơn kiểu nguồn 7/5/2021 30
  31. Ép kiểu tường minh • Khi cần chuyển sang kiểu có độ chính xác cao hơn 7/5/2021 31
  32. Chuyển đổi kiểu dữ liệu • Có 3 dạng chuyển đổi kiểu dữ liệu – Chuyển đổi cho các kiểu dữ liệu cơ bản (New Type) value; – Chuyển đổi kiểu cho các đối tượng: các lớp chuyển đổi phải kế thừa nhau (New Class) object; – Chuyển đổi cho các kiểu dữ liệu cơ bản sang đối tượng và ngược lại: • Chỉ chuyển đổi giữa các đối tượng có sẵn trong gói java.lang tương ứng với các dữ liệu nguyên thủy int intObject = new Integer(32); 7/5/2021 32
  33. Khởi tạo biến • Integers byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE; • real numbers float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; • other primitive types char aChar = 'S'; boolean aBoolean = true; 7/5/2021 33
  34. Nhập xuất dữ liệu ⚫ Nhập xuất dữ liệu là tác vụ mức hệ thống ⚫ Gói java.io chứa các lớp cho việc xuất nhập. ⚫ Cần tham khảo gói này. ⚫ Java cung cấp class System mô tả hệ thống ⚫ System.out là đối tượng xuất mặc định (màn hình) ⚫ System.in là đối tượng nhập mặc định ( bàn phím) ⚫ System.err là đối tượng xuất lỗi (màn hình) Methods xuất dữ liệu ra màn hình: System.out.print(Dữ liệu xuất); System.out.println(Dữ liệu xuất); Dữ liệu xuất có thể là : ký tự, số, chuỗi, 7/5/2021 34
  35. Xuất dữ liệu (tt) 7/5/2021 35
  36. Định dạng nhập xuất (1) • Mã định dạng: bất kì một đầu ra được hiển thị trên màn hình cần phải được định dạng 7/5/2021 36
  37. Định dạng nhập xuất (2) • Hàm printf() trong Java được sử dụng để định dạng kiểu dữ liệu ở console • Ví dụ: public static void main(String[] args) { int i = 10; System.out.printf("gia tri cua i la %d", i); } 7/5/2021 37
  38. Lớp Scanner • Cho phép người dùng đọc giá trị của một vài kiểu public static void main(String[] args) { Đối tượng InputStream Scanner scaner = new Scanner(System.in); } • Một số phương thức của Scanner với System.in là đối tượng dòng đầu vào: 7/5/2021 38
  39. Dãy Escape 7/5/2021 39
  40. Các phương thức hữu dụng trong Character.class Useful Methods in the Character Class Method Description boolean isLetter(char ch) Determines whether the specified char value is a letter boolean isDigit(char ch) or a digit, respectively. Determines whether the specified char value is white boolean isWhiteSpace(char ch) space according to the Java platform. boolean isUpperCase(char ch) Determines whether the specified char value is upper- boolean isLowerCase(char ch) or lowercase, respectively. char toUpperCase(char ch) Returns the upper- or lowercase form of the specified char toLowerCase(char ch) char value. Returns a String object representing the specified toString(char ch) character value. Returns the numeric value of the character in the int digit(char ch, int radix) specified radix. 7/5/2021 40
  41. Các toán tử số học 7/5/2021 41
  42. Phép toán 1 ngôi 7/5/2021 42
  43. Toán tử quan hệ và bằng nhau • kết quả trả về luôn là một giá trị boolean 7/5/2021 43
  44. Các phép toán điều kiện 7/5/2021 44
  45. Các toán tử làm việc với bit 7/5/2021 45
  46. Toán tử luận lý • Các biểu thức có kiểu trả về là boolean, có thể kết hợp lại với nhau bằng các toán tử luận lý như: – AND (& hoặc &&) – OR (| hoặc ||) – XOR (^) – NOT (!) 7/5/2021 46
  47. Toán tử gán • Cú pháp: Variable operator = value; Tương ứng với Variable = Variable operator value; – Ví dụ: a +=4; tương đương với a = a+4; 7/5/2021 47
  48. Một số toán tử khác (1) 7/5/2021 48
  49. Một số toán tử khác (2) 7/5/2021 49
  50. Biểu thức & toán tử • Phép toán trên kiểu chuỗi String: – Java dùng toán tử + để nối hai chuỗi lại với nhau System.out.println(name + " is a " + color); Độ ưu tiên của các toán tử 7/5/2021 50
  51. Tính kết hợp của các phép toán 7/5/2021 51
  52. Biểu thức • Là sự kết nối các biến, các từ khóa hay các kí hiệu để trả về 1 giá trị của 1 kiểu nào đó. • Giá trị của các biểu thức có thể là số, chuỗi hoặc kiểu dữ liệu khác • Các loại biểu thức: – Biểu thức logic – Biểu thức số học – Biểu thức gán 7/5/2021 52
  53. Các câu lệnh điều khiển Kiểu Từ khóa Decision making if-else, switch-case Looping for, while, do-while Exception handling try-catch-finally, throw Branching Break, continue, label:, return 7/5/2021 53
  54. Các câu lệnh điều khiển quyết định 7/5/2021 54
  55. Cấu trúc rẽ nhánh if (1) Cú pháp: if (expression) { statement(s) condition } true false statement 7/5/2021 55
  56. Cấu trúc rẽ nhánh if (2) 7/5/2021 56
  57. Cấu trúc rẽ nhánh if (3) • Ví dụ: public static void main(String[] args) { int testScore = 76; char grade; if (testScore >= 90) { grade = 'A'; } if (testScore >= 80) { grade = 'B'; ??? } if (testScore >= 70) { grade = 'C'; } if (testScore >= 60) { grade = 'D'; } if (testScore >= 50) { grade = 'E'; } else { grade = 'F'; } System.out.println("Grade = "+ grade); } 7/5/2021 57
  58. Cấu trúc rẽ nhánh phức: switch (1) 7/5/2021 58
  59. Cấu trúc rẽ nhánh phức: switch (2) • Ví dụ public static void main(String[] args) { int month = 2; int numdays = 0; switch (month) { case 2: numdays = 28; break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: numdays = 31; break; default: numdays = 30; } System.out.println("num of day = "+ numdays); } 7/5/2021 59
  60. So sánh giữa if và switch Demo 7/5/2021 60
  61. Các câu lệnh điều khiển lặp 7/5/2021 61
  62. Vòng lặp for (1) 7/5/2021 62
  63. Vòng lặp for (2) • Ví dụ: public static void main(String[] args) { for(int i=1; i<11; i++){ System.out.println("Count is: " + i); } } for ( ; ; ) { //vòng lặp vô tận } 7/5/2021 63
  64. For each Cú pháp: for (iterable_type iterable_element : iterable) { Statements } public static void main(String[] args) { int[] aray = { 32, 45, 789, 0, 3 }; for (int element : aray) { System.out.print(element+" "); } } 7/5/2021 64
  65. Vòng lặp while (1) 7/5/2021 65
  66. Vòng lặp while (2) ⚫ Ví dụ: public static void main(String[] args){ int count = 1; while (count < 11) { System.out.println("Count is: " + count); count++; } } while (true){ // vòng lặp vô tận } 7/5/2021 66
  67. Vòng lặp do while (1) Thực thi ít nhất 1 lần 7/5/2021 67
  68. Vòng lặp do while (2) • Ví dụ: public static void main(String[] args) { int count = 1; do { System.out.println("Count is: " + count); count++; } while (count <= 11); } 7/5/2021 68
  69. So sánh while và for 7/5/2021 69
  70. Câu lệnh rẽ nhánh • Các loại câu lệnh rẽ nhánh thường gặp: – break – continue – return • continue và break có thể dùng cùng với label hoặc không – label: dùng để chỉ định chỗ cho các lệnh continue và break 7/5/2021 70
  71. Lệnh break (1) • Lệnh break có 2 dạng: – unlabeled form: dùng để thoát ra khỏi vòng lặp như switch, for, while, or do-while – labeled form: di chuyển tới vùng đặt label public static void main(String[] args) { int out, in = 0; for (out = 0; out 10) break; } System.out.println("inside the outer loop: out = " + out + ", in = " + in); } System.out.println("end of the outer loop: out = " + out + ", in = “ + in); } 7/5/2021 71
  72. Lệnh break (2) public static void main(String[] args) { int out, in = 0; outer: for (out = 0; out 10) break outer; } System.out.println("inside the outer loop: out = " + out + ", in = " + in); } System.out.println("end of the outer loop: out = " + out + ", in = “ + in); } 7/5/2021 72
  73. Lệnh continue • Dùng để nhảy qua(skip) vòng lặp (for, while, do-while, ) • Lệnh continue cũng có 2 dạng: – Unlabeled form – Labeled form 7/5/2021 73
  74. Unlabeled form public static void main(String[] args) { StringBuffer searchMe = new StringBuffer("peter piper picked a peck of pickled peppers"); int max = searchMe.length(); int numPs = 0; System.out.println(searchMe); for (int i = 0; i < max; i++) { // interested only in p's if (searchMe.charAt(i) != 'p') continue; Unlabeled form // process p's numPs++; searchMe.setCharAt(i, 'P'); } System.out.println("Found " + numPs + " p's in the string."); System.out.println(searchMe); } 7/5/2021 74
  75. Labeled form public static void main(String[] args) { // finds a substring(substring) in given string(serchMe) String searchMe = "Look for a substring in me"; String substring = "sub"; boolean foundIt = false; int max = searchMe.length() - substring.length(); test: for (int i = 0; i <= max; i++) { int n = substring.length(), j = i, k = 0; while (n != 0) { if (searchMe.charAt(j++) != substring.charAt(k++)) continue test; Labeled form } foundIt = true; break test; } System.out.println(foundIt ? "Found it" : "Didn't find it"); } 7/5/2021 75
  76. Lệnh return (1) • Lệnh return có 2 dạng: – Trả về 1 giá trị: • return ++count; • Giá trị trả về phải phù hợp với kiểu trả về của hàm – Không trả vè giá trị nào cả: • return; • Kiểu trả về của hàm phải là void 7/5/2021 76
  77. Lệnh return (2) public boolean seachFirst() { public void displayDayOfWeek(int day) { int[] array = { 10, 5, 9, 3, 8, 5, 8, 5 }; if (day == 1) { int matchValue = 8; System.out.println("Sunday"); for (int i = 0; i < array.length; i++) { return; if (matchValue == array[i]) } return true; if (day == 2) { } System.out.println("Monday"); return false; return; } } if (day == 3) { System.out.println("Tueday"); return; } Trả về giá trị boolean } Không trả về giá trị 7/5/2021 77
  78. Try-catch-finally (1) • Sử dụng khối try, catch, finally để bắt giữ các ngoại lệ Khối lệnh có thể ném ngoại lệ Khối lệnh sẽ thực hiện nếu ngoại lệ xảy ra Khối lệnh sẽ thực hiện bất chấp ngoại lệ xảy ra hay không 7/5/2021 78
  79. Try-catch-finally (2) public static void method(String s) { try { System.out.println(Integer.parseInt(s)); } catch (NumberFormatException e) { System.out.println("wrong fomat"); } } 7/5/2021 79
  80. Tóm tắt dạng câu hỏi  Liệt kê 6 kiểu số cơ bản của Java và số bit bộ nhớ sẽ chiếm dụng của chúng khi lưu trữ trị.  Kiểu luận lý (logic) trong java tên là gì?  Kiểu ký tự tên là gì? chiếm mấy byte?  Biến là gì? Hãy cho biết 3 tính chất của biến.  Hãy liệt kê 4 loại toán tử trong java.  Hãy cho biết kết qủa của biểu thức sau :  a) 4 && 7 b) 4&7 c) 0 || 8 d) 0 | 8 e) 8 ^ 3  f) 4 >> 3 g) 9 >3) ? 5 : -3  Trong java có phát biểu goto hay không ?  Mảng là gì ? Mảng in-line là gì ?  int a[] = new int { 1,2,3,9,0}; đúng hay sai?  System.out.println( 12 & 9); sẽ xuất trị bao nhiêu?  Phân tích dòng code: if (5&7>0 && 5|3) System.out(“Hello”) ;  int m= System.in.read(); nếu gõ vào phím ‘C’, trị biến m là bao nhiêu? 7/5/2021 80
  81. Bài tập  Viết các chương trình sau:  Xuất bảng cửu chương từ 2 đến 9.  Xuất trị bình phương, lập phương từ 1 đến 10.  Tạo 1 mảng số int dạng in-line 10 phần tử, xuất mảng này tăng dần.  Nhập 1 mảng int các số mang trị là mã của các ký tự nhập từ bàn phím. Xuất mảng này dạng chữ rồi xuất mã của chúng.  Xuất 100 số Fibonacci đầu tiên. Dãy Fibonacci : 1,1,2,3,5,8, 2 số đầu là 1, các số sau bằng tổng 2 số trước nó. 7/5/2021 81
  82. Bài tập • Mô phỏng các phương thức trong lớp String với mỗi String là một mảng các kí tự (char[]) (MyString) • Mô phỏng StringTokenizer và các phép toán trong đó. • Thực hiện lớp MyDate để lưu trữ ngày tháng năm với 1 số int duy nhất 7/5/2021 82
  83. Bài tập Class MyString{ private char[] content; public MyString(char[] con); public MyString(String s); public int indexOf(char c); public int lastIndexOf(char c); public int indexOf(String sub); public int lastIndexOf(String sub); public void insert(int index, String sub); public void replace(String old_s, String new_s); public void replaceAll(String old_s, String new_s); } 7/5/2021 83
  84. Bài tập public class StringAnalyzer { private String origin; private String delimiter; public StringAnalyzer(String origin, String delimiter) { . . . . . . } public boolean hasMoreElement(){ . . . . . . } public String getNextElement(){ . . . . . . } } 7/5/2021 84