Feature news

Hiển thị các bài đăng có nhãn Học Java. Hiển thị tất cả bài đăng

Final class, abstract class và interface trong Java

Final class, abstract class và interface trong Java trong lập trình java căn bản

1, Final class (Lớp vô sinh):

Lớp không thể có lớp dẫn xuất từ nó (không có lớp con) gọi là lớp “vô sinh”, hay nói cách khác không thể kế thừa được từ một lớp “vô sinh”. Lớp “vô sinh” dùng để hạn chế, ngăn ngừa các lớp khác dẫn xuất từ nó.
Để khai báo một lớp là lớp “vô sinh”, chúng ta dùng từ khóa final class.
Tất cả các phương thức của lớp vô sinh đều vô sinh, nhưng các thuộc tính của lớp vô sinh thì có thể không vô sinh.
- Xem thêm video blog StudyAndShare



Ví dụ:
PHP:
public final class {
    public final 
int x;
    private 
int y;
    public final 
void method_1(){
    
// …
    
}
    public final 
void method_2(){
    
// …
    
}
}

2, Abstract class (Lớp trừu tượng):

Một lớp trừu tượng thì không có thể hiện nghĩa là ta không thể khởi tạo nó bằng toán tử new, và một phương thức trong nó là abstract thì chỉ được đưa ra định nghĩa (khai báo) mà không được thực thi và nó sẽ được override lại trong các lớp con kế thừa. Và trong lớp mà tồn tại phương thức abstract thì lớp đó cũng được định nghĩa abstract.

- Lớp trừu tượng là lớp không có khai báo các thuộc tính thành phần và các phương thức.
- Bất cứ class nào kết thừa abstract class nào đó phải định nghĩa lại các abstract mothods của lớp mà nó thừa kế hoặc không định nghĩa lại nhưng phải ghi lại abstract mothods đó.
- Abstract class là class có chứa các abstract mothods
- Các methods trong abstract class phải khai báo với từ khóa abstract (không giống như interfacevì interface mặc định gán abstract cho các mothods)
- Một abstract class có thể chứa cả abstract mothods và các mothods thường.
- Khi một class có chứa abstract mothod thì bắt buộc phải có từ khóa abstract đằng trước tên class đó.


PHP:
abstract class A{
    abstract 
void method_1();
}
public class 
extends A{
    @
Override
    
public void method_1(){
    
// cài đặt chi tiết cho phương thức method_1
    // trong lớp con B.
    // …
    
}
}
public class 
extends A{
    @
Override
    
public void method_1(){
    
// cài đặt chi tiết cho phương thức method_1
    // trong lớp con C.
    // …
    
}
}
Lưu ý:
* Các phương thức được khai báo dùng các tiền tố private và static thì không được khai báo là trừu tượng abstract. Tiền tố private thì không thể truy xuất từ các lớp dẫn xuất, còn tiền tố static thì chỉ dùng riêng cho lớp khai báo mà thôi.
* Phương thức trong abstract class có 2 cách để khai báo:
- Khai báo bình thường như class
- Khai báo giống như interface nhưng phải có thêm từ khóa abstract

Code demo:
PHP:
package java.demo.android.vn;

abstract class 
nhanSu {

    abstract 
void show();
}

class 
hocSinh extends nhanSu {

    public 
String hoTen;
    public 
int namSinh;

    public 
void show() {
        
System.out.println("Hello " hoTen " Năm sinh: " namSinh);
    }
}

public class 
JavaDemoAndroidVn {

    public static 
void main(String[] args) {
        
hocSinh a = new hocSinh();
        
a.hoTen "Vũ Văn A";
        
a.namSinh 1992;
        
a.show();

    }
}

3, Interface (Khác với GUI - Nó không phải là giao diện người dùng)

- Như chúng ta đã biết một lớp trong java chỉ có một siêu lớp (super class) trực tiếp hay một cha duy nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi-inheritance) trong lập trình hướng đối tượng, Java thay thế bằng interface. Một lớp có thể kế thừa từ nhiều interface với các lớp khác để thừa hưởng thêm vùng dữ liệu và phương thức của các interface này.

- Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là các hằng (khai báo dùng từ khóa final) và các phương thức của interface là trừu tượng (mặc dù không có từ
khóa abstract).
- Mothods trừu tượng là các mothods chỉ có phần header, không có phần body.(Xem ví dụ phía dưới)
- Trong các lớp có cài đặt các interface ta phải tiến hành cài đặt cụ thể các phương thức này.

- Interface được định nghĩa nhằm làm cho code rành mạch hơn vì các class có thể implements các interface.

Ví dụ: Code ví dụ của video bên blog StudyAndShare




PHP:
public class DemoJavaBasic {
      public static 
void main(String[] args) {
            
Manager mana = new Manager();
            
mana.show();
      }
}
interface 
Human{
      public static final 
int AVG_AGE 100;
      
int AVG_WEIGHT 60;

      public abstract 
void show();
      
void study();
}
class 
Manager implements Human{

      @
Override
      
public void show() {
            
System.out.println("Tuoi trung bình: "AVG_AGE);

      }

      @
Override
      
public void study() {
            
// TODO Auto-generated method stub

      
}

}
Có một vấn đề khác với lớp là một giao diện (interface) không chỉ có một giao diện cha trực tiếp mà có thể dẫn xuất cùng lúc nhiều giao diện khác (hay có nhiều giao diện cha). Khi đó nó sẽ kế thừa tất cả các giá trị hằng và các phương thức của các giao diện cha. Các giao diện cha được liệt kê thành chuỗi và cách nhau bởi dấu phẩy “,”. Khai báo như sau:
PHP:
public interface InterfaceName extends interface1interface2,interface3{// …}
Ví dụ:
PHP:
interface DienTich {

    public abstract 
void sHinhVuong(float a);

