Bài giảng Lập trình hướng đối tượng - Chương 2: Ngôn ngữ lập trình Java - Trần Minh Thái

Lịch sử ngôn ngữ Java Giới thiệu các IDE cơ bản Cách biên dịch và chạy chương trình Java Các kiểu dữ liệu và cấu trúc dữ liệu cơ bản trong Java Phương thức trong Java Khai báo phương thức Phương thức tĩnh Nạp chồng các phương thức

pptx123 trang | Chia sẻ: candy98 | Lượt xem: 519 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng - Chương 2: Ngôn ngữ lập trình Java - Trần Minh Thái, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2. Ngôn ngữ lập trình JavaTRẦN MINH THÁIEmail: minhthai@huflit.edu.vnWebsite: www.minhthai.edu.vn Cập nhật: 11 tháng 05 năm 2016LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (Object Oriented Programming)Nội dungLịch sử ngôn ngữ JavaGiới thiệu các IDE cơ bảnCách biên dịch và chạy chương trình JavaCác kiểu dữ liệu và cấu trúc dữ liệu cơ bản trong JavaPhương thức trong JavaKhai báo phương thứcPhương thức tĩnhNạp chồng các phương thức Cơ bản về ngôn ngữ JavaLịch sử ngôn ngữ JavaJames Gosling và nhóm kỹ sư của Sun Microsystems bắt đầu dự án ngôn ngữ Java vào tháng 6 năm 1991 để lập trình điều khiển các thiết bị điện tử (tivi, máy giặt, tủ lạnh, ) Ngôn ngữ nhanh, gọn, hiệu quả và độc lập thiết bịRa đời 1995, tên gọi ban đầu “Oak” sau đó đổi tên thành “Java”Kế thừa cú pháp của C & đặc trưng Hướng đối tượng của C++Lịch sử ngôn ngữ JavaTháng 6/1995 Sun giới thiệu ngôn ngữ Java (Java 1.0)13/11/2006, Sun phát hành Java với phần lớn miễn phí và phần mềm mã nguồn mở theo các điều khoản GNU, General Public License (GPL)Ngày 08/05/ 2007, Sun cung cấp miễn phí code lõi của Java và open-sourceLịch sử ngôn ngữ JavaCác phiên bảnNền tảng J2SE (Java Standard Edition) tiêu chuẩnNền tảng J2EE (Java Enterprise Applications Edition) cho các ứng dụng doanh nghiệpNền tảng J2ME (Java Mobile Applications Edition) cho các ứng dụng di độngNgôn ngữ JavaLà một ngôn ngữ hướng đối tượng (Object Oriented Programming) đầy đủ: không thể viết theo hướng thủ tụcCho phép tạo Application hoặc Applet (chạy trên trình duyệt có hỗ trợ Java)Sử dụng 2 cơ chế: Interpreter | CompilerViết một lần (Write Once), Chạy ở mọi thiết bị khác nhau (Run Anywhere)Đặc điểm ngôn ngữ JavaĐơn giản (Simple)Hoàn toàn hướng đối tượng (Object Oriented)Độc lập phần cứng và hệ điều hành (Platform independent)Bảo mật (Secure)Mạnh mẽ (Robust)Đa luồng (Multithreading)Hiệu suất cao (High performance)Phân tán (Distributed)Linh động (Dynamic) Đặc điểm ngôn ngữ JavaĐơn giản: Java được thiết kế để dễ học, quen thuộc. Nếu hiểu được những khái niệm cơ bản về OOP, sẽ dễ dàng làm chủ JavaLoại bỏ những đặc trưng phức tạp:Con trỏĐịnh nghĩa chồng toán tửĐa kế thừa thay bằng interfaceLoại bỏ struct và unionĐặc điểm ngôn ngữ JavaHướng đối tượng: Mọi thứ là một đối tượng. Java có thể dễ dàng mở rộng kể từ khi nó được dựa trên mô hình đối tượngĐộc lập phần cứng và hệ điều hành: Khi Java được biên dịch, nó không được biên dịch vào một nền tảng cụ thể mà là bytecode. Bytecode này được thông dịch bởi máy ảo (JVM) tùy vào nền tảng mà nó đang thực thi  Không cần biên dịch lại mã nguồnĐặc điểm của ngôn ngữ JavaBảo mật: Quản lý thực thi chương trình ở nhiều mứcDữ liệu và phương thức được đóng gói bên trong lớpTrình biên dịch kiểm soát mã an toàn và kiểm soát tuân thủ đúng quy tắc của JavaTrình thông dịch kiểm soát bytecode đảm bảo quy tắc an toàn trước khi thực thiKiểm soát việc nạp vào bộ nhớ, giới hạn truy xuất trước khi nạp vào hệ thốngĐặc điểm của ngôn ngữ JavaMạnh mẽ: Java nỗ lực loại trừ tình huống dễ bị lỗi bằng cách nhấn mạnh chủ yếu vào việc kiểm tra lỗi thời điểm biên dịch và thực thiKhai báo kiểu dữ liệu tường minhKhông dùng con trỏ và phép toán con trỏKiểm soát việc truy xuất ngoài phạm vi dữ liệu mảngCấp phát và giải phóng bộ nhớ được thực hiện tự động (garbage collection)Cơ chế bẫy lỗi giúp kiểm soát và đơn giản trong xử lý lỗi và phục hồi sau lỗiĐặc điểm của ngôn ngữ JavaĐa luồng: Có thể viết chương trình có thể làm nhiều việc cùng một lúc. Cho phép các nhà phát triển xây dựng các ứng dụng tương tác chạy đồng thời & đồng bộHiệu suất cao: Với việc sử dụng các trình biên dịch Just-In-Time (bytecode  machine code)Phân tán: Java được thiết kế để hỗ trợ ứng dụng chạy trên mạng, cho môi trường phân tán, chạy trên nhiều nền khác nhau của InternetĐặc điểm của ngôn ngữ JavaLinh động: Java được coi là linh động hơn so với C hoặc C++ vì nó được thiết kế để thích ứng với môi trường phát triển mởCác chương trình Java có thể xử lý số lượng lớn thông tin thực thi mà có thể được dùng để xác minh và giải quyết các truy cập đến các đối tượng trong thời gian thực thiCác thành phần trong môi trường JavaJava languageBytecode definitionsJava/ Sun Class librariesThe Java Virtual Machine (JVM)The structure of .class fileJVM?Java Bytecode (file.class)JVM (java.exe)OSHardwareplatformChương trình Java (file.java)javac.exe : compilerDùng cơ chế Just-In-Time thông dịch bytecode thành lệnh máy cụ thểJava Run-time Environment (JRE) Compile-TimeJava Run-time Environment (JRE) Run-TimeJava Development Kit - JDKGồm 4 thành phần (download: ClassesCompilerDebuggerJava Runtime EnvironmentCác công cụ chính trong JDKTrong thư mục BIN của JDK có:Javac (Java Compiler): Dịch source code  Independent Bytecodejava : Thực thi class file trong JVMappletviewer : cho phép chạy applet mà không cần BrowserCác IDE cơ bảnNetbeans: miễn phí và open-source open-source Thiết lập môi trường làm việc cho Java sau khi cài đặt, ví dụWindows: Thêm vào Path ‘c:\Program Files\java\jdk\bin’Trong Linux, UNIX, Solaris, FreeBSD: Thêm vào cuối file .bashrc: ‘export PATH=/path/to/java:$PATH' Kiểm tra xem cài đặt thành công?  dùng lệnh javac -version java -versionSử dụng IDE EclipseTạo mới ProjectSử dụng IDE EclipseTạo mới ProjectĐặt tên ProjectChọn FinishSử dụng IDE EclipseTạo mới classSử dụng IDE EclipseTạo mới classChọn/ tạo PackageĐặt tên ProjectChọn FinishSử dụng IDE EclipseSử dụng IDE EclipseViết codeSử dụng IDE EclipseBiên dịch và chạy chương trình Java bằng lệnhDùng lệnh trong Command line (Windows) hay Terminal (Linux) - Biên dịch javac ViDu.java - Thực thi chương trình java ViDuVí dụ file ViDu.java lưu tại đường dẫnC:\Users\Minh-Thai\workspace\JavaProgramming\src\minhthai\oopTừ khoá vs Định danhTừ khoá (keyword): Là những từ được Java quy định ý nghĩa và cách sử dụngĐịnh danh (identifier): Tất cả thành phần của Java phải đặt tên (định danh) như class, biến, phương thức, Quy định với định danh:Không đặt trùng với từ khóaKhông bắt đầu bằng chữ sốKý tự được phép sử dụng: chữ cái, chữ số, $, _Phân biệt chữ hoa, chữ thườngage, $salary, _value, __1_value123abc, -salaryKeywordabstractassertbooleanbreakbytecasecatchcharclassconstcontinuedefaultdodoubleelseenumextendsfinalfinallyfloatforgotoifimplementsimportinstanceofintinterfacelongnativenewpackageprivateprotectedpublicreturnshortstaticstrictfpsuperswitchsynchronizedthisthrowthrowstransienttryvoidvolatilewhile  Cách đặt tên trong JavaPhân biệt hoa thường (Case Sensitivity): Hello  helloTên lớp: Ký tự đầu của mỗi từ phải viết IN HOA Ví dụ: class MyFirstJavaClassTên phương thức: từ đầu viết chữ thường, những từ sau viết IN HOA ký tự đầu Ví dụ: public void myMethodName()Tên chương trình: Đặt tên trùng khớp với tên lớp Ví dụ: Lớp 'MyFirstJavaProgram’ sẽ được lưu là 'MyFirstJavaProgram.java'Hằng số viết IN HOA Ví dụ: MAX_LINECác kiểu dữ liệu cơ bảnBiến là một mục dữ liệu được đặt tênCách khai báo một biến: type name [= ]; byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE; float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; char aChar = 'S'; boolean aBoolean = true;Các kiểu dữ liệu cơ bảnKeywordMô tảKích thướcIntegersbyteByte-length integer8-bit two’s complementshortShort integer16-bit two’s complementintInteger32-bit two’s complementlongLong integer64-bit two’s complementReal numbersfloatSingle-precision floating point32-bit IEEE 754doubleDouble-precision floating point64-bit IEEE 754Other typescharA single character16-bit Unicode characterbooleanA boolean value (true/false)true or falseCác kiểu dữ liệu cơ bảnLiteral ValueKiểu dữ liệu178int8864Llong37.266double37.266Ddouble87.363Ffloat26.77e3double‘c’chartruebooleanfalsebooleanPhạm vi của biếnKhai báo biến hằngGiá trị của biến này không thể thay đổi sau khi khởi tạoKhai báo: final type variable [= ];Ví dụ: final int aFinalVar = 0; final int blankFinal; blankFinal = 0;Mọi thay đổi biến final sau khi đã khởi tạo sẽ phát sinh lỗi compile timePhép toán số họcOperatorSử dụngMô tả+op1 + op2Cộng; nối xâu (String)-op1 – op2Trừ*op1 * op2Nhân/op1 / op2Chia%op1 % op2Phép lấy phần dư của op1 / op2Chú ý với phép toán %: Dùng cho cả số thựcQuy tắc: a % b = (dấu của a) abs(a) % abs(b);Ví dụ: -5 % 3 = -2; -5 % -3 = -2; 5 % 3 = 2; 5 % -3 = 2Phép toán một ngôi (Unary)OperatorSử dụngMô tả++opTrả về kết quả int nếu op kiểu byte, short, char--opTrả về kết quả đảo dấu của opPhép toán số học (viết tắt)OperatorSử dụngMô tả++op++Tăng op lên 1; trả về giá trị của op trước khi tăng++++opTăng op lên 1; trả về giá trị của op sau khi tăng--op--Giảm op đi 1; trả về giá trị của op trước khi giảm----opGiảm op đi 1; trả về giá trị của op sau khi giảmVí dụ 1: a = 5; b = a++ + ++a + a++; //a = ?, b = ?;Ví dụ 2: a = 5; b = a-- + ++a + a++; //a = ?, b = ?;Phép toán quan hệOperatorSử dụngMô tả>op1 > op2Trả về true nếu op1 lớn hơn op2>=op1 >= op2Trả về true nếu op1 lớn hơn hoặc bằng op2>op1 >> op2Dịch phải op1 op2 bits. Lấp đầy bên bên trái bằng bit dấu (Signed right shift).>>>op1 >> op2Dịch phải op1 op2 bits. Lấp đầy bên trái bằng 0 (Unsigned right shift).Ví dụ: 13 >> 1: 6; -13 >> 1: -6; -13 >>> 1: 2147483641; 1 1, 1->0). Chỉ áp dụng cho kiểu integral.Phép toán gánOperatorSử dụngMô tả=op1 = op2Gán giá trị op2 cho op1. Trả về giá trị của op1 sau khi gán.op=op1 op= op2Viết tắt của op1 = op1 op op2. Có một lợi thế: không phải ép kiểu.op có thể là: +, -, *, /, %, &, |, ^, >, >>>Lợi thế không phải ép kiểu: byte a = 2; a = (byte)(a + 3); Viết gọn: a += 3;Các phép toán khácOperatorSử dụngMô tả?:op1 ? op2 : op3Nếu op1 true, trả về op2; ngược lại trả về op3.[]Dùng cho arraySử dụng khai báo, khởi tạo, truy cập phần tử mảng..Dùng cho đối tượngTruy cập variables, methods của đối tượng, class.(params)Dùng trong methodsKhai báo danh sách các biến.(type)(type)opÉp kiểunewTạo đối tượngTạo đối tượng/array mới.instanceofop1 instanceof op2Return true nếu op1 là một thể hiện của op2. (op2 là class type, interface type, array type).Biểu thứcBiểu thức là một chuỗi các biến, toán tử, lời gọi phương thức được tạo thành theo đúng cú pháp của ngôn ngữ. Kết quả trả về một giá trịVí dụ: aChar = ‘S’, “The string “ + “value”, Character.isUpperCase(aChar)Thứ tự lượng giá các toán hạng trong biểu thức: từ trái -> phải. Sau đó phép toán được thực hiện dựa trên thứ tự tính toán của toán tử. Ví dụ:int[] a = {4, 4}; int b = 1; a[b] = b = 0; Dòng 3: a[1] = b = 0;Thứ tự ưu tiên các toán tửNhómToán tửUnary++ -- + - ! ~ (type)Arithmetic* / % + -Shift> >>>Comparison >= instanceof == !=Bitwise& ^ |Short-circuit&& ||Condition?:Assignment= op=Lệnh (statement)Câu lệnh tương đương với một câu trong ngôn ngữ tự nhiên. Câu lệnh tạo nên một đơn vị thực thi đầy đủ.Những biểu thức sau đây có thể tạo thành câu lệnh bằng cách bổ sung dấu (;) vào cuối biểu thức:Những biểu thức gán: a = ‘S’;Biểu thức sử dụng ++, --: a++;Gọi phương thức: System.out.println(“String”);Tạo đối tượng: Integer obj = new Integer(4);Câu lệnh khai báo: double aValue = 933.24;Câu lệnh điều khiển: for, if, while, do while, switch, return, break, continueHiển thị dữ liệuSystem.out.println(): Hiển thị dữ liệu và xuống dòng System.out.print(): Hiển thị dữ liệu System.out.printf(): Hiển thị dữ liệu có định dạng System.out.format(): Hiển thị dữ liệu có định dạngDùng toán tử + để nối các dữ liệu khi hiển thịCác định dạng dữ liệuDạng Boolean: %b Dạng ký tự: %c Dạng số nguyên: %d Dạng số thực: %f Dạng xâu ký tự: %sNhập dữ liệu từ bàn phím – java.io.*1. Đọc dữ liệu vào bộ đệm: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 2. Chuyển dữ liệu từ bộ đệm vào xâu String str = br.readLine(); 3. Chuyển dữ liệu từ xâu thành giá trị:Integer.parseInt(str) Long.parseLong(str) Float.parseFloat(str) Double.parseDouble(str)Nhập dữ liệu từ bàn phím – java.io.*Nhập dữ liệu từ bàn phím – java.util.ScannerCấu trúc lệnh điều khiển trong JavaKhối lệnh (Blocks)Là một nhóm chứa 0 hoặc nhiều lệnh được đặt trong cặp {}Thực hiện một cách tuần tựCó thể được sử dụng ở bất kỳ nơi nào mà lệnh đơn có thể sử dụngPhạm vi của biến:Biến chỉ có phạm vi sử dụng trong khối lệnh đã khai báoVới các khối lệnh lồng nhau có khai báo biến trùng tên, biến ở khối lệnh trong được ưu tiênKhối lệnh – Ví dụ phạm vi biến{ int n = 0; n = n + 1; //n = 1 { int n = 10, m = 10; n = m + 1; //n = 11 } m = m + 1; //Sai cú pháp}Lệnh có cấu trúcLặpwhiledo...whileforRẽ nhánhifif...elseswitchcaseCấu trúc rẽ nhánh ifif (bt điều kiện){ //Nếu điều kiện đúng khối lệnh;}Cấu trúc rẽ nhánh ifelseif (bt điều kiện){ //Nếu điều kiện đúng khối lệnh 1;} else { //Nếu điều kiện sai khối lệnh 2;}Cấu trúc rẽ nhánh ifelseCấu trúc rẽ nhánh if, ifelseÁp dụng:Cho bài toán kiểm tra số chính phươngĐầu vào: số nguyên nĐầu ra: cho biết n là chính phương (căn bậc 2 của n là nguyên) hay không?Cấu trúc rẽ nhánh ifelse lồng nhauif (bt điều kiện 1){ //Nếu điều kiện 1 đúng khối lệnh 1;} else if (bt điều kiện 2){ //Ngược lại, nếu điều kiện 2 đúng khối lệnh 2;}else if (bt điều kiện N){ //Ngược lại, nếu điều kiện N đúng khối lệnh N;} else{ //Không điều kiện nào thoả khối lệnh cho trường hợp còn lại;}Cấu trúc rẽ nhánh ifelse lồng nhauXếp loại học tập cho học sinh theo bảng sauĐiểm trung bình (dtb)Xếp loạiDưới 5.0KémTừ 5.0 đến dưới 7.0Trung bìnhTừ 7.0 đến dưới 8.oKháTrên 8.0GiỏiCấu trúc rẽ nhánh ifelse lồng nhauCấu trúc rẽ nhánh if..else lồng nhauÁp dụng Cho bài toán giải phương trình bậc nhấtĐầu vào: số nguyên a và bĐầu ra: nghiệm của phương trình bậc nhất: ax + b = 0Cấu trúc switch..caseswitch (biểu thức){ case giá trị 1: khối lệnh 1; break; case giá trị 2: khối lệnh 2; break; ... case giá trị N: khối lệnh N; break; default: khối lệnh cho trường hợp còn lại (nếu có) }biểu thức phải trả về kiểu dữ liệu byte, short, char int, String giá trị có kiểu byte, short, char int, String break thoát khỏi switchCấu trúc switchcase – Ví dụswitch (number){ case 1: System.out.print(“One”); break; case 2: System.out.print(“Two”); break; case 3: System.out.print(“Three”); break; default: System.out.print(“I don’t know.”); }Cấu trúc switchcaseÁp dụng: Cho bài toán đọc một số nguyên gồm 3 chữ số Đầu vào: số nguyên n gồm 3 chữ sốĐầu ra: số n ghi bằng chữCấu trúc switchcaseÁp dụng: Cho bài toán kiểm tra kết hợp 3 giá trị ng, th, và nm có phải là ngày/tháng/năm (ng/th/nm) hợp lệĐầu vào: ng, th, nmĐầu ra: ng/th/nm: hợp lệ/ không hợp lệ?Cấu trúc lặp while, dowhilewhile (bt điều kiện) { khối lệnh;}Lặp khi điều kiện còn đúng. Kiểm tra điều kiện trước khi thực hiện lệnh (có thể không thực hiện lệnh lần nào)do { khối lệnh;} while(bt điều kiện);Lặp khi điều kiện còn đúng. Kiểm tra điều kiện sau khi thực hiện lệnh (thực hiện ít nhất 1 lần)Cấu trúc lặp while, dowhileKết quảCấu trúc lặp while, dowhileKết quảwhile vs dowhileNếu dùng whileNếu dùng dowhileCấu trúc lặp while, dowhileÁp dụng:Cho bài toán tính giai thừa của số nguyênĐầu vào: số nguyên nĐầu ra: tính n!Sử dụng cấu trúc while và dowhileCấu trúc lặp forfor (bt khởi tạo; điều kiện lặp; bước nhảy) { khối lệnh;}bt khởi tạo và bước nhãy có thể chứa nhiều biểu thức ngăn cách bởi dấu phẩy (,)Cấu trúc lặp forÁp dụng: Viết lại bài toán tính giai thừa dùng cấu trúc lặp forCấu trúc lặp for dùng cho mảng và tập hợpfor (biến để chứa giá trị phần tử : tên mảng/ tập hợp) { khối lệnh xử lý giá trị phần tử;}Ví dụ: int[] a = {4, 3, 2, 1}; for(int ai : a) { System.out.println(ai); }Thay đổi cấu trúc lặp break, continue, returnbreak dùng để kết thúc vòng lặp for, while, do while break [label];continue dùng để bỏ qua vòng lặp hiện tại continue [label];return thoát khỏi phương thức và trả về giá trị (nếu có) return giá trị/ biểu thức trả về giá trị;Thay đổi cấu trúc lặp break, continue, returnint sum = 0; outer: for(int i = 0; i cấp bộ nhớ char ch[] = new char [5];Định nghĩa và khởi tạo ban đầu (in-line initialization): int a[] = { 1, 4, 12, 7, 8}; //hoặc int [] a = { 1, 4, 12, 7, 8};Giá trị141278Chỉ số01234Mảng 1 chiềuChỉ khai báo: không chỉ định size: long a[]; Khi sử dụng phải cấp bộ nhớ: a = new long [20]; Trị mặc định: Toán tử new sẽ xóa bộ nhớ, các giá trị = 0!!! Sau khi chỉ định kích thước thì kích thước này sẽ không đổi (thuộc tính length của mảng)Ví dụ tìm max trong mảng 1 chiềuBài tậpViết chương trình xoá phần tử có giá trị x nếu cóĐầu vào: mảng 1 chiều số nguyên a, số nguyên xĐầu ra: mảng sau khi xoá x (nếu có)xuất mảng theo giá trị tăng dầnMảng 2 chiềuLà một bảng gồm có sd dòng và sc cộtKhai báo: dataType arrayName[sd][sc]; hoặc dataType arrayName[][]; //Cấp phát số dòng //và số cột trước khi sử dụng Ví dụ:int a[5][4];//5 dòng, 4 cộtint b[][]; b = new int[5][4];CộtDòngMảng 2 chiềuKhai báo và khởi tạo giá trị ban đầu: int a[5][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}, {17, 18, 19, 20}}; //Có thể không cần chỉ định //số dòng và số cột cho //trường hợp này1234567891011121314151617181920CộtDòngMảng 2 chiềuTruy xuất giá trị của phần tử: arrayName[csd][csc] Trong đó:csd: chỉ số dòngcsc: chỉ số cộtCả hai chỉ số này tính từ 0Ví dụ int x = a[3][2]; //x = 151234567891011121314151617181920CộtDòngMảng 2 chiềuBài tậpCho bài toán nhập vào ma trận đối xứng cho đồ thị vô hướng có trọng sốĐầu vào: số đỉnh của đồ thị (n)Đầu ra: ma trận đối xứngXâu ký tự - StringLà một lớp trong JavaKhai báoString variable = new String(literalString);String varialbe = new String(char[] charArr)HoặcString variable = literalString;Trong đó:variable: biếnliteralString: Giá trị hằng xâu ký tựcharArr: Mảng ký tựVí dụ:String myUniversity = “PTIT”;Các phương thức của StringPhương thứcÝ nghĩaVí dụchar charAt(int index)trả về ký tự có chỉ số index (Chỉ số bắt đầu từ 0)String s = "Lap trinh Java"; char ch = s.charAt(5); //ch = ‘r’String toLowerCase()chuyển thành chữ thườngString s = "Lap trinh Java"; String s1 = s.toLowerCase();//s1 = “lap trinh java”String toUpperCase()chuyển thành chữ hoaString s = "Lap trinh Java"; String s1 = s.toUpperCase();//s1 = “LAP TRINH JAVA”Các phương thức của StringPhương thứcÝ nghĩaVí dụint compareTo(String anotherString)so sánh hai xâu theo thứ tự từ điển (ưu tiên chữ thường)= 0: 2 xâu giống nhau 0: xâu lớn hơn anotherStringString s1 = "Lap trinh Java"; String s2 = "Huong doi tuong";String s3 = "lap trinh java"; int n1 = s1.compareTo(s2); //n1>0int n2 = s1.compareTo(s2);//n2b) min = b; return min; }Gọi phương thứcPhương thức không trả về giá trị tenPhuongThuc(ds tên đối số); Ví dụ gọi hàm nhập mảng số nguyên a, kích thước n: nhapMang(a, n);Phương thức trả về một giá trị kieuTraVe bien = tenPhuongThuc(ds tên đối số); Ví dụ gọi hàm tìm giá trị min của mảng a, kích thước n: int giaTriMin = timMin(a, n);Truyền tham số bởi giá trịTruyền tham số biến (var-args)Cho phép truyền một số các giá trị cùng kiểu cho tham số biến. Tham số biến của phương thức được khai báo theo cú pháp (phải đặt cuối cùng trong ds tham số và duy nhất)kieuDuLieutenThamSoVí dụ public static int timMin(intdsSo){ }Gọi phương thức int gtMin = timMin(5, 7, 9, 20);Hoặc int gtMin = timMin(new int[]{5, 7, 9, 20});Truyền tham số biếnPhương thức tĩnhPhương thức thuộc lớp chứ không phải đối tượng của lớpĐược gọi trực tiếp mà không cần tạo một instance của lớpKhông thể truy cập thành viên dữ liệu non-static và gọi trực tiếp phương thức non-staticSử dụng từ khoá static trước tên phương thứcNạp chồng phương thứcKhi một lớp có hai hoặc nhiều phương thức cùng tên nhưng khác nhau về tham sốVí dụ: public static int timMin(int a, int b){ } public static double timMin(double a, double b){ }Nạp chồng phương thứcXử lý ExceptionException là một loại lỗi đặc biệt xuất hiện vào lúc thực thi chương trình (run-time)Các trạng thái không bình thường xảy ra trong khi thi hành chương trình  tạo ra các ExceptionNếu không xử lý các trạng thái này thì chương trình có thể bị kết thúc đột ngộtVí dụ chia cho 0, nhập sai định dạng, mở file không tồn tại, tràn bộ nhớ, Một số ngoại lệ cơ bảnNgoại lệÝ nghĩaRuntimeExceptionLớp cơ sở cho nhiều ngoại lệ java.langArthmeticExceptionLỗi về số học, ví dụ như ‘chia cho 0’IllegalAccessExceptionLớp không t