Professional Documents
Culture Documents
Java là ngôn ngữ lập trình cấp cao, được phát triển bởi Jame Gosling và các đồng
nghiệp ở Sun Microsystems. Ban đầu nó có tên là Oak, sau đó năm 1995, đổi tên
thành Java, với mục tiêu là “Write Once, Run Anywhere”.
Java chạy trên đa nền tảng: Windows, Mac OS, Linux, Ubuntu,…
Các đặc điểm:
Object oriented: đặc trưng cho tính hướng đối tượng xoay quanh Object và
Class với các đặc điểm: Trừu tượng(Abstraction), đóng gói(Encapsulation),kế
thừa(Inheritance), đa hình(Polymorphism).
Simple : có cú pháp dựa trên ngôn ngữ C/C++, loại bỏ đi những vấn đề bất
cập trong ngôn ngữ đó, như con trỏ,giải phóng bộ nhớ.
Secured: Java không có con trỏ,chương trình chạy trên JVM
Sử dụng classloader xác định xem class, package nào cần import, đặc
biệt truy cập qua network.
Sử dụng bytecode Verifier: kiểm tra các đoạn mã code truy cập bất
hợp pháp tới quyền truy cập đến đối tượng
Security Manager: xác định nguồn tài nguyên mà lớp có thể truy cập,
như đọc và ghi ra bộ nhớ.
Platform independent:
There are two types of platforms software-based and hardware-
based. Java provides software-based platform.
Java code chạy trên đa nền tảng:Windows, Mac OS,… Java code được
biên dịch và chuyển thành bytecode chạy trên JVM. Byte code này là
độc lập nền tảng vì có thể chạy đa nền tảng, với mục tiêu “Write
Once, Run Anywhere”
Distributed: Chúng ta có thể tạo ra các ứng dụng phân phối trong Java. RMI
và EJB được sử dụng để tạo các ứng dụng phân tán. Có thể truy cập các tệp
bằng cách gọi các phương thức từ bất kỳ máy nào trên internet.
Multi-threaded: Java cho phép viết chương trình đa nhiệm với quản lý tài
nguyên, tiến trình dựa trên cơ chế share tài nguyên. Được sử dụng phổ biến
trong ứng dựng Web, Moblie Apps,ứng dụng trên PC.
2. Object and Class
Object:
Object represents real-world entity
Any tangible(hữu hình) or touchable entity in real-world can be decribed
as an object.
Object has:
State: refer to Object’s characteristics or attributes
Behaviour: comprise(chứa) it’s actions
Indenfication(Định danh)
Class:
Template/blueprint(bản thiết kế) for all objects as the same type
Comprise fields and methods
Compare
Class Object
Conceptual model(mô hình khái niệm) Real –thing
Describes an entity Actual entity(thực thể thực tế)
Consists of fields and functions Is an instance of class(thể hiện)
3. OOP là gì?
Là nghệ thuật quan sát đối tượng thực thể thực tế và nắm bắt sự trừu tượng về các
đặc tính và hành vi của đối tượng, nhằm mô hình hóa chúng thành các đối tượng
trong ngôn ngữ lập trình, đó là kỹ thuật hướng đối tượng.
Có các đặc điểm:
Tính trừu tượng(abstraction):
Lược bỏ những thông tin cụ thể và giữ lại những thông tin chung
Tập trung vào các đặc điểm cơ bản của thực thể, các đặc điểm giúp
phân biệt nó với thực thể khác.
Phụ thuộc vào góc nhìn: trong ngữ cảnh này thì rất quan trong,
nhưng trong ngữ cảnh khác thì không có nhiều ý nghĩa.
Overloading method
Các phương thức trong cùng một lớp hoặc kế thừa từ lớp cha hoặc
interface có thể trùng tên nhưng chữ ký phải khác nhau.
Biểu thị trong 3 cách:
Number of parameters (Số lượng tham số):
add(int, int)
add(int, int, int)
Data type of parameters(Loại DL tham số):
add(int, int)
add(int, float)
Sequence of Data type of parameters( Tuần tự DL tham số):
add(int, float)
add(float, int)
Sử dụng:
Sử dụng khi có cùng mục đích, tránh lạm dụng
Giúp giảm tải công việc cần phải nhớ quá nhiều phương thức khi sử dụng
chung mục đích
Tăng tính dễ đọc cho chương trình.
Compare :
Feature Overriding method Overloading method
Method name Must be the same Must be the same
Argument list Must be the same Must be different
Return type Return type must be same or In java, method overloading can't be
covariant in method overriding performed by changing return type of
the method only. Return type can be
same or different in method
overloading. But you must have to
change the parameter.
Accessibility Same or larger Can be different
Declaration Only be able to be overriden in Only be able to be overloaded in the
context subclass(inheritance relationship) same class or in a subclass
Method call Method overriding is the example Method overloading is the example of
resolution of run time polymorphism compile time polymorphism
Used to Provide the specific Increase the readability of the
implementation of the method program.
that is already provided by its
super class.
4. Contructor là gì?
DL cần được khai báo trước khi sử dụng
DL nguyên thủy dùng toán tử “ = ”
Là đối tượng dùng phương thức khởi tạo
Là phương thức đặc biệt được gọi tự động khi đối tượng được tạo ra
Được khai báo là public, trùng tên với class, không có kiểu trả về, được khởi tạo
qua từ khóa “ new ”.
Contructor Overloading : a class have multiple contructors(declared or inherited)
5. Abstract and Interface
Abstract method
Được khai báo là abstract, chỉ có chữ ký mà không có cài đặt cụ thể( không có
thân phương thức)
Ví dụ: public void eat(String name);
Phương thức không thể khai báo là static hoặc final.
Abstract class
Là lớp không thể tạo đối tượng từ nó(tạo đối tượng theo kiểu upcasting)
Thường được dùng để định nghĩa các “ khái niệm chung” , đóng vai trò làm lớp
cơ sở cho các lớp cụ thể khác.
Sử dụng từ khóa abstract trước class
Chưa đầy đủ, thường được dùng làm lớp cha, các lớp con kế thừa sẽ hoàn thiện
nốt.
Khi có một hoặc nhiều hơn phương thức trừu tượng thì bắt buộc lớp đó phải là
abstract class, và không có điều ngược lại.
Các lớp dẫn xuất kế thừa buộc phải cà đè phương thức trừu tượng => định nghĩa
lại phương thức => hoàn thiện nó.
Thuộc tính có thể final hoặc non-final
Phương thức có thể protected hoặc public
Có contructor
Compare :
Abstract Interface
Từ khóa abstract class Từ khóa interface
Không thể tạo đối tượng tiếp Không thể tạo đối tượng trực tiếp
Có hoặc không có phương thức trừu Buộc các phương thức đều là trừu tượng
tượng
Biến là final hoặc non-final Biến buộc là static và final (hằng số)
Acess modifier của phương thức là public Phương thức, thuộc tính là public.
hoặc protected. Còn biến, mọi access
modifier.
Đơn kế thừa Đa kế thừa
Sử dụng từ khóa “extends” Sử dụng từ khóa “implements”
Kế thừa một class khác nhưng có thể Chỉ kế thừa một interface
implements nhiều interface
Có constructor Không có constructor
6. Định danh
Tên bắt đầu bằng chữ cái, dấu “ $ ”, hoặc dấu “_”.
Không bắt đầu bởi số
Phân biệt chữ hoa, chữ thường
Không đặt tên trùng từ khóa
Java name conventions(quy ước):
Package viết thường, cách nhau bởi dấu “.”. VD ed.hust.ltu;
Class và interface: bắt đầu là danh từ/cụm danh từ. Viết hoa chữ cái đầu
tiên.VD: class ImageSprite;
Method: bắt đầu là động từ/cụm động từ.Viết chữ thường chữ cái đầu
tiên, sau đó viết chữ hoa chữ cái đầu tiên tiếp theo, VD: runFast();
Variable: bắt đầu là danh từ/cụm danh từ. .Viết chữ thường chữ cái đầu
tiên, sau đó viết chữ hoa chữ cái đầu tiên tiếp theo, VD:
numberOfStudent;
Constant: viết hoa tất cả, cách nhau bằng dấu “_”, VD: MIN_WIDTH=100;
7. Autoboxing và unboxing
Autoboxing:
Quá trình tự động chuyển DL nguyên thủy => wrapper class
DL nguyên thủy có 1 số hạn chế, giảm hiệu suất làm việc
Chỉ có Object được truyền theo tham chiếu vào method.
Unboxing:quá trình tự động chuyển wrapper class => DL nguyên thủy
8. Stack và Heap
Heap : chứa Objects và JRE classes
Garbage Collection chạy trên vùng nhớ Heap để giải phóng bộ nhớ được
Objects sử dụng mà không được tham chiếu đến.
Mọi objects được tạo ra trong vùng Heap,truy cập toàn cục, có thể tham
chiếu bất kỳ nơi đâu trong ứng dụng
Có khi chạy chương trình.
Stack :
Chứa methods, local variables và reference variable
Có khi compile chương trình.
9. Toán tử instanceof
Kiểm tra xem đối tượng có phải đại diện của class cụ thể không?
Trả về true/false.
VD: Simple sp= new Simple();
System.out.println(sp instanceof Simple);//true
10. Garbage collection
Tự động giải phóng vùng nhớ không cần thiết
Remove the unreferenced objects from Heap memory
By nulling the reference( gán giá trị null cho đối tượng)
Employee e=new Employee();
e=null;
By assigning a reference to another (gán tham chiếu cho đối tượng khác):
Employee e1=new Employee();
Employee e2=new Employee();
e1=e2;//now the first object referred by e1 is available for garbage
collection
By annonymous object:
new Employee();
Phương thức finalize()
The finalize() method is invoked each time before the object is garbage
collected.
This method can be used to perform cleanup processing(quá trình dọn rác).
This method is defined in Object class as:
protected void finalize(){}
Được gọi từ Objects
Phương thức gc()
The gc() method is used to invoke the garbage collector to perform cleanup
processing.
The gc() is found in System and Runtime classes.
System.gc();// (hàm static)
Runtime.getRuntime.gc();
Ví dụ:
int a[]= new int []{1,0,-2,5,2,9,6,8};
System.out.println(a.length);
for(int i=0;i<a.length;i++){
System.out.print(" "+a[i]);
}
for(int i:a){
System.out.println(" "+i);
}
Generics là gì?
Là tham số hóa kiểu DL, cho phép một Object hoạt động với nhiều kiểu DL khác nhau.
Ưu điểm:
Kiểm tra DL chặt chẽ tại complie-time, mà không phải là Runtime-error => Dễ kiểm soát
lỗi.
Không cần ép kiểu(mất tính an toàn)
Cho phép thực hiện các thuật toán tổng quát: sử dụng nhiều kiểu DL với tùy chọn khác
nhau => ND đoạn code trở nên rõ ràng, dễ hiểu
An toàn
Không có đa chiều
Thêm phần tử bằng phương thức add().
12. Static
Biến:
Cấp phát 1 lần => tiết kiệm bộ nhớ.
Chia sẻ cho tất cả các đối tượng
Truy xuất trực tiếp từ tên class mà không cần tạo Object
Phương thức:
Truy cập đến DL static, thay đổi giá trị của nó
Truy xuất trực tiếp từ tên class mà không cần tạo Object
Hạn chế:
Không thể dùng thành viên DL non-static trong phương thức static
Từ khóa super/this không được dùng trong phương thức static.
? main() là static
Vì :
Không cần thiết để tạo đối tượng gọi phương thức static
Nếu đó phương thức non-static cần tạo đối tượng để truy cập đến nó=>
lãng phí bộ nhớ.
Hàm static và dữ liệu kiểu static được load vào vùng nhớ riêng trong JVM
gọi là context, được tạo ra khi lớp được load. Nếu hàm main là static thì
nó sẽ được load vào JVM context và được thực thi.
13. Annotations (Chú thích) được sử dụng để cung cấp thông tin dữ liệu cho mã Java của
bạn. Là thông tin dữ liệu, các Annotation không trực tiếp ảnh hưởng đến việc thực hiện
các mã của bạn, mặc dù một số loại chú thích thực sự có thể được sử dụng cho mục đích
đó.
Compiler instructions (chỉ dẫn cho trình biên dịch)
@Deprecated
Đây là một Annotation dùng để chú thích một cái gì đó bị lỗi thời, tốt
nhất không nên sử dụng nữa, chẳng hạn như class, hoặc method.
@Override
Annotation @Override được sử dụng cho các method ghi đè của method
trong một class cha (superclass). Nếu method này không hợp lệ với một
method trong class cha, trình biên dịch sẽ thông báo cho bạn một lỗi.
@SuppressWarnings
Chú thích @SuppressWarnings làm cho các trình biên dịch thôi không
cảnh báo một vấn đề của method nào đó. Ví dụ, nếu trong một method
có gọi tới một method khác đã lỗi thời, hoặc bên trong method có một ép
kiểu không an toàn, trình biên dịch có thể tạo ra một cảnh báo. Bạn có
thể tắt các cảnh báo này bằng cách chú thích method này bằng
@SuppressWarnings.
Build-time instruction(Chỉ dẫn trong thời điểm xây dựng)
Run-time instructions (Chỉ dẫn trong thời gian chạy )