    public abstract 
void sHinhChuNhat(float afloat b);
}

interface 
ChuVi {

    public abstract 
void cVHinhVuong(float a);

    public abstract 
void cVHinhChuNhat(float afloat b);
}

interface 
CongThuc extends DienTichChuVi {
}

class 
CongThucTinh implements CongThuc {//Hoặc viết là class CongThucTinh implements DienTich,ChuVi cũng được!

    
@Override
    
public void sHinhVuong(float a) {
        
System.out.println("Diện tích hình vuông là: " a);
    }

    @
Override
    
public void sHinhChuNhat(float afloat b) {
        
System.out.println("Diện tích hình chữ nhật là: " b);
    }

    @
Override
    
public void cVHinhVuong(float a) {
        
System.out.println("Chu vi hình vuông là: " a);
    }

    @
Override
    
public void cVHinhChuNhat(float afloat b) {
        
System.out.println("Chu vi hình chữ nhật là: " * (b));
    }
}

public class 
JavaAndroidVn {

    public static 
void main(String[] args) {
        
CongThucTinh x = new CongThucTinh();
        
x.sHinhVuong(5.0f);
        
x.cVHinhVuong(5.0f);
        
x.sHinhChuNhat(5.5f10.0f);
        
x.cVHinhChuNhat(5.5f10.0f);
    }
}

4, So sánh abstract class và interface:

- Một class chỉ có thể kế thừa từ một abstract class, nhưng có thể kế thừa nhiều interface.
- Trong Interface chỉ có thể khai báo các fields, methods, mà không được hiện thực nó. Còn đối với abstract thì dùng các biến, hiện thực cách methods.
- Các fields, methods trong interace đều là public và bắt buộc các class kế thừa phải cài đặt nó (abstract). Trong abstract class thì có các fields, methods có thể là private, internal, public, protected và có thể là abstract hoặc non-abstract.
- Interface dùng để gom các hành động cần được hiện thực, các khả năng của một đối tượng, còn abstract class cho các lớp thừa kế cùng 1 loại, tính chất hay trạng thái.
- Abstract class có tốc độ thực thi nhanh hơn interface.
- Thêm 1 tính năng mới vào interface sẽ phá vỡ toàn bộ các lớp hiện thực, còn abstract thì không.
- Ví dụ về interface, các thành viên của interface phải được thực thi trong các lớp mà kế thừa từ nó.
- Nhìn một cách nào đó, bạn có thể thấy rằng, Interface giống như những câu lạc bộ, và Abstract class là một ông bố trong gia đình.
Một câu lạc bộ luôn luôn có một bộ quy tắc hay nôi qui mà mọi thành viên luôn phải tuân theo.
Một ông bố trong gia đình thì khác, ông có tài sản mà con cháu có thể kế thừa, ông cũng có những qui định trong di chúc – ai là người được kế thừa tài sản của ông! Bạn có thể tham gia cùng lúc nhiều câu lạc bộ như việc một Class "kế thừa" (Implement) nhiều Interface.
Một khi đã tham gia vào CLB nào, bạn phải tuân thủ tất cả các qui tắc của CLB đó, không quan tâm bạn là thành viên của bao nhiêu CLB. Đó là việc tại sao phải Implement đầy đủ các Interface member.
CLB không để lại tài sản cho các bạn, nhưng bố của bạn thì có, ông ấy cho bạn tài sản (không nếu ông ấy không thích Laughing) và cũng bắt bạn tuân theo các qui tắc – gia qui. Và một khi đã là con của người này thì bạn không thể nào là con của người khác giống như không thể kế thừa từ nhiều Abstract Class!
Đọc tiếp »

Hằng và toán tử trong java

•Hằng là một giá trị bất biến trong chương trình được lập trình java
•Tên hằng được đặt theo qui ước giống như tên biến
•Tiếp vĩ ngữ: l, L, f, F, d, D
int i=1;
long i=1L;
•Hằng ký tự: là một ký tự đơn nằm giữa 2 dấu nháy đơn.
•Hằng chuỗi: là tập hợp các ký tự được đặt giữa hai dấu nháy kép “”. Một hằng chuỗi không có ký tự nào là một hằng chuỗi rỗng.
Ví dụ: “Hello Wolrd”
Lưu ý: Hằng chuỗi không phải là một kiểu dữ liệu cơ sở nhưng vẫn được khai báo và sử dụng trong các chương trình
•Toán tử số học



•Toán tử quan hệ & logic



•Toán tử gán (assignment)


•Toán tử điều kiện

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

int x = 10;

int y = 20;

int Z = (x<y) ? 30 : 40;

•Độ ưu tiên của các phép toán trong ngôn ngữ Java cũng gần giống như ngôn ngữ C/C++. Thứ tự ưu tiên từ trái qua phải và từ trên xuống dưới như bảng sau:




Ví dụ:

import java.lang.*;

import java.io.*;

class VariableDemo

{

static int x, y;

public static void main(String[] args)

{

x = 10;

y = 20;

int z = x+y;

System.out.println("x = " + x);

System.out.println("y = " + y);

System.out.println("z = x + y =" + z);

System.out.println("So nho hon la so:" +

Math.min(x, y));

char c = 80;

System.out.println("ky tu c la: " + c);

}

}
Đọc tiếp »

Cấu trúc một chương trình java cơ bản

Trong bài học java lần này mình xin giới thiệu về cấu trúc một chương trình java
•Java Platform
•Java Virtual Machine (Java VM)
•Java Application Programming Interface (Java API)


KIẾN TRÚC CỦA JAVA

• Thư viện lớp Java: bộ JDK bao gồm rất nhiều lớp chuẩn đã được xây dựng sẵn.
• Lập trình viên thường sử dụng các lớp chuẩn để phát triển ứng dụng.
• Các gói chuẩn của Java:
• java.lang
• java.applet
• java.awt
• java.io
• java.util
• java.net
• java.awt.event
• java.rmi
• java.security
• java.sql

CÁC BƯỚC PHÁT TRIỂN


CẤU TRÚC MỘT CHƯƠNG TRÌNH CƠ BẢN


PHƯƠNG THỨC MAIN

• 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)
• Phương thức main chứa ba bổ từ đặc tả sau:

- public: chỉ ra rằng phương thức main có thể được gọi bởi bất kỳ đối tượng nào.

- static: chỉ ra rằng phương thức main là một phương thức lớp.

- void: chỉ ra rằng phương thức main sẽ không trả về bất kỳ một giá trị nào.

CHÚ THÍCH TRONG JAVA

• Ngôn ngữ Java hỗ trợ ba kiểu chú thích sau:

/* text */

// text

/** documentation */ công cụ javadoc trong bộ JDK sử dụng chú thích này để chuẩn bị cho việc tự động phát sinh tài liệu.

-Dấu mở và đóng ngoặc nhọn “{“ và “}” là bắt đầu và kết thúc một khối lệnh.
-Dấu chấm phẩy “;” để kết thúc một dòng lệnh.

-Java được tổ chức theo lớp (class). Các lệnh và các hàm (kể cả hàm main) phải thuộc một lớp nào đó, chúng không được đứng bên ngoài của lớp.

BIÊN DỊCH VÀ THỰC THI

