Một kiểu có thể là bất biến hoặc có thể thay đổi Đối tượng của kiểu bất biến không thay đổi giá. trị sau khi chúng được tạo ra[r]
Trang 1LẬP TRÌNH JAVA
Bài 7 : Các lớp tiện ích
Trang 2Mục tiêu
Kết thúc bài học bạn có thể nắm được:
Sử dụng các lớp wrapper nguyên thủy
Làm việc với các xâu ( String )
Giải thích sự khác biệt giữa các lớp String
và StringBuffer
Trình bày được về các lớp tiện ích khác như
Math, System
Trang 3Nội dung
7.1 Các lớp bao (Wrapper class)
7.2 Xâu (String và StringBuffer)
7.3 Lớp System
7.4 Mảng
Trang 47.1 Các lớp bao
Các kiểu dữ liệu nguyên thủy không có các
phương thức liên quan đến nó.
Mỗi kiểu dữ liệu nguyên thủy có một lớp tương ứng gọi là lớp bao:
Các lớp bao sẽ “gói” dữ liệu nguyên thủy và cung cấp các phương thức thích hợp cho dữ liệu đó.
Mỗi đối tượng của lớp bao đơn giản là lưu trữ một biến đơn và đưa ra các phương thức để xử lý nó.
Các lớp bao là một phần của Java API
Trang 57.1 Các lớp bao
Trang 67.1 Các lớp bao
Chuyển đổi kiểu dữ liệu
Sử dụng toString() để chuyển các giá trị số thành xâu.
Sử dụng parse<type>() và valueOf() để chuyển xâu thành các giá trị số
Sử dụng các phương thức chuyển đổi rõ ràng
để chuyển giữa các kiểu dữ liệu số
Trang 77.1 Các lớp bao
Chuyển đổi kiểu dữ liệu
Trang 9System.out.println(d); // 2.147483647E9
Trang 107.1 Các lớp bao
Ví dụ
double number = Double.parseDouble("42.76");
String hex = Integer.toHexString(42);
double value = new Integer("1234").doubleValue();
String input = "test 1-2-3";
Trang 11Nội dung
7.1 Các lớp bao (Wrapper class)
7.2 Xâu (String và StringBuffer)
7.3 Lớp System
7.4 Mảng
Trang 12String c = new String();
String d = new String("Another String"); String e = String.valueOf(1.23);
String f = null;
Trang 137.2 Xâu
Ghép xâu:
Toán tử + có thể nối các String:
String a = "This" + " is a " + "String";
//a = “This is a String”
Các kiểu dữ liệu cơ bản sử dụng trong lời gọi
println() được chuyển đổi tự động sang kiểu Strings
System.out.println("answer = " + 1 + 2 + 3);
System.out.println("answer = " + (1+2+3));
Hai câu lệnh trên có in ra cùng một kết quả?
Trang 147.2 Xâu
Các phương thức của xâu:
String name = "Joe Smith";
"Joe Smith ".trim(); // "Joe Smith"
"Joe Smith".indexOf('e'); // 2
"Joe Smith".substring(5); // "mith"
"Joe Smith".substring(2,5); // "e S"
Trang 15String s1 = new String (“Hello”);
String s2 = new String (“Hello”);
(s1==s2) trả về false
Hello s1
s2
Hello
Trang 16 Kiểm tra tính tương đương
oneString.equalsIgnoreCase(anotherStri ng)
Kiểm tra KHÔNG xét đến ký tự hoa, thường
Trả về true hoặc false String name = "Joe";
if ("Joe".equals(name))
name += " Smith"; boolean same = "Joe".equalsIgnoreCase("joe");
Trang 17Indices
message.charAt(0) message.length() is 15 message.charAt(14)
Trang 197.2 Xâu
Tìm ký tự và chuỗi con:
Sử dụng các phương thức sau:
public int indexOf(int ch)
public int lastIndexOf(int ch)
public int indexOf(int ch, int fromIndex)
public int lastIndexOf(int ch, int endIndex)
public int indexOf(String str)
public int lastIndexOf(String str)
public int indexOf(String ch, int fromIndex)
public int lastIndexOf(String str, int
endIndex)
Trang 207.2 Xâu
Tìm ký tự và chuỗi con:
Ví dụ:
"Welcome to Java!".indexOf('W') returns 0
"Welcome to Java!".indexOf('x') returns -1
"Welcome to Java!".indexOf('o', 5) returns 9
"Welcome to Java!".indexOf("come") returns 3
"Welcome to Java!".indexOf("Java", 5) returns 11
"Welcome to Java!".indexOf("java", 5) returns -1
Trang 217.2 Xâu
Chuyển đổi ký tự và số thành chuỗi:
char[] chars = "Java".toCharArray();
String str = new String(new char[]
{'J','a','v','a'});
Lớp String cung cấp một số phương thức static
valueOf để chuyển đổi một ký tự, mảng ký tự, và các giá trị số thành chuỗi.
Những phương thức này có cùng tên valueOf với tham số khác nhau có kiểu char, char[], double,
long, int, và float.
String str = String.valueOf(5.44);
String str = String.valueOf(new char[]
{'J','a','v','a'});
Trang 227.2 Xâu
Kiểu bất biến và kiểu biến đổi
Một kiểu có thể là bất biến hoặc có thể thay đổi
Đối tượng của kiểu bất biến không thay đổi giá trị sau khi chúng được tạo ra
Ngược lại, đối tượng của kiểu biến đổi có thể thay đổi giá trị sau khi chúng được tạo ra.
String là kiểu bất biến, StringBuffer là kiểu biến đổi.
Trang 237.2 Xâu
String:
Các xâu của lớp String được thiết kế để
không thay đổi giá trị.
Khi các xâu được ghép nối với nhau một đối tượng mới được tạo ra để lưu trữ kết quả
Ghép nối xâu thông thường rất tốn kém
về bộ nhớ.
Trang 25 Dự đoán các ký tự trong xâu có thể thay đổi
Khi xử lý các xâu một cách linh động, ví dụ như đọc dữ liệu text từ một tệp tin.
Cung cấp các cơ chế hiệu quả hơn cho việc xây dựng, ghép nối các xâu
Trang 277.2 Xâu
public StringBuffer()
Xây dựng một string buffer rỗng có dung lượng = 16
public StringBuffer(int length)
Xây dựng một string buffer rỗng có dung lượng = length
public StringBuffer(String str)
Xây dựng một string buffer với nội dung là chuỗi str Dung lượng khởi tạo bằng 16 + str.length()
Trang 28String output = buffer.toString() ;
System.out.println(output); // "This is a String."
Trang 29 char charAt(int index)
boolean equals(Object anObject)
int indexOf(String str)
int length()
boolean matches(String regex)
String substring(int beginIndex, intendIndex)
String toUpperCase()
Trang 31Nội dung
7.1 Các lớp bao (Wrapper class)
7.2 Xâu (String và StringBuffer)
7.3 Lớp System
7.4 Mảng
Trang 327.3 Lớp System
Không cần/được khởi tạo đối tượng
Lớp System là lớp final, các phương thức
khởi tạo được khai báo là private.
Tất cả các thuộc tính và phương thức của
System đều được khai báo là static.
Trang 337.3 Lớp System
java.lang.System chứa nhiều hàm tiện ích hữu dụng
Kiểm soát vào ra (I/O) chuẩn
Các luồng InputStream in, PrintStream out và err là các thuộc tính của lớp System.
Có thể thiết lập lại nhờ các hàm setIn(), setOut() và setErr()
con với hiệu năng cao.
Trang 347.3 Lớp System
hiện tại theo millisecond
Virtual Machine
Các phương thức liên quan đến thuộc tính
của hệ thống: Lấy các thông tin thuộc tính
như phiên bản của Java Runtime
Environment version, thư mục cài đặt
Java,
Trang 357.3 Lớp System
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args) {
}
Trang 367.3 Lớp System
Trang 377.3 Lớp System
Các tham số dòng lệnh
Có thể truyền chuỗi cho phương thức main từ dòng lệnh khi chạy chương trình
Khi phương thức main được gọi, trình biên dịch Java tạo 1
mảng chứa các tham số dòng lệnh và truyền tham chiếu mảng cho args
class TestMain { public static void main(String[] args) {
}}
Trang 387.3 Lớp System
Các tham số dòng lệnh
Các chuỗi được truyền cho chương trình chính được chứa
trong args - là một mảng các chuỗi Các phần tử: args[0],
args[1], , args[n], tương ứng với arg0, arg1, , argn trong dòng lệnh
args.length là số chuỗi được truyền
Trang 41Nội dung
7.1 Các lớp bao (Wrapper class)
7.2 Xâu (String và StringBuffer)
7.3 Lớp System
7.4 Mảng
Trang 42boolean bit[] = new boolean[6];
reference Array or Object variableName
Trang 43tùy thuộc vào kiểu dữ liệu.
Luôn bắt đầu từ phần tử có chỉ số 0
Mỗi khi mảng được tạo, kích thước của nó được ấn định, không thể thay đổi.
Trang 447.4 Mảng
Tên của mảng (tất
cả các thành phần trong mảng có cùng tên, c)
Chỉ số (truy nhập đến các thành phần của mảng thông qua chỉ số)
c[ 0 ] c[ 1 ] c[ 2 ] c[ 3 ] c[ 4 ] c[ 5 ] c[ 6 ] c[ 7 ] c[ 8 ] c[ 9 ] c[ 10 ] c[ 11 ]
-45 6 0 72 1543 -89 0 62 -3 1 6453 78
c.length
c.length: cho biết độ dài của mảng c
Trang 467.4 Mảng
Khởi tạo mảng:
double[] myList = {1.9, 2.9, 3.4, 3.5};
Câu lệnh trên tương đương với các câu lệnh sau:
double[] myList = new double[4];
myList[0] = 1.9;
myList[1] = 2.9;
myList[2] = 3.4;
myList[3] = 3.5;
Trang 477.4 Mảng
Ví dụ:
int array[]; // khai báo
array = new int[10]; // tạo mảng
int array[] = {32,27,64,18,95,14,90,70,60,37};
Trang 487.4 Mảng
Ví dụ:
int MAX = 5;
boolean bit[] = new boolean[MAX];
float[] value = new float[2*3];
Trang 49Datatype identifier[]
= {value1,value2…valueN}; char ch [] = {‘A’,’B’,’C’,’D’};
khai báo mảng ch và
lưu 4 chữ cái kiểu ký tự
Trang 507.4 Mảng
Truyền mảng cho phương thức:
Java sử dụng truyền tham trị để truyền các tham số cho
phương thức Có nhiều sự khác nhau quan trọng khi truyền tham trị của biến có kiểu dữ liệu cơ sở và biến mảng
Với tham số kiểu dữ liệu cơ sở, giá trị thực được truyền Thay đổi giá trị của tham số cục bộ trong phương thức không làm thay đổi giá trị của biến bên ngoài phương thức
Với tham số kiểu mảng, giá trị của tham số chứa một tham
chiếu tới mảng; tham chiếu này được truyền cho phương thức Bất kỳ sự thay đổi nào xuất hiện trong thân phương thức sẽ làm thay đổi mảng gốc được truyền
Trang 527.4 Mảng
Copy mảng :
Contents
of list1 list1
Trang 537.4 Mảng
Copy mảng :
int[] sourceArray = {2, 3, 1, 5, 10};
int[] targetArray = new int[sourceArray.length];
for (int i = 0; i < sourceArrays.length; i++)
targetArray[i] = sourceArray[i];
Trang 557.4 Mảng
Mảng nhiều chiều:
Bảng với các dòng và cột
Thường sử dụng mảng hai chiều
Ví dụ khai báo mảng hai chiều b[2][2]
int b[][] = { { 1, 2 }, { 3, 4 } };
1 và 2 được khởi tạo cho b[0][0] và b[0][1]
3 và 4 được khởi tạo cho b[1][0] và b[1][1]
int b[3][4];
Trang 56Tên mảng Chỉ số cột