Chương 2: Cơ bản về ngôn ngữ Java Chương 2: Cơ bản về ngôn ngữ Java

GVLT: Trần Anh Dũng

1

Nội dung Nội dung

2

(cid:1) Biến & Hằng (cid:1) Kiểu dữ liệu (cid:1) Toán tử, biểu thức (cid:1) Các cấu trúc ñiều khiển (chọn, rẽ nhánh, lặp) (cid:1) Lớp bao kiểu cơ sở (cid:1) Phương thức và cách sử dụng (cid:1) Một số lớp cơ bản

Biến (1) Biến (1)

(cid:1) Biến? (cid:1) Tên biến: Phân biệt chữ hoa chữ thường (cid:1) Trong java, biến có thể ñược khai báo ở bất kỳ nơi ñâu

trong chương trình.

(cid:1) Khai báo dùng từ khóa public, hoặc ñặt chúng trong

(cid:1) Biến toàn cục:

(cid:1) Bắt buộc phải khởi tạo giá trị trước khi sử dụng.

3

một class (cid:1) Biến cục bộ:

Biến (2) Biến (2)

(cid:1) Cách khai báo biến:

;

= ;

(cid:1) Gán giá trị cho biến:

4

= ;

Biến (3) Biến (3)

(cid:1) Trong java nếu lúc khai báo không khởi tạo giá trị cho biến thì nó sẽ nhận 1 giá trị mặc ñịnh. Mỗi kiểu dữ liệu có 1 giá trị mặc ñịnh khác nhau. (cid:2) 0 nếu kiểu dữ liệu là kiểu số (cid:2) ‘\0’ nếu kiểu dữ liệu là ký tự (cid:2) false nếu kiểu dữ liệu là boolean (cid:2) null nếu kiểu dữ liệu là lớp

5

(cid:1) Lưu ý:

HằngHằng

(cid:1) Hằng? (cid:1) Tên ñặt theo qui ước như tên biến (cid:1) Khai báo dùng từ khóa final (cid:1) Ví dụ:

final int x = 10; // khai báo hằng số nguyên x = 10

final long y = 20; // khai báo hằng số long y = 20

6

(cid:1) Hằng ký tự: ñặt giữa cặp nháy ñơn ‘’ (cid:1) Hằng chuỗi: là một dãy ký tự ñặt giữa cặp nháy ñôi “”

Hằng ký tự ñặc biệt Hằng ký tự ñặc biệt

Ký tự

\b \t \n \r

7

\” \’ \\ \f \uxxxx Ý nghĩa Xóa lùi (BackSpace) Tab Xuống hàng Dấu enter Nháy kép Nháy ñơn \ ðẩy trang Ký tự unicode

Kiểu dữ liệu Kiểu dữ liệu

(cid:1) Array (cid:1) Class (cid:1) Interface

(cid:1) byte (cid:1) char (cid:1) boolean (cid:1) short (cid:1) int (cid:1) long (cid:1) float (cid:1) double

8

(cid:1) Kiểu dữ liệu cơ sở (primitive data type) (cid:1) Kiểu dữ liệu tham chiếu (reference data type)

Kiểu dữ liệu cơ sở Kiểu dữ liệu cơ sở

Type boolean

Size in bits Values

true or false

Standard

char

16

(ISO Unicode character set)

byte

8

short

16

int

32

long

64

float

32

(IEEE 754 floating point)

double

64

(IEEE 754 floating point)

[Note: The representation of a boolean is specific to the Java Virtual Machine on each computer platform.] '\u0000' to '\uFFFF' (0 to 65535) –128 to +127 (–27 to 27 – 1) –32,768 to +32,767 (–215 to 215 – 1) –2,147,483,648 to +2,147,483,647 (–231 to 231 – 1) –9,223,372,036,854,775,808 to +9,223,372,036,854,775,807 (–263 to 263 – 1) Negative range: –3.4028234663852886E+38 to –1.40129846432481707e–45 Positive range: 1.40129846432481707e–45 to 3.4028234663852886E+38 Negative range: –1.7976931348623157E+308 to –4.94065645841246544e–324 Positive range: 4.94065645841246544e–324 to 1.7976931348623157E+308

Fig. 4.16 The Java primitive types.

9