•Biên dịch chương trình
•Vào chế độ Console của Windows
•Gõ câu lệnh javac Hello.java
•Nếu không có thông báo lỗi, file Hello.class sẽ được tạo ra
•Thực thi chương trình
•Gõ câu lệnh java Hello (không cần .class)

Đọc tiếp »

Cài đặt java

Để chuẩn bị học lập trình java chúng ta cần phải cài đặt java
Đầu tiên chuẩn bị

• JDK 1.6 (jdk-6u11-windows-i586-p)

• JDK DOC 1.6 (jdk-6u10-docs)

–http://java.sun.com/javase/downloads/index.jsp

• JCreator 4.5

–http://www.jcreator.com/download.htm

•Nếu không dùng một IDE như JCreator để soạn thảo, dịch và thực thi thì ta có thể dùng trình soạn thảo văn bản như NotePad để soạn thảo.

Nên cài đặt theo trình tự sau:

• Cài JDK 1.6

• Thiết lập biến môi trường PATH, CLASPATH

• Cài JDK Doc 1.6

• JCreator 4.5

• Thiết lập cho JCreator chỉ vào bộ JDK Doc 1.6 đã cài đặt

• Phần này hướng dẫn cài trong hệ điều hành Windows XP (đối với các hệ điều hành khác của hãng Microsoft thì cách cài cũng tương tự).

• Tạo thư mục C:\Java để cài. Nếu không thì để JDK cài ngầm định vào C:\Program Files\Java\jdk1.6.0_11

• Nhấp đúp vào source JDK 1.6 để cài.

• Thiết lập biến môi trường PATH chỉ đến thư mục BIN của thư mục mà ta mới cài JDK.

• Thiết lập biến môi trường CLASSPATH chỉ đến thư mục chưa các lớp của người dùng. Từ bản JDK 1.4 về sau, ta không cần quan tâm đến biến CLASSPATH nữa.

• Trong Windows XP, nhấp Start/run gõ vào sysedit. Trong cửa sổ AUTOEXEC.BAT gõ chuỗi “set PATH=“ chỉ đến thư mục BIN của JDK mới cài đặt.
Ví dụ: set PATH=C:\Program Files\Java\jdk1.6.0_11\bin
Sau đó save và đóng cửa sổ sysedit lại rồi khởi động lại máy. 


• Mở cmd của WindowsXP, gõ hai lệnh java rồi javac. Nếu có kết quả như sau thì việc cài đặt JDK thành công 


JDK Doc là là tài liệu trợ giúp tra cứu các lớp và các phương thức của Java.
JDK Doc cũng trợ giúp tra hàm và lớp khi soạn thảo trong JCreator. Source của JDK Doc ở dạng file nén. Ta tiến hành giải nén nó vào cùng thư mục đã cài JDK, kết quả được thư mục docs như sau: 

Sau khi download source JCreator và cài đặt nó xong, nhớ tiến hành “bẻ khóa”.



• Để JDK Doc trợ giúp tra hàm và lớp khi soạn thảo trong JCreator, ta phải cấu hình như sau: Configure/Options/JDK Profiles/Chọn thư mục đã cài Java/Chọn thẻ Document/Nhấp nút Add/Chọn thư mục docs của JDK Doc/OK. 



Đọc tiếp »

Jdk – java development kit


Cuối năm 1990, James Gosling và các cộng sự được công ty Sun Microsystems giao nhiệm vụ xây dựng phần mềm lập trình cho các mặt hàng điện tử dân dụng nhằm mục đích cài chương trình vào các bộ xử lý của các thiết bị như VCR, lò nướng, PDA (personal data assistant).

Lúc đầu Gosling và các cộng sự định chọn ngôn ngữ C++ nhưng thấy rằng C++ có những hạn chế. Chương trình viết bằng C++ khi chuyển sang chạy trên một hệ thống máy có bộ vi xử lý khác thì đòi hỏi phải biên dịch lại.

• Gosling quyết định xây dựng hẳn một ngôn ngữ mới dựa trên nền ngôn ngữ C,C++ và đặt tên là Oak (cây sồi, vì phòng làm việc của Gosling nhìn ra một cây sồi).

• Oak đòi hỏi phải độc lập cấu trúc nền (phần cứng, OS) do thiết bị có thể do nhiều nhà sản xuất khác nhau (Platform independent).

• 1993, Internet và Web bùng nổ, Sun chuyển Oak thành một môi trường lập trình Internet với tên dự án là Java.

• 1995: Oak đổi tên với tên chính thức là Java. Java là tên một hòn đảo có trồng nhiều cà phê mà nhóm nghiên cứu phát triển đã tham quan và làm việc.

Mục đích của Java để phát triển ứng dụng cho các thiết bị điện tử thông minh, để tạo các trang web có nội dung động (applet). Hiện nay học Java được sử dụng để phát triển nhiều loại ứng dụng khác nhau như cơ sở dữ liệu, mạng, Internet, games, viễn thông,…

JDK- Java Development Kit

Bộ công cụ phát triển ứng dụng Java bao gồm 4 thành phần: ClasseS, Compiler, Debugger, Java Runtime Environment.

– JDK 1.0 1996

– JDK 1.1 1997

– JDK 1.2 1998

– JDK 1.3 2000

– Java 1.4 2002

– Java 5 (1.5) 2004

– Java 6 2006

– Bao gồm:

– javac Chương trình dịch chuyển mã nguồn sang bytecode

– java Bộ thông dịch: Thực thi java application

– appletviewer Bộ thông dịch: Thực thi java applet mà không cần sử dụng trình duyệt như Nestcape, FireFox hay IE, v.v.

– javadoc Bộ tạo tài liệu dạng HTML từ mã nguồn và chú thích

– jdb Bộ gỡ lỗi (java debugger)

– javap Trình dịch ngược bytecode

– jar Dùng để đóng gói lưu trữ các module viết bằng Java (tạo ra file đuôi .jar), là phương pháp tiện lợi để phân phối những chương trình Java.

QUY TRÌNH BIÊN DỊCH VÀ THÔNG DỊCH CỦA JAVA:

– Trình biên dịch chuyển mã nguồn thành tập các lệnh không phụ thuộc vào phần cứng cụ thể.

– Trình thông dịch trên mỗi máy chuyển tập lệnh này thành chương trình thực thi

– Máy ảo tạo ra một môi trường để thực thi các lệnh bằng cách:

– Nạp các file .class

– Quản lý bộ nhớ

– Dọn “rác”

– JVM là một phần mềm dựa trên cơ sở máy tính ảo. JVM cũng được xem như là một hệ điều hành thu nhỏ.

