Giới thiệu về Packages
Bài 09
Bài 09 / 2 of 35
Nội dung chính
Packages.
Tìm hiểu về java.lang package
Wrapper classes
String và StringBuffer classes
Một số class:
Math
System
Object
Class
Bài 09 / 3 of 35
Packages
Package như một thư mục lưu trữ các class,
interface và các gói con khác.
Ví dụ: java.awt, java.lang
Ưu điểm khi dùng packages:
Tránh trường hợp trùng lặp tên.
Nhóm các class cùng mục đích vào một package.
Cho phép bảo vệ các lớp đối tượng.
Bài 09 / 4 of 35
Packages
Những lưu ý khi dùng package:
Source code phải bắt đầu bằng từ khóa
package
Source code phải nằm trong cùng thư
mục mang tên của gói.
Tên package nên bắt đầu bằng ký tự
thường để phân biệt lớp và gói.
Những lớp đối tượng trong package cần
phải được biên dịch
Để chương trình sử dụng được gói đó
thì phải import gói vào.
Ex: import java.awt.*;
Bài 09 / 5 of 35
Cách tạo gói (package)
Cú pháp định nghĩa một package:
package <pkgname>;
Ex: package myLib;
Import những gói cần thiết sử dụng trong
package.
Khai báo và định nghĩa các class, interface
cần tạo trong package.
Lưu tệp tin .java, biên dịch những lớp đối
tượng đã được định nghĩa trong package.
Bài 09 / 6 of 35
Cách tạo gói (package)
Khi một chương trình java thực thi, JVM sẽ
tìm kiếm tất cả các lớp được sử dụng trong
chương trình.
JVM sẽ sử dụng một trong 2 thông tin sau để
tìm classes:
Tên packages
Danh sách các biến môi trường trong CLASSPATH.
Nếu CLASSPATH không được định nghĩa, JVM
sẽ tìm đường dẫn mặc định java\lib và
đường dẫn đang làm việc.
Bài 09 / 7 of 35
Ví dụ
package mypackage;
public class Palindrome
{
public boolean test(String str)
{
char givenstring[];
char reverse[] = new char[str.length()];
boolean flag = true;
int count = 0,ctr = 0;
givenstring = str.toCharArray();
for (count = str.length()-1;count >=
0;count )
{
reverse[ctr] = givenstring[count];
ctr++;
}
for (count = 0;count < str.length();count+
+)
{
if (reverse[count] != givenstring[count])
flag = false;
}
return flag;
}
}
import mypackage.*;
class Palintest
{
public static void main(String[] args)
{
Palindrome objPalindrome = new Palindrome();
System.out.println(objPalindrome.test(args[0]));
}
}
Output
Bài 09 / 8 of 35
Lưu ý
Các lớp được sử dụng ở bên ngoài package
trong một chương trình khác thì phải khai báo
là public.
Trường hợp 2 package có 2 class cùng tên,
mà ta import cả 2 package -> khi đó xung
đột tên lớp -> khi đó cần sử dụng tên đầy đủ
để truy xuất đến lớp.
Ví dụ: myLib.myInt.Matran mt1 = new ….
myLib.myFloat.Matran mt2 = new ….
=> Sử dụng tên đầy đủ.
Bài 09 / 9 of 35
Packages và Phạm vi truy xuất
Packages như một container cho các classes,
interfaces và các packages con.
Classes là container cho data và method.
Có 4 từ khóa quy định cho phạm vi truy xuất:
public, private, protected
và default
hoặc no modifier.
Bài 09 / 10 of 35
Packages và Phạm vi truy xuất
Một thành phần là public của lớp thì có thể
truy xuất từ bất cứ đâu.
Một thành phần là private của lớp thì chỉ có
thể truy xuất trong phạm vi lớp đó.
Một thành phần là protected thì có thể truy
xuất từ các lớp trong cùng package, các lớp
bên ngoài package nhưng kế thừa lớp đó.
No modifier thì chỉ truy xuất từ các lớp trong
cùng package.
Bài 09 / 11 of 35
Packages và Phạm vi truy xuất
Bài 09 / 12 of 35
Wrapper Classes
Wrapper classes là một phần của gói
java.lang.
Chúng là các lớp bao bọc của các kiểu dữ liệu
cơ bản.
Chúng được sử dụng khi ta cần dùng đến đối
tượng tương ứng với các kiểu dữ liệu.
Tất cả các lớp bao bọc của kiểu số đều là mở
rộng của lớp Number.
Bài 09 / 13 of 35
Wrapper Classes
Có 6 lớp bao bọc của kiểu số: Double,
Float, Byte, Short, Integer và
Long.
Double và Float
là 2 lớp bao bọc cho kiểu
double và float.
Byte, Short, Integer và Long tương ứng
với kiểu dữ liệu: byte, short, int và long.
Character tương ứng với kiểu char.
Boolean tương ứng với kiểu boolean
Bài 09 / 14 of 35
Ví dụ
class NumberWrap
{
public static void main(String[] args)
{
String number = args[0];
Byte byNum = Byte.valueOf(number);
Short shNum = Short.valueOf(number);
Integer num = Integer.valueOf(number);
Long lgNum = Long.valueOf(number);
System.out.println("Output");
System.out.println(byNum);
System.out.println(shNum);
System.out.println(num);
System.out.println(lgNum);
}
}
Output
Bài 09 / 15 of 35
Ví dụ (tiếp)
class TestCharacterMethods
{
public static void main(String[] args)
{
int count;
char values[] = {'*','7','p',' ','P'};
for(count = 0 ; count < values.length ; count++)
{
if(Character.isDigit(values[count]))
System.out.println(values[count]+" is a digit");
if(Character.isLetter(values[count]))
System.out.println(values[count]+" is a letter");
f(Character.isWhitespace(values[count]))
System.out.println(values[count]+" is whitespace");
if(Character.isUpperCase(values[count]))
System.out.println(values[count]+" is uppercase");
if(Character.isLowerCase(values[count]))
System.out.println(values[count]+" is lowercase");
if(Character.isUnicodeIdentifierStart(values[count]))
System.out.println(values[count]+" is allowed as first character of Unicode identifier");
}
}
}
Output
Bài 09 / 16 of 35
Lớp String
Phương thức khởi tạo (Constructor):
String str1 = new String();
String str2 = new String(“Hello World”);
char ch[ ] = {‘A’,’B’,’C’,’D’,’E’};
String str3 = new String(ch);
String str4 = new String(ch,0,2);
String length(): Xác định độ dài của
chuỗi.
equals(): so sánh 2 chuỗi
Bài 09 / 17 of 35
Ví dụ
class Stringdemo
{
public static void main(String args[])
{
String ans1, ans2,ans3,ans4;
ans1 = new String("Answer");
ans2 = "Answer";
ans4 = new String("ANSWER");
ans3 = new String("Answer");
if(ans1 == ans2)
System.out.println("ans1 and ans2 are same object");
if(ans1 == ans3)
System.out.println("ans1 and ans3 are same object");
if(ans1.equals(ans2))
System.out.println("ans1 and ans2 have same content");
if(ans1.equalsIgnoreCase(ans4))
System.out.println("ans1 and ans4 have same content");
if(ans1.compareTo("Answers") == 0)
System.out.println("Same content alpabetically");
if(ans1.startsWith("A"))
System.out.println("Starts with A");
if(ans1.endsWith("r"))
System.out.println("Ends with r");
}
}
Output
Bài 09 / 18 of 35
Lớp String
charAt( )
startsWith()
endsWith( )
copyValueOf( )
toCharArray( )
indexOf( )
toUpperCase( )
toLowerCase( )
trim( )
equals( )
Bài 09 / 19 of 35
Ví dụ
class StringTest
{
public static void main(String[] args)
{
String name = args[0];
if(name.startsWith("M"))
System.out.println("Hey my name also starts with an M! ");
int length = name.length();
System.out.println("Your name has "+length+" characters");
String name_in_caps = name.toUpperCase();
System.out.println(name_in_caps);
}
}
Output
Bài 09 / 20 of 35
Lớp StringBuffer
Cung cấp những phương thức khác nhau để thao tác
trên đối tượng string (chuỗi ký tự)
Những đối tượng của lớp này khá linh hoạt.
Một số phương thức của lớp StringBuffer:
append( )
insert( )
charAt( )
setCharAt( )
setLength( )
getChars( )
reverse( )
Bài 09 / 21 of 35
Example
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);
}
}
Output
Bài 09 / 22 of 35
Lớp Math
Tất cả các phương thức đề dc mô tả là static.
Lớp này là final, do đó không thể kế thừa từ lớp
này được.
Cung cấp các phương thức cho phép thao tác
với kiểu dữ liệu số.
Bài 09 / 23 of 35
Lớp Math
•
abs()
•
ceil()
•
floor()
•
max()
•
min()
•
round()
•
random()
•
sqrt()
•
sin()
•
cos()
•
tan()
Bài 09 / 24 of 35
Ví dụ
class MathDemo
{
public static void main(String[] args)
{
int num = 38;
float num1 = 65.7f;
System.out.println(Math.ceil(num));
System.out.println(Math.ceil(num1));
System.out.println(Math.floor(num));
System.out.println(Math.floor(num1));
System.out.println(Math.round(num));
System.out.println(Math.round(num1));
}
}
Output
Bài 09 / 25 of 35
Lớp Runtime
Đóng gói (Encapsulates) môi trường thực thi
Dùng để quản lý bộ nhớ, và thi hành những
tiến trình cộng thêm.
Mỗi chương trình java có một đối tượng của
lớp này.
Chúng ta có thể xác định kích thước vùng
nhớ được cấp phát = totalMemory() và
freeMemory() để giải phóng vùng nhớ.