Các thành phần tĩnh

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 88 - 92)

Chương 3. LẬP TRÌNH HƯỚNG ĐỔI TƯỢNG

3.1.8. Các thành phần tĩnh

3.1.8.1. Thuộctinh tĩnh

Đôi khi bạn muốn có một thuộc tính (biến) được chia sẻ giữa tất cả các đối tượng của một lớp. Ví dụ, bạn muốn cómột biến để đếm số lần một hàm thànhviên được gọi bởi tất cả các đối tượng của lóp. Những thuộc tính như vậy được gọi làthuộc tính tĩnh và chúng có thế được sử dụng để các đối tượng có thể giao tiếphoặc phối họp hành động với các đối tượng khác.

Thuộc tính tĩnh được khai báo với từ khóa static. Cũng chú ý rằng chúng thường được khởi tạo khi khai báo.

Ví dụ:

class Static{

static int i = 10;

intj = 10;

//Đây là thuộctính tĩnh //Đây là thuộctínhthường }

Các thuộc tính tĩnh được cấpphát một vùng bộ nhớ cố định, trong Java, bộ nhớ dành cho các thuộc tính tĩnh chỉ được cấpphátkhi lần đầu tiênta truy cập đến nó.

Thuộc tính tĩnh (cũng như phương thức tĩnh) là chung của cả lớp, nó không là của riêngmột đối tượng nào cả. Nên đế truy xuất đến thuộc tínhtĩnh ta có thể dùng một trong hai cách sau:

<tên lớp>.<tên thuộctínhtĩnh>;

<tên đốitượng>.<tên thuộctínhtĩnh>;

Cả hai cách truy xuất trên đều có tác dụng như nhau.

Chú ý rằng ta không thể sử dụnghàm tạo để khởi đầu các thuộc tính tĩnh, bời vì hàm tạo không phải là phương thức tĩnh.

3.1.8.2. Phương thức tĩnh

Neu một phương thức không truy cập đến dữ liệu của bất kỳ một đối tượng nào và bạn vẫn muốn phương thức này là một thành viên của lớp thỉ bạn có thể làm cho nó trở thành phương thức tĩnh. Phương thức tĩnh có thể được gọi theo thông qua đối tượng của lớp. Tuy nhiên thông thường thì phương thức tĩnh được gọithông qua tên lớp.

Một phương thứctĩnh được khai báo bằngtừkhóa static. Phương thứctĩnh là chung cho cảlóp, nó không lệ thuộc vào một đối tượng cụ thế nào.

Ví dụ:

class Static{

static int i;// Đâylà thuộc tínhtĩnh // phương thứctĩnh

static void printin 0{

System.outprintln (i);

} }

Lời gọiphương thức tĩnh xuất phát từ:

-Tên của lóp:

<tên lớp>.<tên phương thứctĩnh>(thamsố);

- Tên của đối tượng:

<tên đốitượng>.<tên phương thức tĩnh>(tham số);

Vì phương thức tĩnh là độc lập với đối tượng, do vậy ở bên trongphương thức tĩnh ta không thể truy cập các thành viên không tĩnh củalóp đó, tức là bên trong phương thức tĩnh ta chỉ có thể truy cập đến các thành viên tĩnh mà thôi. Cũng lưu ý rằng ta không thể sử dụng từ khóa this bên trong phương thức tĩnh.

Chương trình 3.4 trình bày một minh họa vềthuộc tính tĩnh và phương thức tĩnh:

Chương trình 3.4 class Student{

int rollno;

String name;

static Stringcollege= "BachKhoa";

static void change(){

college= ”Thuy Loi";

}

Student(intr, String n){

rollno = r;

name = n;

}

void display (){System.out.println(rollno + " " + name+ " - " + college);}

publicstaticvoidmainfString args[]){

Student si =new Student (111,"Hoang");

Students2 =new Student (222,"Thuy");

sl.displayO;

s2.display();

Student.change();

sl.displayO;

s2.display();

} }

Kết quả thực hiện chương trình:

111 Hoang- Bach Khoa 222 Thuy - Bach Khoa 111 Hoang- Thuy Loi 222 Thuy - Thuy Loi

3.1.9. Phương thức finalize()

Trong Java không có kiểu dữ liệu con trỏ như trong c, người lập trình không cần phải quá bận tâm về việc cấp phát và giải phóng vùng nhớ, sẽ có một trình dọn dẹp hệ thống đảm trách việc này. Trình dọn dẹp hệ thống sẽ dọn dẹp vùng nhớ cấp phát cho các đốitượng trước khi hủy một đối tượng.

Phương thức fìnalize() là một phương thức đặc biệt được cài đặt sẵn cho các lóp.

Trình dọn dẹp hệthống sẽ gọi phương thứcnày trước khi hủy một đối tượng. Vì vậy, việc cài đặt một số thao tác giải phóng, dọn dẹp vùng nhớ đã cấp phát cho các đối tượng dữ liệu trong phương thức fínalize() sẽ giúp cho người lập trình chủđộng kiếm soáttốt quá trình hủy đối tượng thay vì giao cho trình dọn dẹp hệ thống tự động. Đồng thời việc cài đặt trong phương thức fmalize() sẽ giúp cho bộ nhớ được giảiphóng tốt hơn, gópphần cải tiến tốc độ chươngtrình.

Ví dụ:

classA

//Khai báocác thuộc tính public void method-1 ()

protectedvoid finalize()

// Có thể dùng để đóng tấtcả các kết nối // vào cơ sở dữ liệu trướckhi hủy đối tượng.

3.2. ĐẶC ĐIÊM HƯỚNG ĐỐI TƯỢNG TRONG JAVA

HỖ trợ những nguyên tắc cơ bản của lập trình hướng đối tượng, tất cả các ngôn ngữ lập trình kể cả Java đều có bốnđặc điểm chung: tính đóng gói (encapsulation), tính đahình (polymorphism), tính kế thừa (inheritance) và tính trừu tượng (abstraction).

-Tính đóng gói (encapsulation) và che giấu thông tin (information hiding):

Tức là trạng thái của đối tượng được bảo vệ không cho các truy cập từ code bên ngoài như thay đối trạng thái hay nhìn trực tiếp. Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã. Đây là tính chất đảmbảo sự toàn vẹn, bảo mật của đối tượng. Trong Java, tính đóng gói được thế hiện thông qua phạm vi truy cập (access modifier). Ngoài ra, các lớpliên quan đến nhau có thể được gom chung lạithành package.

- Tính kế thừa là khả năng cho phép ta xây dựng một lớp mới dựa trên các định nghĩa của một lóp đã có. Lóp đã có gọi là lóp cha, lóp mới phát sinh gọi là lóp con và đương nhiên kế thừa tất cả các thành phần của lớp cha, có thể chia sẻ hay mởrộng các đặc

Một phần của tài liệu Bài Giảng Lập Trình Java - Đại Học Thủy Lợi.pdf (Trang 88 - 92)

Tải bản đầy đủ (PDF)

(408 trang)