– Máy ảo phụ thuộc vào Platform (phần cứng, OS), nó cung cấp môi trường thực thi cho Java (độc lập với platform).

– Nó thiết lập cho các mã Java đã biên dịch có một cái nhìn trong suốt (trasparence) về các phần cứng bên dưới.

– IDE: trong phần mềm máy tính, IDE để chỉ đến một bộ các công cụ phần mềm để soạn thảo, biên dịch, liên kết, gỡ rối, v…v… Ví dụ như bộ Visual Studio của Microsoft.

– IDE giúp phát triển ứng dụng nhanh chóng và hiệu quả hơn. Đơn giản hóa quá trình phát triển phần mềm

– Một số IDE dành cho lập trình Java là:

– JCreator

– NetBeans

– Eclipse

– EditPlus

– Borland Jbuilder

– Java Studio của Sun

– …



Đọc tiếp »

Java và các dạng ứng dụng


Công nghệ Java phát triển mạnh mẽ nhờ vào Sun Microsystem cung cấp nhiều công cụ, thư viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại ứng dụng khác nhau cho các nhà lập trình java

• Java bao gồm:

– Ngôn ngữ lập trình

– Môi trường phát triển

– Môi trường thực thi và triển khai

• Desktop applications - J2SE

– Phiên bản chuẩn – Java 2 Standard Edition. J2SE hỗ trợ viết các ứng dụng đơn, ứng dụng client-server.

    • Java Applications: ứng dụng Java thông thường trên desktop

    • Java Applets: ứng dụng nhúng hoạt động trong trình duyệt web

• Server applications - J2EE


– Nền tảng Java 2, phiên bản doanh nghiệp - Java 2 Enterprise Edition. Hỗ trợ phát triển các ứng dụng thương mại.

– Chạy trên máy chủ lớn với sức mạnh xử lý và dung lượng bộ nhớ lớn, hỗ trợ gắn liền với servlet, jsp và XML.

• Mobile (embedded) applications – J2ME

– Phiên bản thu nhỏ - Java 2 Micro Edition.

– Hỗ trợ viết các ứng dụng trên các thiết bị di động, không dây, thiết bị nhúng,…

• Dùng Java ta có thể viết các dạng ứng dụng sau:

– Ứng dụng độc lập (console application)

– Ứng dụng Applets

– Ứng dụng giao diện (GUI application)

– Ứng dụng Web (Servlet và Jsp)

– Ứng dụng nhúng (embedded application)

– Ứng dụng cơ sở dữ liệu (database application)

– Games.

• Ứng dụng độc lập (console application):

– Ứng dụng Console là ứng dụng nhập xuất ở chế độ văn bản tương tự như màn hình Console của hệ điều hành MS-DOS.

– Lọai chương trình ứng dụng này thích hợp với những ai bước đầu làm quen với ngôn ngữ lập trình java.

– Các ứng dụng kiểu Console thường được dùng để minh họa các ví dụ cơ bản liên quan đến cú pháp ngôn ngữ, các thuật toán, và các chương trình ứng dụng không cần thiết đến giao diện người dùng đồ họa.

• Ứng dụng Applets:

– Java Applet là loại ứng dụng có thể nhúng và chạy trong trang web của một trình duyệt web.

– Từ khi internet mới ra đời, Java Applet cung cấp một khả năng lập trình mạnh mẽ cho các trang web.

– Nhưng gần đây khi các chương trình duyệt web đã phát triển với khả năng lập trình bằng VB Script, Java Script, HTML, DHTML, XML,… cùng với sự canh tranh khốc liệt giữa Microsoft và Sun đã làm cho Java Applet lu mờ. Và cho đến bây giờ gần như các lập trình viên đều không còn “mặn mà” với Java Applet nữa.

• Ứng dụng nhúng:


– Java Sun đưa ra công nghệ J2ME (The Java 2 Platform, Micro Edition J2ME) hỗ trợ phát triển các chương trình, phần mềm nhúng.

– J2ME cung cấp một môi trường cho những chương trình ứng dụng có thể chạy được trên các thiết bị cá nhân như: điện thọai di động (MIDlet), máy tính bỏ túi PDA hay Palm, cũng như các thiết bị nhúng khác.

• Ứng dụng cơ sở dữ liệu:
– Java cũng hỗ trợ lập trình kết nối và tương tác được với hầu hết các hệ quan trị CSDL nổi tiếng như Oracle, SQL Server, MS-Access, MySQL,…

• Games:

– Lập trình Games bằng Java được phát triển mạnh mẽ. Dùng Java có thể viết được games cho máy destop và các thiết bị di động.



Đọc tiếp »

Một số đặc tính của java

Trong bài viết này , mình sẽ giới thiệu cho các bạn học lập trình java về một số ưu , nhược điểm về ngôn ngữ lập trình java
Đơn giản.
Khả chuyển.
Hướng đối tượng.
Phân tán
Đa tiểu trình (multithread).
An toàn.
Biên dịch và thông dịch
Giải phóng bộ nhớ (Garbage Collection)

Đơn giản( simple): 


Java tương tự như C++ nhưng bỏ bớt các đặc tính phức tạp của C++ như quản lý bộ nhớ, pointer, overload toán tử, không dùng include, bỏ struct, union. Java được kế thừa từ C++, và được loại bỏ đi các tính năng khó nhất của C++ nên java dễ sử dụng hơn.

Tính khả chuyển (portable):

Tính khả chuyển của java do chương trình biên dịch tạo ra mã byte (bytecodes) không phụ thuộc hệ thống máy sử dụng. Bytecodes là tập hợp các câu lệnh tương tự như lệnh mã máy (machine code), nó được tạo ra khi một chương trình Java được biên dịch xong.


Tính hướng đối tượng (OO):

Hướng đối tượng trong Java tương tự như C++ nhưng Java là một ngôn ngữ lập trình hướng đối tượng hoàn toàn, không thể viết một ứng dụng hướng thủ tục trong Java

Tất cả mọi thứ đề cập đến trong Java đều liên quan đến các đối tượng được định nghĩa trước, thậm chí hàm chính (hàm main) của một chương trình viết bằng Java cũng phải đặt bên trong một lớp.

Hướng đối tượng trong Java không có tính đa kế thừa (multi inheritance) như trong C++ mà thay vào đó Java đưa ra khái niệm interface để hỗ trợ tính đa kế thừa.

Phân tán (distributed): 

