You are on page 1of 46

Lớp và Đối tượng

ArrayList và Exception

Phần 4
Nội Dung
• Xử lý ngoại lệ/biệt lệ (Exception)
• Từ khóa throw.
• Từ khóa throws.
• Khối lệnh try..catch.
• Từ khóa finally và try..catch.
• Lớp ArrayList
• Khai báo, khởi tạo và các phương thức cơ bản.
• Duyệt danh sách.
• Sắp xếp danh sách.
• Lọc danh sách.
• OOP với lập trình ứng dụng trong Windows.
• Minh họa Microsoft Visual Studio 2010
• Minh họa Luna Eclipse
Từ khóa throw

Trích từ www.w3schools.com:
Một website trình bày các kiến thức dễ hiểu, đơn giản
Ví dụ throw (minh họa ThrowExample.java)
public class MyClass {
static void checkAge(int age) {
if (age < 18) {
throw new ArithmeticException("Access denied - You must be at least 18 years
old.");
}
else {
System.out.println("Access granted - You are old enough!");
}
}
public static void main(String[] args) {
checkAge(15); // Set age to 15 (which is below 18...)
}
}
throw và throws (minh họa ThrowsExample.java)
public class MyClass {
static void checkAge(int age) throws ArithmeticException {
if (age < 18) {
throw new ArithmeticException("Access denied - You must be at least 18 years old.");
}
else {
System.out.println("Access granted - You are old enough!");
}
}

public static void main(String[] args) {


checkAge(15); // Set age to 15 (which is below 18...)
}
}
Khác biệt giữa throw và throws
Xử lý biệt lệ/ngoại lệ bằng khối try..catch
Ví dụ bắt biệt lệ bằng try..catch
public class MyClass {
public static void main(String[ ] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
}
catch (Exception e) { System.out.println("Something went wrong.");
}
}//main
}//class
Xử lý biệt lệ bằng try..catch..finally
public class MyClass {
public static void main(String[] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
}
catch (Exception e) {
System.out.println("Something went wrong.");
}
finally { System.out.println("The 'try catch' is finished.");}
} //main
}//class
Minh họa ví dụ FinallyExample.java
Quản lý nhiều đối tượng cùng lớp
• Mảng
String[ ] liststr = new String[10];
int[] num = new int[20];
Long list = new Long[12];
SinhVien dssv = new SinhVien[100];

String[ ] liststr = new String[] {“abc”,”123”,xyz”};


int[] num = new int[ ] { 34, 21, -6, 87, 13, 22} ;
Long[] list = new Long[ ] { new Long(12L), new Long(78L), new Long(“7855”)} ;
SinhVien[] dssv = new SinhVien[ ]{ new SinhVien(), new SinhVien{“Tran”,”Huy”,2000)} ;

liststr[2]=“Hello”;
num[4]=12;
list[3]= 56L;
dssv[k]= new SinhVien();
Hạn chế
• Mảng chỉ chứa các phần tử cùng 1 kiểu (tuy vậy có thể khai báo mảng
chứa các phần tử lớp Object/lớp cha  tính đa hình)
• NLT phải quan tâm đến các chỉ số mảng.
• NLT phải dự báo trước kích cỡ mảng.
• Các thao tác như chèn (đầu/giữa), xóa 1 phần tử thực hiện khó khăn:
Phải viết giải thuật để xứ lý
• Sắp xếp: tang hay giảm, dựa trên 1 tiêu chí hay nhiều tiêu chí  phức
tạp, phải thiết kế giải thuật.
• Tìm kiếm phần tử thỏa điều kiện trong danh sách: duyệt từng phần tử
và lọc ra các phần tử thỏa điều kiện.
 Về phía người dùng: không thuận lợi!!! NSD chỉ quan tâm kết quả với