Kiểu dữ liệu cơ sở Kiểu dữ liệu cơ sở

(cid:1) 4 kiểu số nguyên khác nhau là: byte, short, int, long

(cid:1) Kiểu mặc ñịnh của các số nguyên là kiểu int

(cid:1) Không có kiểu số nguyên không dấu

(cid:1) Kiểu số nguyên

boolean b = false; if (b == 0){

Error?

System.out.println("Xin chao");

10

}

Chuyển ñổi kiểu dữ liệu Chuyển ñổi kiểu dữ liệu

(cid:1) Khi có sự không tương thích về kiểu dữ liệu (gán, tính

toán biểu thức, truyền ñối số gọi phương thức) (cid:1) Chuyển kiểu hẹp (lớn → nhỏ): cần ép kiểu

(cid:1) Chuyển kiểu rộng (nhỏ → lớn): tự ñộng chuyển

11

= (kiểu dữ liệu) ;

Kiểu dữ liệu tham chiếu (1) Kiểu dữ liệu tham chiếu (1)

(cid:1) Khai báo:

(cid:1) Kiểu mảng:

[ ] ; //mảng 1 chiều

[ ]; //mảng 1 chiều

[ ][ ] ; //mảng 2 chiều

12

[ ][ ]; //mảng 2 chiều

Kiểu dữ liệu tham chiếu (2) Kiểu dữ liệu tham chiếu (2)

(cid:1) Khởi tạo mảng:

int arrInt[ ] = {1, 2, 3};

char arrChar[ ] = {‘a’, ‘b’, ‘c’};

= {“ABC”, “EFG”, “GHI”};

String arrString[ ] (cid:1) Cấp phát & truy cập mảng:

int arrInt = new int[100];

int arrInt[100]; // Khai báo này trong Java sẽ báo lỗi.

Chú ý: Mảng trong java ñược xem là một ñối tượng

13

Chỉ số mảng n phần tử: từ 0 ñến n-1

Kiểu dữ liệu tham chiếu (3) Kiểu dữ liệu tham chiếu (3)

(cid:1) Thuộc tính length: Cung cấp số phần tử của mảng

(cid:1) Các hàm với mảng trong java

(cid:2) Ví dụ: int A[ ]={1, 2, 3, 4, 5};

(cid:1) Hàm System.arraycopy trong gói thư viện System

int a=A.length; khi ñó a=5.

(cid:2) Ví dụ:

int a[ ]={1, 3, 5, 7, 9, 11, 13, 15} int b[ ]={2, 4, 6, 8, 10, 12, 14} System.arraycopy(a, 3, b, 2, 4);

(cid:2) Kết quả của ñoạn mã lệnh trên là mảng b có giá trị

14

mới là {2, 4, 7, 9, 11, 13, 14}

Kiểu dữ liệu tham chiếu (4) Kiểu dữ liệu tham chiếu (4)

int b[ ][ ];

b = new int[ 3 ][ 4 ];

int b[ ][ ];

b = new int[ 2 ][ ];

b[ 0 ] = new int[ 5 ];

b[ 1 ] = new int[ 3 ];

int b[ ][ ] = { { 1, 2 }, { 3, 4 } };

int b[ ][ ] = { { 1, 2 }, { 3, 4, 5 } };

15

(cid:1) Kiểu mảng nhiều chiều:

Kiểu dữ liệu tham chiếu (5) Kiểu dữ liệu tham chiếu (5)

(cid:1) Khai báo ñối tượng

(cid:1) Kiểu ñối tượng:

(cid:1) Khởi tạo ñối tượng

;

(cid:1) Truy xuất thành phần ñối tượng

= new ;

.

16

.([tham số])

Một số toán tử (1) Một số toán tử (1)

(cid:1) Toán tử số học:

Toán tử

Ý nghĩa

+ - * / % ++ --

Cộng Trừ Nhân Chia nguyên Chia dư Tăng 1 Giảm 1

17

Một số toán tử (2) Một số toán tử (2)

Toán tử

Ý nghĩa

== != > < >= <= || && !

So sánh bằng So sánh khác So sánh lớn hơn So sánh nhỏ hơn So sánh lớn hơn hay bằng So sánh nhỏ hơn hay bằng OR (biểu thức logic) AND (biểu thức logic) NOT (biểu thức logic)