Nhắm đến phân bố ứng dụng trên mạng, ứng dụng độc lập platform. Cụ thể là Java có hỗ trợ công nghệ lập trình RMI, CORBA, JavaBean. Các công nghệ này cho phép sử dụng lại các lớp đã tạo ra, triệu gọi các phương thức (method) hoặc các đối tượng từ một máy ở xa.

Đa tiểu trình (multithread): 

Đặc tính này của Java cho phép tạo nhiều tiến trình, tiểu trình có thể chạy song song cùng một thời điểm và có thể tương tác với nhau.

Tính an toàn (secure): 

Kiểm tra an toàn code trước khi thực thi, có nhiều mức kiểm tra bảo mật > Môi trường thực thi an toàn

Mức 1: Mức ngôn ngữ, nhờ tính bao gói dữ liệu của OOP, không cho phép truy cập trực tiếp bộ nhớ mà phải thông qua method.

Mức 2: Mức Compiler, kiểm tra an toàn cho code trước khi biên dịch.

Mức 3: Mức Interpreter, trước khi bytecode được thực thi, được kiểm tra an toàn.

Mức 4: Mức Class, các class trước khi nạp được kiểm tra an toàn.

Biên dịch và thông dịch:

Java là một ngôn ngữ lập trình có khả năng biên dịch và khả năng thông dịch.

Chương trình nguồn viết bằng ngôn ngữ lập trình Java có đuôi *.java đầu tiên được biên dịch thành tập tin có đuôi *.class và sau đó sẽ được trình thông dịch thông dịch thành mã máy.

Java class file có thể được dùng ở bất kỳ flatform nào (Write Once Run Anywhere).

Các file tài nguyên > trình biên dịch javac > class file độc lập thiết bị

Class file > trình thông dịch java  mã máy thực thi, không cần liên kết (link)‏


Giải phóng bộ nhớ (Garbage Collection)

Java cung cấp một tiến trình mức hệ thống để theo dõi việc cấp phát bộ nhớ

Garbage Collection
- Đánh dấu và giải phóng các vùng nhớ không còn được sử dụng.

- Được tiến hành tự động.

- Cơ chế hoạt động phụ thuộc vào các phiên bản máy ảo.
Đọc tiếp »

Thiết kế giao diện người dùng trong java

Mở đầu

Chương này cung cấp cho người hoc java những kiến thức cơ bản để xây dựng giao diện (Graphic User Interface - GUI) của chương trình ứng dụng bằng ngôn ngữ java:
- Những nguyên tắc thiết kế giao diện.
- Những thư viện, gói xây dựng giao diện: gồm những lớp (class), những giao tiếp (interface) quản lý sự kiện và những thành phần (components) xây dựng nên giao diện người dùng.
- Bộ quản lý trình bày (layout managers)
- Xử lý sự kiện
Trong khuôn khổ giáo trình lập trình java căn bản này chúng tôi trình bày việc thiết kế GUI dùng thư viện awt (abstract windows toolkit). Việc thiết kết GUI sẽ trực quan, uyển chuyển hơn khi chúng ta sử dụng thư viện JFC (Java Foundation Class) sẽ giới được giới thiệu trong chuyên đề java nâng cao.

Giới thiệu thư viện awt

Thư viện awt là bộ thư viện dùng để xây dựng giao diện người dùng cho một chương trình ứng dụng có đầy đủ các thànhphần cơ bản như: Label, Button, Checkbox, Radiobutton,Choice, List, Text Field, Text Area, Scrollbar, Menu, Frame…Giống như các API của Windows, java cung cấp cho người lập trình thư viện awt. Nhưng khác với các hàm API, thư viện awt không phụ thuộc hệ điều hành. Thư viện awt là nền tảng, cơ sở giúp cho chúng ta tiếp cận với thư viện mở rộng JFC hiệu quả hơn.
Cấu trúc cây phân cấp của tất cả những lớp trong thư viện awt chúng ta có thể xem chi tiết trong tài liệu kèm theo bộ công cụ j2se (phần API Specification)

Các khái niệm cơ bản

Component

Component là một đối tượng có biểu diễn đồ họa được hiển thị trên màn hình mà người dùng có thể tương tác được. Chẳng  hạn như những nút nhấn (button), những checkbox, những scrollbar,… Lớp Component là một lớp trừu tượng.
 java.lang.Object
 java.awt.Component

Container

Container là đối tượng vật chứa hay những đối tượng có khả năng quản lý và nhóm các đối tượng khác lại. Những đối tượng con thuộc thành phần awt như: button, checkbox, radio button, scrollbar, list,… chỉ sử dụng được khi ta đưa nó vào khung chứa (container).

Một số đối tượng container trong Java:

· Panel: Đối tượng khung chứa đơn giản nhất, dùng để nhóm các đối tượng, thành phần con lại. Một Panel có thể chứa bên trong một Panel khác.
java.lang.Object
 +--java.awt.Component
 +--java.awt.Container
 +--java.awt.Panel
· Frame: khung chứa Frame là một cửa số window hẳn hoi ở mức trên cùng bao gồm một tiêu đều và một đường biên (border) như các ứng dụng windows thông thường khác. Khung chứa Frame thường được sử dụng để tạo ra cửa sổ chính của các ứng dụng.
java.lang.Object
 +--java.awt.Component
 +--java.awt.Container
 +--java.awt.Window
 +--java.awt.Frame
· Dialogs: đây là một cửa sổ dạng hộp hội thoại (cửa sổ dạng này còn được gọi là pop-up window), cửa sổ dạng này thường được dùng để đưa ra thông báo, hay dùng để lấy dữ liệu nhập từ ngoài vào thông qua các đối tượng, thành phần trên dialog như TextField chẳng hạn. Dialog  cũng là một cửa sổ nhưng không đầy đủ chức năng như đối tượng khung chứa Frame.
java.lang.Object
 +--java.awt.Component
 +--java.awt.Container
 +--java.awt.Window
 +--java.awt.Dialog
· ScrollPanes: là một khung chứa tương tự khung chứa Panel, nhưng có thêm 2 thanh trượt giúp ta tổ chức và xem được các đối tượng lớn choán nhiều chỗ trên màn hình như những hình ảnh hay văn bản nhiều dòng.
java.lang.Object
 +--java.awt.Component
 +--java.awt.Container
 +--java.awt.ScrollPane

Layout Manager

