You are on page 1of 10

1. Java là gì?

 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.

 Tính đóng gói(Encapsulation): how to hide data


 Là kỹ thuật bao bọc dữ liệu(variables) và code acting(viết mã) dữ
liệu(methods) như là một đơn vị đơn nhất, gọi là class.
 Quá trình ẩn giấu thuộc tính và phương thức của đối tượng , nó
không cho phép truy cập trực tiếp đến DL mà phải thông qua các
phương thức được đối tượng cung cấp để truy cập đến DL của chính
nó. Cụ thể là access modifier(phạm vi truy cập) là private cần tạo các
phương thức getter và setter, khi đó class khác chỉ lấy được giá trị
mà không thể thay đổi được
 Được biết đến như là data hiding
 Nhóm các class và interface thành package.
Lợi ích:
 Data hiding
 Increased flexibilty( tăng tính linh hoạt)
 Reusability (tái sử dụng tài nguyên)
 Tesing code is easy/ maintainability

 Tính kế thừa (Inheritance)


 Enable the developer to extend and reuse the feature of existing
classes and create new classes. The classes are refered to as derived
classes (lớp dẫn xuất): super class/sub class; parent class/child class;
base class/ derived class.
 Use two keywords: extends and implements
 Inherited resources depends on access modifiers
 A class extends an abstract class or implemens an interface, it must
override all abstract methods and implement the body.
=> Reusablity => saving time/money
 Tính đa hình(Polymorphism)
 Is the ablity of object to respond to same message in defferent ways
 Two methods: overriding and overloading methods
Example: if you want to travel, you can choose car, boat, or airplane.
Whichever you choose, you still go to destination
Responding ways are different
Overriding method
 Must have same name as in the parent class
 Must have same parameters in the parent class
 Access modifier : same or larger
 Private, static, final methods can’t be overriden
 Sử dụng:
 Cung cấp sự bổ sung đặc biệt đã có ở lớp cha
 Phải có mối quan hệ kế thừa
 Là hình thức đa hình Runtime
 Upcasting :tự động chuyển đổi kiểu
 Downcasting: phải ép kiểu

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

Khi nào dùng?


 Giữa abstract class và lớp dẫn xuất kế thừa, có tính liên quan mật thiết với
nhau.
 Yêu cầu truy xuất khác public: protected hoặc private
 Nhanh hơn interface
 Interface
 Là lớp không thể tạo đối tượng từ nó.
 Như là “contract”, mà nhóm phát triển phần mềm thống nhất sản phẩm tương
tác với nhau như thế nào mà không đòi hỏi bất cứ một tri thức về cách thức
tiến hành của nhau.
 Hay, phương tiện giúp các đối tượng không có quan hệ mật thiết thống qua sơ
đồ phân cấp có thể tương tác với nhau.
 Các lớp thực thi giao diện:
 Hoặc là lớp trừu tượng (abstract class)
 Hoặc là bắt buộc phải cà i đặt chi tiết toàn bộ các phương thứ c trong giao
diện nếu là lớp instance.
 Cho phép một lớp có thể kế thừa (thự c thi - implement) nhiều giao diện một
lúc.
 Phương thứ c và thuộc tính là public không tường minh
 Các thuộc tính là static và final
 Các phương thứ c là abstract
 Không có contructor
 Chậm hơn abstract class.
Khi nào dùng?
 Biết trước được sự tương tác không mật thiết
 Hỗ trợ đa kế thừa

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();

 It’s impossible to force Garbage Colllection in Java


 We call gc() to hint(gợi ý) Garbage Colllection to run.
11. Array và ArrayList
 Array: là cấu trúc lưu trữ nhiều phần tử có cùng DL, có kích thước cố định.Được
đánh chỉ số từ 0.
 ArrayList:
Mảng có số phần tử cố định. Vì vậy có các nhược điểm sau:
 Không thể bổ sung thêm hoặc xóa bớt các phần tử.
 Lãng phí bộ nhớ:
 Nếu khai báo mảng với kích thước lớn để nắm giữ một vài phần tử.
 Khai báo mảng với kích thước nhỏ thì không đủ chứa.
ArrayList giúp khắc phục nhược điểm nêu trên của mảng.
ArrayList có thể được xem như mảng động, có thể thêm bớt các phần tử một cách
mềm dẻo.
Compare :

Size They can Iteration How to Generic Type Multi- How to


hold get size? s safe dimen add
tional elements
?
Array Fixed Primitives Only through length Doesn’t No Yes Using
as well as for/for-each atttribut support assignme
Objects loop e nt
operator
“=”
ArrayLis Re- Only for/for-each size () Support Yes No Using
t sizable Objects loop; methoa s add()
Iterator/ListIt d method
erator

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);
}

ArrayList<Integer> ar= new ArrayList<Integer>();


ar.add(12);
ar.add(13);
for(int i=0;i<ar.size();i++){
System.out.println(ar.get(i));
}
for(Integer i:ar){
System.out.println(i);
}
System.out.println("Iterator");
Iterator<Integer> it= ar.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
ListIterator<Integer> li =ar.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}

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 )

You might also like