Bài giảng Lập trình Java - Chương 2: Ngôn ngữ lập trình Java, cung cấp cho người học những kiến thức như: Cấu trúc một chương trình Java; Dịch và thực thi chương trình Java; Hằng, biến, kiểu dữ liệu; Toán tử và biểu thức; Mảng; Chuỗi; Nhập xuất dữ liệu; Cấu trúc điều khiển.
Trang 1Chương 2
NỘI DUNG
1 Cấu trúc một chương trình Java
2 Dịch và thực thi chương trình Java
3 Hằng, biến, kiểu dữ liệu
Trang 21 Cấu trúc một chương trình Java
// Tên file : Hello.java
/* các chú thích*/
import java util.*;
public class Hello
{//điểm bắt đầu của lớp
public static void main( String args[ ] )
dụng trong chương trình
Lệnh hiển thị dãy ký tự ra màn hình
Khai báo lớp, tên lớp chứa hàm main (phải giống tên file)
Các câu lệnh phải kết thúc bằng dấu chấm phẩy
Phương thức main(), điểm bắt đầu của chương trình, được gọi
đầu tiên Mỗi CT thực thi phải có một phương thức main()
Cấu trúc một chương trình Java (tt)
• Dòng đầu tiên khai báo nạp các lớp sử
dụng
– Ví dụ trên: import java.util.*
• Chú thích: ngôn ngữ Java hỗ trợ ba kiểu
Trang 3Cấu trúc một chương trình Java (tt)
• Phương thức main(): là điểm bắt đầu thực thi
một ứng dụng, mỗi ứng dụng Java phải chứa
một phương thức main có dạng như sau:
– public static void main(String[] args)
2 Dịch và thực thi chương trình Java
• Viết mã nguồn: dùng một chương trình
soạn thảo để viết mã nguồn, lưu lại với file
tên có đuôi “.java” Tên của file phải giống
tên của lớp chính trong chương trình.
• Biên dịch ra mã máy ảo: dùng trình biên
dịch javac để biên dịch mã nguồn “.java”
thành mã của máy ảo (java bytecode) có
đuôi “.class”
• Thông dịch và thực thi: dùng lệnh “java”.
Trang 4• Thực thi chương trình: java Hello
3 Hằng, biến, kiểu dữ liệu
Trang 5• Ký tự đầu tiên phải là ký tự chữ, dấu gạch
dưới ( _ ), hoặc dấu dollar ( $ ).
• Có phân biệt giữa ký tự chữ hoa và chữ
Trang 6Biến
• Biến là vùng nhớ dùng để lưu trữ các giá
trị của chương trình Mỗi biến gắn liền với
một kiểu dữ liệu và một định danh duy
nhất gọi là tên biến.
• Tên biến được đặt theo quy tắc định danh
• Trong java, biến có thể được khai báo ở
bất kỳ nơi đâu trong phạm vi lớp (class).
j SOTHU4 k.sothu5_
l So thu 6
m $sothu7
Trang 7Biến (tt)
• Khai báo biến
– <kiểu dữ liệu> <tên biến>;
– <kiểu dữ liệu> <tên biến> = <giá trị>;
Biến cục bộ và biến toàn cục
• Biến cục bộ: là biến chỉ có thể truy xuất
trong phạm vi một hàm hoặc một khối
lệnh.
• Biến toàn cục: là biến có thể truy xuất ở
khắp nơi trong chương trình, thường
được khai báo sau từ khóa public, hoặc
Trang 8• Java có hai kiểu dữ liệu
– Kiểu dữ liệu cơ sở
• char, boolean, int, short, long, float, double,
– Kiểu đối tượng
• Array, String, class
Trang 10Các kiểu dữ liệu cơ sở (tt)
• Kiểu số thực
• Kiểu boolean: true/false
• Kiểu char: ký tự theo chuẩn Unicode
float 32 bits -3.4e38…3.4e38
double 64 bits -1.7e308…1.7e308
Các kiểu dữ liệu cơ sở (tt)
• Kiểu số nguyên: byte, short, int, long.
– Kiểu mặc định là int
– Không có kiểu số nguyên không dấu
– Lưu ý đối với các phép toán trên số nguyên:
• Nếu hai toán hạng kiểu long → kết quả kiểu long.
• Một trong hai toán hạng không phải long thì được
chuyển thành long trước khi thực hiện phép toán.
• Nếu hai toán hạng đầu không phải kiểu long thì
phép tính sẽ thực hiện với kiểu int.
• Các toán hạng kiểu byte, short sẽ được chuyển
sang kiểu int trước khi thực hiện phép toán.
• Không thể chuyển biến kiểu int và kiểu boolean
Trang 11Các kiểu dữ liệu cơ sở (tt)
• Kiểu số thực: float và double
– Không có giá trị nhỏ nhất và lớn nhất
– Lưu ý đối với các phép toán trên số thực:
• Mỗi toán hạng đều có kiểu chấm động thì phép
toán chuyển thành phép toán dấu chấm động.
• Nếu có một toán hạng là double thì các toán hạng
còn lại → double trước khi thực hiện phép toán.
• Biến kiểu float và double có thể ép chuyển sang
kiểu dữ liệu khác trừ kiểu boolean
– Có kích thước là hai bytes
– Chỉ dùng để biểu diễn các ký tự trong bộ mã
Trang 12Các kiểu dữ liệu cơ sở (tt)
• Kiểu luận lý (boolean):
– Kiểu boolean chỉ nhận một trong hai giá trị:
true hoặc false
– Trong java kiểu boolean không thể chuyển
thành kiểu số nguyên và ngược lại
– Giá trị mặc định của kiểu boolean là false
Chuyển đổi kiểu dữ liệu
• Chuyển đổi kiểu dữ liệu: sử dụng các hàm
thuộc gói java.lang
Trang 13– Hằng số nguyên: trường hợp giá trị hằng ở dạng
long ta thêm vào tiếp vĩ ngữ “l” hay “L” (ví dụ:
1L)
– Hằng số thực: truờng hợp giá trị hằng có kiểu
float ta thêm tiếp vĩ ngữ “f” hay “F”, còn kiểu số
double thì ta thêm tiếp vĩ ngữ “d” hay “D”.
– Hằng boolean: true, false.
– Hằng ký tự: là một ký tự nằm giữa cặp dấu nháy
– final char CH = ‘a’;// Khai báo hằng CH kiểu
char, có giá trị là ‘a’
– public final int ID = 6;// Khai báo hằng ID kiểu
int, có giá trị là 6, có phạm vi toàn cục
Trang 16Toán tử và biểu thức (tt)
• Toán tử ép kiểu
– Ép kiểu rộng (widening conversion): từ kiểu
nhỏ sang kiểu lớn (không mất mát thông tin)
– Ép kiểu hẹp (narrow conversion): từ kiểu lớn
sang kiểu nhỏ (có thể mất mát thông tin)
Trang 17• Mỗi phần tử trong mảng được truy xuất
thông qua chỉ số, bắt đầu là 0.
Trang 18Khai báo mảng
• Cú pháp:
<kiểu dữ liệu> <tên mảng>[ ];
<kiểu dữ liệu> [ ] <tên mảng>;
• Ví dụ:
int arrInt [ ];
hoặc int [ ] arrInt;
Int [ ] arrInt1, arrInt2, arrInt3;
– Có thể khởi tạo giá trị ban đầu cho các phần
tử của mảng khi khai báo
– Ví dụ:
int[] list = new int[5];
for (int i = 0; i < list.length; i++)
list[i] = 2 * i + 1;
int arrInt [] = {1, 2, 3};
char arrChar[] = {‘a’, ‘b’, ‘c’};
String arrColor[]={“Red”, “Green”, “Blue”};
Trang 19Các thao tác trên mảng
• Truy cập mảng
– Các phần tử của mảng được truy xuất thông
qua chỉ số (phần tử đầu tiên có chỉ số là 0)
đặt giữa cặp dấu ngoặc vuông ([ ])
double[] arr = new double[100];
for (int i = 0; i< arr.length ; i++)
{
arr[i] = input.nextDouble();
}
Trang 20• type: kiểu dữ liệu
• name: biến đại diện mỗi phần tử
Trang 25Giới thiệu
• Chuỗi là một dãy các ký tự Unicode liên tiếp nhau
trong bộ nhớ và không thể thay đổi
• Các phương thức áp dụng lên chuỗi không làm thay
đổi nội dung bản thân chuỗi gốc mà chỉ có thể trả về
một chuỗi mới.
• Khai báo chuỗi:
– Khai báo chuỗi rỗng
Ví dụ: String str1=new String( );
– Khai báo và khởi tạo
Ví dụ: String str2=new String( “Hello world” );
– Khai báo và khởi tạo chuỗi từ một mảng kí tự
Ví dụ:
• char ch[ ]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’};
• String str3 = new String [ch];
• String str4 = new String [ch,0,2];
char chars[] = { 'a', 'b', 'c' };
String s = new String(chars);
• String(char chars[ ], int startIndex,
int numChars)
char chars[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
String s = new String(chars, 2, 3); // s=“cde”
Trang 26String Constructors
• String(String strObj)
char c [ ] = {'J', 'a', 'v', 'a'};
String s1 = new String(c);
String s2 = new String(s1);
• String (byte asciiChars[ ])
• String (byte asciiChars[ ], int startIndex,
int numChars)
byte ascii [ ] = {65, 66, 67, 68, 69, 70 };
String s1 = new String(ascii); //ABCDEF
String s2 = new String(ascii, 2, 3); //CDE
– String one = String.valueOf (1);
– String two = String.valueOf ( 2.384f );
– String notTrue = String.valueOf (false);
– String date = String.valueOf (new Date( ) );
Trang 27Các hàm về chuỗi
charAt() Gets a particular character in the string
compareTo() Compares the string with another string
concat() Concatenates the string with another string
copyValueOf() Returns a string equivalent to the specified character array
endsWith() Checks whether the string ends with a specified suffix
equals() Compares the string with another string
equalsIgnoreCase() Compares the string with another string, ignoring case
getBytes() Copies characters from the string into a byte array
getChars() Copies characters from the string into a character array
hashCode() Returns a hashcode for the string
indexOf() Searches for the first occurrence of a character or substring in the string
intern() Fetches a unique instance of the string from a global shared-string pool
lastIndexOf() Searches for the last occurrence of a character or substring in a string
length() Returns the length of the string
Trang 28replace() Replaces all occurrences of a character in the string with another character
startsWith() Checks whether the string starts with a specified prefix
substring() Returns a substring from the string
toCharArray() Returns the array of characters from the string
toLowerCase() Converts the string to lowercase
toUpperCase() Converts the string to uppercase
trim() Removes leading and trailing whitespace from the string
valueOf() Returns a string representation of a value
matches() Determines if the whole string matches a regular expression pattern
replaceFirst() Replaces the first occurrence of a regular expression pattern with a pattern
replaceAll() Replaces all occurrences of a regular expression pattern with a pattern
split() Splits the string into an array of strings using a regular expression pattern as a delimiter
toString() Returns the string value of an object
Trang 29• Đổi một giá trị số thành chuỗi:
– Phương thức valueOf của lớp String
– Ví dụ: String s = String.valueOf (123);// kết quả s
Trang 30Các thao tác trên chuỗi (tt)
• Trích ký tự tại một vị trí cho trước
String str1 = new String(”Hello”);
char ch = str1.charAt(3);
• Trả về chuỗi chữ thường: toLowerCase
• Trả về chuỗi chữ hoa: toUpperCase
equalsIgnoreCase của lớp String
String s = new String(“abc”);
boolean x = s.equals(“ABC”); //(x = false)
boolean y = s equalsIgnoreCase(“ABC”); //(y
Trang 31Các thao tác trên chuỗi (tt)
• Kiểm tra chuỗi bắt đầu của một chuỗi
String str1= “Hello”;
String str2= “He”;
boolean k=str1.startsWith(str2); //k = true
• Kiểm tra chuỗi kết thúc của một chuỗi
Trang 327 Nhập xuất dữ liệu
• Lệnh xuất một chuỗi ra màn hình: phương
thức print, println, cú pháp như sau:
– System.out.print (“The answer is, ”);
//Xuất ra chuỗi “The answer is, ”
• %d: số nguyên
• %f: số thực
• %s: chuỗi
• %n: xuống dòng
Trang 34inStream = new InputStreamReader(System.in);
BufferedReader inData = new
Trang 35public class InTong {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int a = s.nextInt(); int b = s.nextInt();
Trang 37public class StudentGrade {
public static void main(String [] args) {
int score = Integer.parseInt (args[0]);
Trang 38switch (tt)
• Lưu ý:
– variable: char, byte, short, int
– value1, value2, Phải cùng kiểu dữ liệu với
for(int j = 1; j <= 1024; j =
j * 2) {
System.out.println(j);
}
Trang 39public class CongratulateStudent {
public static void main(String [] args) {
char grade = args[0].charAt(0);
int x = 1;
while(x <= 10) {
System.out.println(x);
x++;
}
Trang 41Lệnh continue
• Dùng trong vòng lặp
• Các lệnh sau lệnh continue không được
thức hiện mà quay lên thực hiện vòng lặp