18

(cid:1) Toán tử quan hệ & logic:

Một số toán tử (3) Một số toán tử (3)

(cid:1) Toán tử gán:

Toán tử Ví dụ Ý nghĩa

= a = b gán a = b

+= a += 5 a = a + 5

-= b -= 10 b = b – 10

*= c *= 3 c = c * 3

/= d /= 2 d = d/2

19

%= e %= 4 e = e % 4

Một số toán tử (4) Một số toán tử (4)

(cid:1) Toán tử ñiều kiện:

<ñiều kiện> ? : < biểu thức 2>

int x = 10;

int y = 20;

int Z = (x

20

// Kết quả z = 30 do biểu thức (x < y) là ñúng.

Cấu trúc chọn Cấu trúc chọn

(cid:1) Cấu trúc ñiều kiện if … else

if (<ñiều_kiện>)

if (<ñiều_kiện>) {

{

;

;

}

} else {

;

}

21

Cấu trúc if…else Ví dụ -- Cấu trúc if…else Ví dụ

import java.util.Date;

public class TestIf{

public static void main( String args[ ] ){

Date today = new Date();

if ( today.getDay() == 0 )

System.out.println(“Hom nay la chu nhat”);

else

System.out.println(“Hom nay khong la CN" );

}

22

}

Cấu trúc chọn Cấu trúc chọn

(cid:1) Cấu trúc switch … case

switch (){

case :

; break;

…. case :

; break;

default:

;

23

}

Cấu trúc switch…case Ví dụ -- Cấu trúc switch…case Ví dụ

import javax.swing.JOptionPane;

public class TestSwitch

{

public static void main(String[] args)

{

char c;

String str=JOptionPane.showInputDialog(null,

"Nhap vao ky tu“, “Tieu de”, 0);

24

c = str.charAt(0);

Cấu trúc switch…case Ví dụ -- Cấu trúc switch…case Ví dụ

switch (c){

case 'a': case 'e': case 'i': case 'o': case 'u':

System.out.println("Ky tu nay la nguyen am");

break;

default:

System.out.println("Ky tu nay la phu am");

} System.exit(0); // kết thúc chương trình

}

25

}

Cấu trúc lặp Cấu trúc lặp

while (ñiều_kiện_lặp) do

{ {

khối _lệnh; khối_lệnh;

} } while (ñiều_kiện);

for (khởi_tạo_biến_ñếm;ñk_lặp;tăng_biến)

{

;

26

}

Cấu trúc lặp Ví dụ -- Cấu trúc lặp Ví dụ

//Chương trình tính tổng các số lẻ từ 1 ñến 100

public class TestFor{

public static void main(String[] args)

{

int tong = 0;

for ( int i=1; i<=100; i+=2)

tong+=i;

System.out.println(“Tong = ” + tong);

}

27

}

Cấu trúc lặp Ví dụ -- Cấu trúc lặp Ví dụ

// Tính tổng các số lẻ từ 1 ñến 100

int tong = 0, i = 1;

while (i<=100)

{

tong+=i;

i+=2;

}

28

System.out.println(“Tong = “ + tong);

Cấu trúc lệnh nhảy Cấu trúc lệnh nhảy

(cid:1) break (cid:1) continue (cid:1) label: Java dùng kết hợp nhãn (label) với từ khóa break và

continue ñể thay thế cho lệnh goto.

label1: for (…) {

for (…) {

if ()

break label1;

else

continue label1;

}

}

29

Ví dụ 1 Cấu trúc lệnh nhảy –– Ví dụ 1 Cấu trúc lệnh nhảy

import javax.swing.JOptionPane; public class BreakTest{

public static void main( String args[] ){

String output = ""; int count; for ( count = 1; count <= 10; count++ ){

if ( count == 5 )

break; // terminate loop

output += count + " ";

30

} ………………

Ví dụ 1 Cấu trúc lệnh nhảy –– Ví dụ 1 Cấu trúc lệnh nhảy

………….

output += "\nBroke out of loop at count = " + count;

JOptionPane.showMessageDialog( null,

output, "Thong bao",

JOptionPane.INFORMATION_MESSAGE);

System.exit( 0 ); // terminate application

}

31

}

Ví dụ 2 Cấu trúc lệnh nhảy –– Ví dụ 2 Cấu trúc lệnh nhảy

import javax.swing.JOptionPane; public class ContinueTest{

public static void main( String args[] ){

String output = ""; for ( int count = 1; count <= 10; count++ ) {

if ( count == 5 )

// if count is 5, continue; // skip remaining code in loop

output += count + " ";

} output += "\nUsed continue to skip printing 5"; JOptionPane.showMessageDialog( null, output ); System.exit( 0 );

}

}

32

Ví dụ 2 Cấu trúc lệnh nhảy –– Ví dụ 2 Cấu trúc lệnh nhảy

33

Sequence

Selection

if statement (single selection)

switch statement (multiple selection)

[t]

[t]

break

[f]

[f]

[t]

break

if else statement (double selection)

. . .

[f]

[t]

[t]

break

[f]

default

Repetition

do while statement

while statement

for statement

[t]

[t]

[f]

[t]

[f]

[f]

34

Lớp bao kiểu dữ liệu cơ sở Lớp bao kiểu dữ liệu cơ sở

(cid:1) Tồn tại các lớp ñối tượng tương ứng

Data type

Ghi chú

Wrapper Class (java.lang.*)

boolean

Boolean

byte

Byte

short

Short

char

Character

int

Integer

- Gói (package): chứa nhóm nhiều class. - Ngoài các Wrapper Class, gói java.lang còn cung cấp các lớp nền tảng cho việc thiết kế ngôn ngữ java như: String, Math, …

long

Long

float

Float

double

Double

35

Một số lớp cơ sở Một số lớp cơ sở

(cid:1) Các phương thức tiện ích:

(cid:1) Các lớp dữ liệu nguyên thủy cung cấp:

(cid:2) valueOf(String s): Trả ñối tượng thuộc kiểu tương

ứng

(cid:2) static parseType(String s): Trả giá trị nguyên thủy

(cid:1) Hằng số:

(cid:2) Type.MAX_VALUE, Type.MIN_VALUE (cid:2) Type.POSITIVE_INFINITY, Type.NEGATIVE_INFINITY

36

tương ứng

Lớp bao kiểu dữ liệu cơ sở Ví dụ -- Lớp bao kiểu dữ liệu cơ sở Ví dụ

class tong {

public static void main (String args[])

{

int i=0;

int tong=0;

for (i=0; i

tong += Integer.parseInt(args[i]);

System.out.print(“Tong = ” + tong);

}

37

}

Lớp Character Một số lớp cơ sở -- Lớp Character Một số lớp cơ sở

(cid:1) static boolean isUppercase(char ch)

(cid:1) static boolean isLowercase(char ch)

(cid:1) static boolean isDigit(char ch)

(cid:1) static boolean isLetter(char ch)

(cid:1) static boolean isLetterOrDigit(char ch)

(cid:1) static char toUpperCase(char ch)

(cid:1) static char toLowerCase(char ch)

38

(cid:1) Cung cấp một số phương thức:

Lớp Math Một số lớp cơ sở -- Lớp Math Một số lớp cơ sở

(cid:1) Math.E

(cid:1) Math.PI

(cid:1) Hằng số:

(cid:1) type abs(type)

(cid:1) double ceil(double), double floor(double)

(cid:1) int round(float), long round(double)

(cid:1) type max(type, type), type min(type, type)

(cid:1) double random(): Sinh số ngẫu nhiên trong ñoạn [0.0,1.0]

39

(cid:1) Các phương thức:

Lớp Math Một số lớp cơ sở -- Lớp Math Một số lớp cơ sở

(cid:1) double pow(double, double)

(cid:1) double log(double)

(cid:1) double sqrt(double)

(cid:1) Lũy thừa:

(cid:1) double sin(double)

(cid:1) double cos(double)

(cid:1) double tan(double)

40

(cid:1) Lượng giác:

Lớp Arrays Một số lớp cơ sở -- Lớp Arrays Một số lớp cơ sở

(cid:1) fill(): khởi tạo các phần tử của mảng với một giá trị như

(cid:1) Nằm trong gói java.util (cid:1) Cung cấp 4 phương thức static ñể làm việc với mảng

(cid:1) sort(): xắp xếp mảng

(cid:1) equals(): so sánh hai mảng

(cid:1) binarySearch(): tìm kiếm nhị phân trên mảng ñã sắp

nhau

41

xếp

Lớp String Một số lớp cơ sở -- Lớp String Một số lớp cơ sở

(cid:1) Khởi tạo:

(cid:1) String (String) (cid:1) String (StringBuffer) (cid:1) String (byte[]) (cid:1) String (char[]) (cid:1) ……

(cid:1) Phương thức:

(cid:1) int length(): kích thước của xâu (cid:1) char charAt(int index): ký tự ở vị trí index (cid:1) boolean equals(String) (cid:1) boolean equalsIgnoreCase(String) (cid:1) boolean startWith(String) (cid:1) boolean endWith(String) (cid:1) int compareTo(String)

42

Lớp String Một số lớp cơ sở -- Lớp String Một số lớp cơ sở

(cid:1) String toUpperCase()

(cid:1) String toLowerCase()

(cid:1) Phương trức chuyển ñổi:

(cid:1) String concat(String)

(cid:1) Toán tử “+”

(cid:1) Ghép xâu:

(cid:1) String trim(): loại bỏ ký tự trắng

(cid:1) String substring(int startIndex)

(cid:1) String substring(int startIdx, int endIdx)

43

(cid:1) Trích xâu:

Lớp String Một số lớp cơ sở -- Lớp String Một số lớp cơ sở

(cid:1) int indexOf(char)

(cid:1) int indexOf(char ch, int from)

(cid:1) int indexOf(String)

(cid:1) int indexOf(String s, int from)

(cid:1) int lastIndexOf(char)

(cid:1) int lastIndexOf(char, int)

(cid:1) int lastIndexOf(String)

(cid:1) int lastIndexOf(String, int)

(cid:1) Phương thức thay thế:

(cid:1) String replace(char ch, char new_ch)

44

(cid:1) Phương thức tìm kiếm:

Lớp String Một số lớp cơ sở -- Lớp String Một số lớp cơ sở

class Testing{

public static void main(String[] args){

String str = "Hello"; str.concat("And Goodbye"); System.out.println(str);

}

}

(cid:1) Strings in Java once created cannot be changed directly

45

Output

Lớp StringBuffer Một số lớp cơ sở -- Lớp StringBuffer Một số lớp cơ sở

(cid:1) A StringBuffer is used to represent a string that can be

class ConcatDemo{

public static void main(String[] args){

String str = "Hello"; StringBuffer sbObj = new StringBuffer(str); str = sbObj.append(" And Goodbye").toString(); System.out.println(str);

}

}

modified.

46

Output

Lớp StringBuffer Một số lớp cơ sở -- Lớp StringBuffer Một số lớp cơ sở

(cid:1) StringBuffer(String)

(cid:1) StringBuffer(int length)

(cid:1) StringBuffer(): ñặt kích thước mặc ñịnh 16

(cid:1) Khởi tạo:

(cid:1) int length(), void setLength(int length)

(cid:1) char charAt(int index)

(cid:1) void setCharAt(int index, char ch)

(cid:1) String toString()

47

(cid:1) Các phương thức:

Lớp StringBuffer Một số lớp cơ sở -- Lớp StringBuffer Một số lớp cơ sở

(cid:1) append(String), …

(cid:1) insert(int offset, String s)

(cid:1) insert(int offset, char[] chs), …

(cid:1) delete(int start, int end): xóa xâu con

(cid:1) delete(int index): xóa một ký tự

(cid:1) reverse(): ñảo ngược

48

(cid:1) Phương thức thêm xóa:

Lớp Date Lớp Date

Constructor

Purpose

Date( )

Creates a Date using today’s date.

Date(long dt)

Creates a Date using the specified number of milliseconds since January 1, 1970.

Date( int year, int month, int day)

Creates a Date using the specified year, month and day.

49

Lớp Date –– Ví dụVí dụ Lớp Date

import java.util.*; import java.text.*; class DateTime{

strDate = objDate.toString(); System.out.println("Current Date :" + strDate); System.out.println("After formatting " +

public static void main(String args[]){

sdfFormat.format(objDate));

String strDate, strTime = ""; //Extract GMT time SimpleDateFormat sdfFormat; strTime = strDate.substring(11,( strDate.length()-4)); DateFormatSymbols dfsLocales; //Extract the time in hours, minutes, seconds //Create a US English locale strTime = "Time : " + strTime.substring(0,8); dfsLocales = new DateFormatSymbols(new System.out.println(strTime);

Locale("en","US"));

}

}

//Create a pattern to format the date Output //as per the US English locale sdfFormat = new SimpleDateFormat("yyyy.MMMMM.dd GGG

'at' hh:mm:ss aaa", dfsLocales);

//current date is obtained Date objDate = new Date();

50

Lớp Calendar Lớp Calendar

System.out.println("Minute : " +

objCalendar.get(Calendar.MINUTE));

import java.util.*; class DateTimeComponents{

public static void main(String [] args){

objCalendar.get(Calendar.SECOND));

System.out.println("Second : " + Calendar objCalendar = Calendar.getInstance(); //Add 30 minutes to current time, //Display the Date and Time components //then display date and time System.out.println("\nDate and Time components:"); objCalendar.add(Calendar.MINUTE,30); System.out.println("Month : Date objDate = objCalendar.getTime(); "+objCalendar.get(Calendar.MONTH)); System.out.println("\nDate and Time after adding 30 System.out.println("Day : minutes to current time:\n"); "+objCalendar.get(Calendar.DATE));

System.out.println(objDate); System.out.println("Year :

}

"+objCalendar.get(Calendar.YEAR));

}

System.out.println("Hour : " +

objCalendar.get(Calendar.HOUR));

51

Output

Lớp Runtime Lớp Runtime

(cid:1) Used for memory management and executing additional

processes.

(cid:1) We can determine memory allocation details by using

52

totalMemory() and freeMemory() methods

Lớp Runtime –– Ví dụVí dụ Lớp Runtime

class RuntimeDemo{

public static void main(String[] args){

try {

Runtime Objrun = Runtime.getRuntime(); Process Objprocess = null; Objprocess = Objrun.exec("calc.exe");

} catch (Exception ex){

}

}

}

53

Output

Bài tập Bài tập

1. Viết chương trình tạo một mảng số nguyên ngẫu nhiên

có n phần tử

a) Xuất giá trị các phần tử của mảng.

b) Tìm phần tử có giá trị lớn nhất, nhỏ nhất.

c) Tính tổng giá trị của các phần tử là số nguyên tố.

d) ðếm số phần tử có tổng các chữ số lớn hơn 10.