Khung chứa container nhận các đối tượng từ bên ngoài đưa vào và nó phải biết làm thế nào để tổ chức sắp xếp “chỗ ở” cho các đối tượng đó. Mỗi đối tượng khung chứa đều có một bộ quản lý chịu trách nhiệm thực hiện công việc đấy đó là bộ quản lý trình bày (Layout Manager). Các bộ quản lý trình bày mà thư viện AWT cung cấp cho ta bao gồm:
· FlowLayout: Sắp xếp các đối tượng từ trái qua phải và từ trên xuống dưới. Các đối tượng đều giữ nguyên kích thước của mình.
· BorderLayout: Các đối tượng được đặt theo các đường viền của khung chứa theo các cạnh West, East, South, North và Center tức Đông, Tây, Nam, Bắc và Trung tâm hay Trái, Phải, Trên, Dưới và Giữa tùy theo cách nhìn của chúng ta.
· GridLayout: Tạo một khung lưới vô hình với các ô bằng nhau. Các đối tượng sẽ đặt vừa kích thước với  từng ô đó. Thứ tự sắp xếp cũng từ trái qua phải và từ trên xuống dưới.
· GridBagLayout: Tương tự như GridLayout, các đối tượng khung chứa cũng được đưa vào một lưới vô hình. Tuy nhiên kích thước các đối tượng không nhất thiết phải vừa với 1 ô mà có thể là 2, 3 ô hay nhiều hơn tùy theo các ràng buộc mà ta chỉ định thông qua đối tượng
GridBagConstraint.
· Null Layout: Cách trình bày tự do. Đối với cách trình bày này người lập trình phải tự động làm tất cả từ việc định kích thước của các đối tượng, cũng như xác định vị trí của nó trên màn hình. Ta không phụ thuộc vào những ràng buộc đông, tây , nam, bắc gì cả.
Đọc tiếp »

Ví dụ minh họa về interface ví dụ 2

Tiếp tục ví dụ hướng dẫn các bạn hoc lap trinh java hiểu thêm về interface nhưng trong ví dụ 2 chúng ta dùng interface để định nghĩa cho Shape thay vì một lớp trừu tượng.Vì vậy tất cả các phương thức trong interface Shape phải được hiện thực trong lớp Point là lớp cài đặt trực tiếp interface Shape.
// Định nghĩa một interface Shape trong tập tin shape.java
public interface Shape
{
// Tính diện tích
public abstract double area();
// Tính thể tích
public abstract double volume();
// trả về tên của shape
public abstract String getName();
}
Lớp Point cài đặt/hiện thực interface tên shape.
// Định nghĩa lớp Point trong tập tin Point.java
public class Point extends Object implements Shape
{
protected int x, y; // Tọa độ x, y của 1 điểm
// constructor không tham số.
public Point()
{
setPoint( 0, 0 );
}
// constructor có tham số.
public Point(int xCoordinate, int yCoordinate)
{
setPoint( xCoordinate, yCoordinate );
}
// gán tọa độ x, y cho 1 điểm
public void setPoint( int xCoordinate, int yCoordinate )
{
x = xCoordinate;
y = yCoordinate;
}
// lấy tọa độ x của 1 điểm
public int getX()
{
return x;
}
// lấy tọa độ y của 1 điểm
public int getY()
{
return y;
}
// Thể hiện tọa độ của 1 điểm dưới dạng chuỗi
public String toString()
{
return "[" + x + ", " + y + "]";
}
// Tính diện tích
public double area()
{
return 0.0;
}
// Tính thể tích
public double volume()
{
return 0.0;
}
// trả về tên của đối tượng shape
public String getName()
{
return "Point";
}
} // end class Point
Lớp Circle là lớp con của lớp Point, và cài đặt/hiện thực gián tiếp interface tên shape.
// Định nghĩa lớp Circle trong tập tin Circle.java
public class Circle extends Point
{ // Dẫn xuất từ lớpPoint
protected double radius;
// constructor không tham số
public Circle()
{
// ngầm gọi đến constructor của lớp cha
setRadius( 0 );
}
// constructor có tham số
public Circle( double circleRadius, int xCoordinate,
int yCoordinate )
{
// gọi constructorcủa lớp cha
super( xCoordinate, yCoordinate );
setRadius( circleRadius );
}
// Gán bán kính của đường tròn
public void setRadius( double circleRadius )
{
radius = ( circleRadius >= 0 ? circleRadius:0 );
}
// Lấy bán kính của đường tròn
public double getRadius()
{
return radius;
}
// Tính diện tích đường tròn Circle
public double area()
{
return Math.PI * radius * radius;
}
// Biểu diễn đường tròn bằng một chuỗi
public String toString()
{
return "Center = " + super.toString() +
"; Radius = " + radius;
}
// trả về tên của shape
public String getName()
{
return "Circle";
}
} // end class Circle
// Định nghĩa lớp hình trụ Cylinder
// trong tập tin Cylinder.java.
public class Cylinder extends Circle
{
// chiều cao của Cylinder
protected double height;
// constructor không có tham số
public Cylinder()
{
// ngầm gọi đến constructor của lớp cha
setHeight( 0 );
}
// constructor có tham số
public Cylinder( double cylinderHeight,
double cylinderRadius, int xCoordinate,
int yCoordinate )
{
// Gọi constructor của lớp cha
super( cylinderRadius, xCoordinate,
yCoordinate );
setHeight( cylinderHeight );
}
// Gán chiều cao cho Cylinder
public void setHeight( double cylinderHeight )
{
height = ( cylinderHeight >= 0 ? cylinderHeight
:0 );
}
// Lấy chiều cao của Cylinder
public double getHeight()
{
return height;
}
// Tính diện tích xung quanh của Cylinder
public double area()
{
return 2 * super.area() + 2 * Math.PI * radius *
height;
}
// Tính thể tích của Cylinder
public double volume()
{
return super.area() * height;
}
// Biểu diễn Cylinder bằng một chuỗi
public String toString()
{
return super.toString() + "; Height = " + height;
}
// trả về tên của shape
public String getName()
{
return "Cylinder";
}
} // end class Cylinder
// Test.java
// Kiểm tra tính kế thừa của Point, Circle, Cylinder với interface Shape.
// Khai báo thư viện
import java.text.DecimalFormat;
public class Test
{
// Kiểm tra tính kế thừa của các đối tượng hình học
public static void main( String args[] )
{
 // Tạo ra các đối tượng hình học
Point point = new Point( 7, 11 );
Circle circle = new Circle( 3.5, 22, 8 );
Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 );
// Tạo một mảng các đối tượng hình học
Shape arrayOfShapes[] = new Shape[ 3 ];
// arrayOfShapes[ 0 ] là một đối tượng Point
arrayOfShapes[ 0 ] = point;
// arrayOfShapes[ 1 ] là một đối tượng Circle
arrayOfShapes[ 1 ] = circle;
// arrayOfShapes[ 2 ] là một đối tượng cylinder
arrayOfShapes[ 2 ] = cylinder;
// Lấy tên và biểu diễn của mỗi đối tượng hình học
String output =
point.getName() + ": " + point.toString() + "\n" +
circle.getName() + ": " + circle.toString() + "\n" +
cylinder.getName() + ": " + cylinder.toString();
DecimalFormat precision2 = new DecimalFormat("0.00" ); duyệt mảng arrayOfShapes lấy tên, diện tích, thể tích của mỗi đối tượng hình học trong mảng.
for ( int i = 0; i < arrayOfShapes.length; i++ )
{
output += "\n\n" + arrayOfShapes[ i ].getName() +
": " + arrayOfShapes[ i].toString() +
"\n Area = " +
precision2.format( arrayOfShapes[ i ].area() ) +
"\nVolume = " +
precision2.format( arrayOfShapes[ i ].volume() );
}
System.out.println(output);
System.exit( 0 );
}
} // end class Test
Kết quả thực thi chương trình:

Đọc tiếp »

Ví dụ minh họa về interface ví dụ 1

Minh họa tính đa hình (polymorphism) trong phân cấp kế thừa thông qua việc mô tả và xử lý một số thao tác cơ bản trên các đối tượng hình học cho các bạn mới học java

// Định nghĩa lớp trừu tượng cơ sở tên Shape trong tập tin Shape.java
public abstract class Shape extends Object
{
// trả về diện tích của một đối tượng hình học shape
public double area()
{
return 0.0;
}
// trả về thể tích của một đối tượng hình học shape
public double volume()
{
return 0.0;
}
// Phương thức trừu tượng cần phải được hiện thực trong những lớp con để trả về tên đối tượng hình học shape thích hợp
public abstract String getName();
} // end class Shape
// Định nghĩa lớp Point trong tập tin Point.java
public class Point extends Shape
{
protected int x, y; // Tọa độ x, y của 1 điểm
// constructor không tham số.
public Point()
{
setPoint( 0, 0 );
}
// constructor có tham số.
public Point(int xCoordinate, int yCoordinate)
{
setPoint( xCoordinate, yCoordinate );
}
// gán tọa độ x, y cho 1 điểm
public void setPoint( int xCoordinate, int yCoordinate )
{
x = xCoordinate;
y = yCoordinate;
}
// lấy tọa độ x của 1 điểm
public int getX()
{
return x;
}
// lấy tọa độ y của 1 điểm
public int getY()
{
return y;
}
// Thể hiện tọa độ của 1 điểm dưới dạng chuỗi
public String toString()
{
return "[" + x + ", " + y + "]";
}
// trả về tên của đối tượng shape
public String getName()
{
return "Point";
}
}
// end class Point
Định nghĩa một lớp cha Shape là một lớp trừu tượng dẫn xuất từ Object và có 3 phương thức khai báo dùng tiền tố public. Phương thức getName() khai báo trừu tượng vì vậy nó phải được hiện thực trong các lớp con. Phương thức area() (tính diện tích) và phương thức volume() (tính thể tích) được định nghĩa và trả về 0.0. Những phương thức này sẽ được khai báo chồng trong các lớp con để thực hiện chức năng tính diện tích cũng như thể tích phù hợp với những đối tượng hình học tương ứng (đường tròn, hình trụ, …)
Lớp Point: dẫn xuất từ lớp Shape. Một điểm thì có diện tích và thể tích là 0.0, vì vậy những phương thức area() và volume() của lớp cha không cần khai báo chồng trong lớp Point, chúng được thừa kế như đã định nghĩa trong lớp trừu tượng Shape. Những phương thức khác như setPoint(…) để gán tọa độ x, y cho một điểm, còn phương thức getX(), getY() trả về tọa độ x, y của một điểm. Phương thức getName() là hiện thực cho phương thức trừu tượng trong lớp cha, nếu như phương thức getName() mà không được định nghĩa thì lớp Point là một lớp trừu tượng.
// Định nghĩa lớp Circle trong tập tin Circle.java
public class Circle extends Point
{
// Dẫn xuất từ lớpPoint
protected double radius;
// constructor không tham số
public Circle()
{
// ngầm gọi đến constructor của lớp cha
setRadius( 0 );
}
// constructor có tham số
public Circle( double circleRadius, int xCoordinate,
int yCoordinate )
{
// gọi constructorcủa lớp cha
super( xCoordinate, yCoordinate );
setRadius( circleRadius );
}
// Gán bán kính của đường tròn
public void setRadius( double circleRadius )
{
radius = ( circleRadius >= 0 ? circleRadius:0 );
}
// Lấy bán kính của đường tròn
public double getRadius()
{
return radius;
}
// Tính diện tích đường tròn Circle
public double area()
{
return Math.PI * radius * radius;
}
// Biểu diễn đường tròn bằng một chuỗi
public String toString()
{
return "Center = " + super.toString() +
"; Radius = " + radius;
}
// trả về tên của shape
public String getName()
{
return "Circle";
}
} // end class Circle
 Lớp Circle dẫn xuất từ lớp Point, một đường tròn có thể tích là 0.0, vì vậy phương thức volume() của lớp cha không khai báo chồng, nó sẽ thừa kế từ lớp Point, mà lớp Point thì thừa kế từ lớp Shape. Diện tích đường tròn khác với một điểm, vì vậy phương thức tính diện tích area() được khai báo chồng.