yêu cầu đưa ra
Lớp ArrayList (Java 1.8)
Ví dụ ArrayOfLong
import java.util.ArrayList;
import java.util.Collections;
public class ArrayListOfLong {
public static ArrayList<Long> list= new ArrayList<Long>();
static
{
list.add(new Long(20));
list.add(new Long(10));
list.add(new Long(40));
list.add(new Long(30));
}
Duyệt các phần tử trong ArrayList
Có nhiều cách
Cách 1: for(int i=0;i<list.size();i++) System.out.println(list.get(i));
Cách 2: for(Long l: list)System.out.println(l);
Cách 3: list.forEach( l -> {System.out.println(l);} );
Cách 4 Iterator<Long> fr = list.iterator();
while (fr.hasNext()) System.out.println(fr.next());
Nhận xét:
2 và 3 thuận lợi do không quan tâm đến kích thước và vị trí phần tử
khuôn dạng chung
Cách 2: for (<Lớp> <tên đại diện>: <đối tượng ArrayList>) { lệnh; }
Cách 3: <đối tượng ArrayList>.forEach (<tên đại diện> -> { lệnh; } );
Các thao tác trên ArrayList (thêm, chèn)
System.out.println("Chen so 60 vao dau danh sach");
list.add(0,new Long(60)); <Đối tượng ArrayList>.add(vị trí, đối tượng)
<Đối tượng ArrayList>. add(đối tượng)
System.out.println("\nThem so 70 vao cuoi danh sach");
list.add(new Long(70));

System.out.println("\nChen so 50 vao vi tri thu 3 trong danh sach");


list.add(3,new Long(50));
Các thao tác trên ArrayList (xóa)
System.out.println("\nXoa phan tu o vi tri thu 3 trong danh sach");
list.remove(3);
for(Long l: list)System.out.print(l+" ");

System.out.println("\nXoa tat ca phan tu co gia tri>30 trong danh sach");


list.removeIf ( l-> l.longValue( )>30 );
for(Long l: list)System.out.print(l+" ");

<Đối tượng ArrayList>.remove(vị trí)


<Đối tượng ArrayList>.removeIf (<tên đại diện> -> điều kiện );
Sắp xếp với ArrayList
System.out.println("\nSap xep theo thu tu tang dan");
list.sort ( (Long l1, Long l2) -> <Đối tượng ArrayList>.sort
{ (
(<Lớp> <biến 1>, <Lớp> <biến 2>) ->
return l1==l2?0:(l1<l2?-1:1); {
trả về giá trị âm/0/dương để so sánh
} }
); );

for(Long l: list)System.out.print(l+" ");

System.out.println("\nDung Collections.reverse dao nguoc danh sach");


Collections.reverse(list);
Lọc các phần tử trong ArrayList
Long kq=list.stream().filter(l-> l.longValue()==30).findAny().orElse(null);
if (kq!=null) System.out.println("Co so 30 trong list");

kq=list.stream().filter(l-> l.longValue()>35).findAny().orElse(null);
if (kq==null) System.out.println("Khong co so nao > 35 trong list");

<Lớp> <biến>= <đối tượng ArrayList>.stream().filter(<biến đại diện>->


điều kiện).findAny().orElse(null);
Sau đó kiểm tra kết quả khác null hay ==null
Ví dụ 2: ArrayListOfString
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.stream.Collectors;
public class ArrayListOfString {
public static ArrayList<String> list= new ArrayList<String>();
static
{
list.add("Tran Khoa");
list.add("Tran Thanh");
list.add("Le Van");
list.add("Hoang Thanh");
list.add("Duong Lam");
list.add("Bui An");
list.add("Tran Than");
}
Duyệt danh sách
System.out.println("Liet ke danh sach-Su dung for(i=0;i<....)");
for(int i=0;i<list.size();i++) System.out.println(list.get(i));
//--------------------------------------------
System.out.println("Liet ke danh sach-Su dung object cua Iterator");
Iterator<String> fr = list.iterator();
while (fr.hasNext())
System.out.println(fr.next());
//---------------------------------------------
System.out.println("Liet ke danh sach-Su dung for(String s:list)");
for(String s:list) System.out.println(s);
//--------------------------------------------
System.out.println("Liet ke danh sach-Su dung phuong thuc forEach");
list.forEach(s-> System.out.print(s+","));
Duyệt và đảo ngược danh sách
System.out.println("\nLiet ke danh sach - chu hoa");
list.forEach( s->
{
String s1=s.toUpperCase();
System.out.print(s1+",");
}
);
System.out.println("\nDao nguoc danh sach");
Collections.reverse(list);
System.out.println(list);-
Sắp xếp danh sách
System.out.println("\nSap xep danh sach theo ten");
list.sort(
(s1,s2)->
{
String[] t1=s1.split(" ");
String[] t2=s2.split(" ");
return t1[1].compareTo(t2[1]);
}
);
list.forEach(s-> System.out.print(s+","));
Lọc danh sách
System.out.println("\nLoc danh sach theo ten bat dau bang 'Tha'");
ArrayList<String> res=(ArrayList)list.stream()
.filter(s -> s.contains("Tha"))
.collect(Collectors.toList());
System.out.println(res);
Ví dụ 3: ArrayListOfSinhVien
Duyệt danh sách sinh viên
System.out.println("==>Duyet cac sinh vien trong danh sach bang for (int
i=0;i<xx.size");
for(int i=0;i<dssv.size()-1;i++) System.out.println(dssv.get(i));
System.out.println("==>Duyet cac sinh vien trong danh sach-Su dung object cua
Iterator");
Iterator<SinhVien> fr = dssv.iterator();
while (fr.hasNext())
System.out.println(fr.next());
System.out.println("==>Duyet cac sinh vien trong danh sach bang for");
for(SinhVien s:dssv) System.out.println(s);
System.out.println("==>Duyet cac sinh vien trong danh sach bang forEach");
dssv.forEach(sv->System.out.println(sv));
Sắp xếp danh sách sinh viên
System.out.println("Sap xep theo tuoi bang phuong thuc sort cua ArrayList");
dssv.sort( (SinhVien o1, SinhVien o2) -> { return o1.tuoi-o2.tuoi;}
);
System.out.println("Sap xep theo ten bang phuong thuc sort cua ArrayList");
dssv.sort( (SinhVien o1, SinhVien o2)-> { return o1.ten.compareTo(o2.ten);}
);
System.out.println("Sap xep theo tuoi (uu tien 1) sau do la ten (uu tien 2) ");
dssv.sort( (SinhVien o1, SinhVien o2)->
{
if (o1.tuoi!=o2.tuoi) return o1.tuoi-o2.tuoi;
return o1.ten.compareTo(o2.ten);
}
);
Lọc danh sách sinh viên
System.out.println("Liet ke danh sach sinh vien ten An");
Stream<SinhVien> kq= dssv.stream()
.filter( sv-> sv.ten.compareTo("An")==0 );
System.out.println("Liet ke danh sach sinh vien tuoi>19");
kq= dssv.stream()
.filter(sv-> sv.tuoi>19);
System.out.println("Liet ke danh sach sinh vien tuoi>19 va ho lot bat dau
la Tr");
kq= dssv.stream()
.filter( sv-> (sv.tuoi>19)&&(sv.ho.startsWith("Tr")) );
Ứng dụng trong môi trường Windows
• Dạng cửa sổ: tiêu đề, phóng to, thu nhỏ, …
• Các thành phần trong cửa sổ làm việc: button, text box,list box,…
• Các phần mềm NNLT hỗ trợ lập trình dễ dàng: Visual Basic, Visual C#,
Eclipse, NetBeans,…
• Xây dựng sẵn các lớp (class) trong thư viện: Windows, Button, Text
Box, Label,… cùng với việc cung cấp các hàm khởi tạo, thuộc tính,
phương thức ,..  NLT chỉ việc khai thác.
• Minh họa:
Viết CT cho phép NSD nhập vào 2 số a và b
Khi bấm nút Add thì hiện ra kết quả của a+b
Phân tích tổng thể 02 text box để nhập dữ liệu (2 số a và b)

Chương trình có 1 cửa sổ chính

02 nhãn (text cố định không đổi)

01 nhãn với nội dung là tổng a+b

1 nút bấm (button)

Hình dung thao tác:


- NSD nhập 2 số vào 2 vùng liên quan
- Khi bấm nút Add thì xuất hiện tổng a+b
tại vùng nhãn tương ứng
Microsoft Visual Studio 2010
ToolBox
Vùng Design

Property&Method
ToolBox

Vùng Design
Thay đổi thuộc tính đối tượng

Vùng Design
Property&Method
Mã lệnh tương ứng – Khai báo đối tượng
Mã lệnh tương ứng – Khởi tạo đối tượng
Phương thức button1_Click
namespace WindowsApplication
{
public partial class Form1 : Form
{
public Form1()
{ InitializeComponent(); }
private void button1_Click(object sender, EventArgs e)
{
double kq = Double.Parse(this.txtA.Text) +
Double.Parse(this.txtB.Text);
this.lblKQ.Text = kq.ToString(); }
}
} Project minh họa WindowsApplication
Tạo ứng dụng window với Eclipse
Tạo ứng dụng window với Eclipse
Cửa sổ làm việc (thẻ Design)

Components
Design
(Drag&Drop)

ToolBox
Property&Event
Kéo-Thả các đối tượng để thiết kế
Components

Property&Event
Mã nguồn sau khi thêm các đối tượng (drag-drop)
Thay đổi 1 số thuộc tính cơ bản các đối tượng
Components

Property&Event
Tự bổ sung code cho các đối tượng
Phương thức của btnNewButton

Project minh họa WindowsApplicationWithJava

You might also like