e) Sắp xếp mảng tăng dần/giảm dần

f ) Sắp xếp số chẵn giảm dần, số lẻ tăng dần

54

g) Tìm phần tử có giá trị x

Bài tập Bài tập

2. Cho ma trận số nguyên cấp n x m. Cài ñặt các hàm thực

hiện các chức năng sau:

a) Nhập ma trận.

b) In ma trận.

c) Tìm phần tử nhỏ nhất.

d) Tìm phần tử lẻ lớn nhất.

e) Tìm dòng có tổng lớn nhất.

55

f ) Tính tổng các số không phải là số nguyên tố.

Bài tập Bài tập

3. Cho ma trận vuông số nguyên cấp n. Cài ñặt các hàm

thực hiện các chức năng sau:

a) Nhập ma trận.

b) In ma trận.

c) Tổng các phần tử thuộc tam giác trên.

d) Tổng các phần tử thuộc tam giác dưới.

56

e) Kiểm tra xem ma trận có ñối xứng qua ñường chéo chính?

Các gói chuẩn của Java Các gói chuẩn của Java

57

(cid:1) java.lang (cid:1) java.applet (cid:1) java.awt (cid:1) java.io (cid:1) java.util (cid:1) java.net (cid:1) java.awt.event (cid:1) java.rmi (cid:1) java.security (cid:1) java.sql

Từ khóa của Java Từ khóa của Java

Danh sách từ khóa thường gặp

abstract

else

interface

super

boolean

extends

long

switch

break

false

native

synchronized

byte

final

new

this

case

finally

null

throw

catch

float

package

throws

char

for

private

true

class

goto

protected

try

continue

if

public

void

default

implements

return

while

do

import

short

enum

double

instanceof

static

58

Hỏi & ñáp Hỏi & ñáp

59