Phương thức getName() hiện thực phương thức trừu tượng đã khai báo trong lớp cha, nếu phương thức getName() không khai báo trong lớp Circle thì nó sẽ kế thừa từ lớp Point.Phương
thức setHeight dùng để gán chiều cao mới cho một đối tượng hình trụ, còn phương thức getHeight trả về chiều cao của một đối tượng hình trụ.
// Test.java
// Kiểm tra tính kế thừa của Point, Circle, Cylinder với lớp trừu tượng Shape.
// Khai báo thư viện
import java.text.DecimalFormat;
public class Test
{
// Kiểm tra tính kế thừa của các đối tượng hình học
public static void main( String args[] )
{
 // Tạo ra các đối tượng hìnhhọc
Point point = new Point( 7, 11 );
Circle circle = new Circle( 3.5, 22, 8 );
Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 );
// Tạo một mảng các đối tượng hình học
Shape arrayOfShapes[] = new Shape[ 3 ];
// arrayOfShapes[ 0 ] là một đối tượng Point
arrayOfShapes[ 0 ] = point;
// arrayOfShapes[ 1 ] là một đối tượng Circle
arrayOfShapes[ 1 ] = circle;
// arrayOfShapes[ 2 ] là một đối tượng cylinder
arrayOfShapes[ 2 ] = cylinder;
// Lấy tên và biểu diễn của mỗi đối tượng hình học
73
String output =
point.getName() + ": " + point.toString() + "\n" +
circle.getName() + ": " + circle.toString() + "\n" +
cylinder.getName() + ": " + cylinder.toString();
DecimalFormat precision2 = new DecimalFormat(
"0.00" );
// duyệt mảng arrayOfShapes lấy tên, diện tích, thể tích
// của mỗi đối tượng hình học trong mảng.
for ( int i = 0; i < arrayOfShapes.length; i++ )
{
output += "\n\n" + arrayOfShapes[ i ].getName() +
": " + arrayOfShapes[ i].toString() +
"\n Area = " +
precision2.format( arrayOfShapes[ i ].area() ) +
"\nVolume = " +
precision2.format( arrayOfShapes[ i ].volume() );
}
System.out.println(output);
System.exit( 0 );
}
} // end class Test
Kết quả thực thi chương trình:

Đọc tiếp »

Giao diện trong java

Khái niệm interface trong học lập trình java

Như chúng ta đã biết một lớp trong java chỉ có một siêu lớp trực tiếp hay một cha duy nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi-inheritance) trong lập trình hướng đối tượng, Java thay thế bằng giao tiếp (interface). Một lớp có thể có nhiều giao tiếp (interface) với các lớp khác để thừa hưởng thêm vùng dữ liệu và phương thức của các giao tiếp này.
Một interface không phải là một lớp. Viết một interface giống như viết một lớp, nhưng chúng có 2 định nghĩa khác nhau. Một lớp mô tả các thuộc tính và hành vi của một đối tượng. Một interface chứa các hành vi mà một class triển khai.
Trừ khi một lớp triển khai interface là lớp trừu tượng abstract, còn lại tất cả các phương thức của interface cần được định nghĩa trong class.
Một interface tương tự với một class bởi những điểm sau đây:
  • Một interface có thể bao gồm bất cứ lượng phương thức nào.
  • Một interface được viết trong một file với định dạng .java, với tên của interface cùng với tên của file.
  • Bytecode của interface xuất hiện trong một .class file.
  • Interface xuất hiện trong package, những bytecode file tương ứng phải ở trong cấu trúc thư mục có cùng tên package.
Mặc dù vây, một interface khác với một class ở một số điểm sau đây, bao gồm:
  • Bạn không thể khởi tạo một interface.
  • Một interface không chứa bất cứ hàm contructor nào.
  • Tất cả các phương thức của interface đều là abstract.
  • Một interface không thể chứa một trường nào trừ các trường vừa static và final.
  • Một interface không thể kế thừa từ lớp, nó được triển khai bởi một lớp.
  • Một interface có thể kế thừa từ nhiều interface khác.

Khai báo interface:

Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là các hằng (khai báo dùng từ khóa final) và các phương thức của giao tiếp là trừu tượng (mặc dù không có từ khóa abstract).
Trong các lớp có cài đặt các interface ta phải tiến hành cài đặt cụ thể các phương thức này.
Ví dụ:
public interface sanpham
{ static final String nhasx = “Honda VN”;
static final String dienthoai = “08-8123456”;
public int gia(String s_model);
}
// khai báo 1 lớp có cài đặt interface
public class xemay implements sanpham
{ // cài đặt lại phương thức của giao diện trong lớp
public int gia(String s_model)
{
 if (s_model.equals(“2005”))
 return (2000);
 else
 return (1500);

}
public String chobietnhasx()
{
return (nhasx);
}
}
Có một vấn đề khác với lớp là một giao diện (interface) không chỉ có một giao diện cha trực tiếp mà có thể dẫn xuất cùng lúc nhiều giao diện khác (hay có nhiều giao diện cha). Khi đó nó sẽ kế thừa tất cả các giá trị hằng và các phương thức của các giao diện cha. Các giao diện cha được liệt kê thành chuỗi và cách nhau bởi dấu phẩy “,”
. Khai báo như sau:
public interface InterfaceName extends interface1, interface2, interface3
{
// …
}
Đọc tiếp »

Đặc điểm hướng đối tượng trong java P3

 Lớp trừu tượng

Lớp trừu tượng là lớp không có khai báo các thuộc tính thành phần và các phương thức. Các lớp dẫn xuất của nó sẽ khai báo thuộc tính, cài đặt cụ thể các phương thức của lớp trừu tượng trong học lập trình java cơ bản
Ví dụ:
abstract class A
{
abstract void method_1();
}
public class B extends A
{
public void method_1()
{
 // cài đặt chi tiết cho phương thức method_1
 // trong lớp con B.
 // …
}
}
public class C extends A
{
public void method_1()
{
 // cài đặt chi tiết cho phương thức method_1
 // trong lớp con C.
 // …
}
}
Lưu ý: Các phương thức được khai báo dùng các tiền tố private và static thì không được khai báo là trừu tượng abstract. Tiền tố private thì không thể truy xuất từ các lớp dẫn xuất, còn tiền tố static thì chỉ dùng riêng cho lớp khai báo mà thôi.
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 đối tượng trước khi hủy một đối tượng.
Phương thức finalize() 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ức nà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 finalize() sẽ giúp cho người lập trình chủ động kiểm soát tố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 finalize() sẽ giúp cho bộ nhớ được giải phóng tốt hơn, góp phần cải tiến tốc độ chương trình.
Ví dụ:
class A
{
// Khai báo các thuộc tính
public void method_1()
{
 // …
}
protected void finalize()
{
 // Có thể dùng để đóng tất cả các kết nối
// vào cơ sở dữ liệu trước khi hủy đối tượng.
// …
}
}

Gói (packages)

Việc đóng gói các lớp lại tạo thành một thư viện dùng chung gọi là package.
 Một package có thể chứa một hay nhiều lớp bên trong, đồng thời cũng có thể chứa một package khác bên trong. 
Để khai báo một lớp thuộc một gói nào đấy ta phải dùng từ khóa package. Dòng khai báo gói phải là dòng đầu tiên trong tập tin khai báo lớp.
Các tập tin khai báo lớp trong cùng một gói phải được lưu trong cùng một thư mục.
Lưu ý: Việc khai báo import tất cả các lớp trong gói sẽ làm tốn bộ nhớ. Thông thường chúng ta chỉ nên import những lớp cần dùng trong chương trình. 
Đọc tiếp »