Hướng dẫn java html - javahtml

Chào bạn, bạn đang muốn tự học lập trình Java? Tự học Java tại nhà để chuẩn bị học lập trình web, lập trình Android?tự học lập trình Java? Tự học Java tại nhà để chuẩn bị học lập trình web, lập trình Android?

Show

Vậy thì, đây là bài hướng dẫn chi tiết bạn cần tìm. Hướng dẫn này giúp bạn tự học lập trình Java từ cơ bản đến nâng cao (Được thiết kế dành riêng cho những người mới bắt đầu).tự học lập trình Java từ cơ bản đến nâng cao (Được thiết kế dành riêng cho những người mới bắt đầu).

Hướng dẫn java html - javahtml

Hướng dẫn Tự học Lập trình Java (One for All)

Cũng đừng lo lắng nếu bạn chưa biết gì về lập trình. Bạn sẽ học được tất cả trong bài hướng dẫn này (One for All - Một cho tất cả).

Giới thiệu Series Tự học Java | NIIT - ICT Hà Nội

Việc của bạn là ngồi vào máy tính và bắt đầu đọc và làm theo hướng dẫn, đọc từ trên xuống dưới và code lại từng ví dụ (nhiều lần).

Bài viết hướng dẫn tự học lập trình Java bao gồm:hướng dẫn tự học lập trình Java bao gồm:

  • CHƯƠNG I: Bắt đầu tự học Java
  • CHƯƠNG II: Cấu trúc điều khiển
  • CHƯƠNG III: Mảng trong Java
  • CHƯƠNG IV: Java OOP (I)
  • CHƯƠNG V: Java OOP (II)
  • CHƯƠNG VI: Java OOP (II)
  • CHƯƠNG VII: Xử lý ngoại lệ
  • CHƯƠNG VIII: Java List
  • CHƯƠNG IX: Java Queue
  • CHƯƠNG X: Java Map 
  • CHƯƠNG XI: Java Set 

Mục tiêu của bài viết này là giúp bạn có kiến thức vững chắc về ngôn ngữ lập trình Java trước khi bạn chuyển trang.ngôn ngữ lập trình Java trước khi bạn chuyển trang.

> Chú ý: Nếu bạn muốn học JAVA nhanh hơn, học trực tiếp với chuyên gia doanh nghiệp thì đăng ký ngay: KHÓA HỌC JAVAChú ýNếu bạn muốn học JAVA nhanh hơn, học trực tiếp với chuyên gia doanh nghiệp thì đăng ký ngay: KHÓA HỌC JAVA

Một điều cần nhớ trước khi bạn bắt đầu tự học lập trình Java:

"MỖI MỘT VÍ DỤ ĐỀU SẼ GIÚP BẠN HIỂU VÀ QUEN VỚI LẬP TRÌNH JAVA. VÌ THẾ HÃY TỰ CODE LẠI TẤT CẢ CÁC VÍ DỤ JAVA ÍT NHẤT 1 - 2 LẦN"TỰ CODE LẠI TẤT CẢ CÁC VÍ DỤ JAVA ÍT NHẤT 1 - 2 LẦN"

Còn nếu bạn thấy lười làm lại các ví dụ, thì đừng lãng phí thời gian nữa! Bạn sẽ không bao giờ học lập trình thành công đâu.

Thế nên, nếu đã chọn học lập trình. Hãy quyết tâm cao độ và bắt đầu tự học Java theo hướng dẫn này.

> Ngoài ra, mình khuyên bạn nên đọc thêm bài viết: 6 BƯỚC TỰ HỌC LẬP TRÌNH (như người có kinh nghiệm) để biết có thêm kinh nghiệm khi tự học.6 BƯỚC TỰ HỌC LẬP TRÌNH (như người có kinh nghiệm) để biết có thêm kinh nghiệm khi tự học.

Nào, giờ nếu bạn đã chắc chắn.

Hãy bắt đầu chinh phục ngôn ngữ lập trình Java.ngôn ngữ lập trình Java.

CHƯƠNG I: BẮT ĐẦU TỰ HỌC LẬP TRÌNH JAVA

Để bắt đầu, như mọi lập trình viên khác.

Chúng ta sẽ thử viết chương trình "Hello Word" với Java.


Chương I. Phần 1. Viết chương trình Hello World bằng Java

"Hello, World!" là một chương trình đơn giản để xuất ra dòng chữ Hello, World! trên màn hình.Hello, World!" là một chương trình đơn giản để xuất ra dòng chữ Hello, World! trên màn hình.

Vì đây là một chương trình rất đơn giản, nên nó thường được sử dụng để giới thiệu một ngôn ngữ lập trình mới cho người mới học.

Hãy cùng mình xem cách chương trình "Hello, World!" hoạt động.

Nếu bạn muốn chạy chương trình này trong máy tính của mình, bạn phải cài đặt Java đúng cách.

Ngoài ra, bạn cần một phần mềm lập trình Java (gọi tắt là IDE hoặc trình soạn thảo văn bản) để viết và chỉnh sửa code Java. (Phát hiện lỗi tốt hơn)phần mềm lập trình Java (gọi tắt là IDE hoặc trình soạn thảo văn bản) để viết và chỉnh sửa code Java. (Phát hiện lỗi tốt hơn)

* Bạn có thể tải bộ cài nhanh VSCode for Java với package đóng gói sẵn (chỉ khoảng 38MB) -> Và install (Học Java Core thì VSCode là đủ)VSCode for Java với package đóng gói sẵn (chỉ khoảng 38MB) -> Và install (Học Java Core thì VSCode là đủ)

Chương I. Phần 1.1. Chương trình Hello World trong Java

Video tự học Java 01: Viết chương trình Java đầu tiên: Hello World!


 

Đây là code của chương trình Hello World bằng ngôn ngữ Java:chương trình Hello World bằng ngôn ngữ Java:

// Chương trình "Hello World!"

class HelloWorld { HelloWorld {

public static void main(String[] args) { static void main(String[] args) {

System.out.println("Hello World!"); .out.println("Hello World!"); 

}

}  
 

> Lưu ý: Nếu bạn đã copy code chính xác, bạn cần lưu tên tệp là HelloWorld.java. Đó là vì Java yêu cầu tên của class (lớp) phải giống tên tệp (class chứa hàm main).Lưu ý: Nếu bạn đã copy code chính xác, bạn cần lưu tên tệp là HelloWorld.java. Đó là vì Java yêu cầu tên của class (lớp) phải giống tên tệp (class chứa hàm main).

Khi bạn chạy chương trình, kết quả sẽ là:

Chương I. Phần 1.2. Chương trình "Hello World!" bằng Java hoạt động thế nào?

Bây giờ, mình sẽ giải thích cách chương trình "Hello World!" hoạt động, từng phần, từng phần 1.

Trong Java, bất kỳ dòng nào bắt đầu bằng // là một comment (nhận xét).

Comment chỉ dành cho người đọc code để hiểu rõ hơn về ý định và chức năng của chương trình.

Nó hoàn toàn bị bỏ qua trình biên dịch Java.

Máy ảo Java (JVM) dịch chương trình Java sang Java bytecode mà máy tính có thể thực thi. (JVM) dịch chương trình Java sang Java bytecode mà máy tính có thể thực thi.

Để tìm hiểu thêm về comment, hãy đọc bài viết comment trong Java.comment trong Java.

Trong Java, mọi ứng dụng bắt đầu với một định nghĩa class.

Trong chương trình trên, HelloWorld là tên của class.

Bây giờ,

Bạn chỉ cần nhớ rằng, mọi ứng dụng Java đều phải định nghĩa class.

Tên của class phải khớp với tên của tệp.

public static void main(String[] args) { ... }   static void main(String[] args) { ... }
 

Đây là phương thức main

Mọi ứng dụng trong Java phải chứa một phương thức main

Và, Trình biên dịch Java sẽ bắt đầu thực thi chương trình từ phương thức main này.

Vì đây là là một chương trình cơ bản để giới thiệu ngôn ngữ lập trình Java cho người mới học.

Nên bạn chưa cần hiểu cách main hoạt động.

Chúng ta sẽ tìm hiểu về

if (BieuThucDieuKien) {
    // Các câu lệnh ...
}
1,
if (BieuThucDieuKien) {
    // Các câu lệnh ...
}
2,
if (BieuThucDieuKien) {
    // Các câu lệnh ...
}
3 và cách một phương thức Java hoạt động trong phần sau.

Bây giờ, chỉ cần nhớ rằng máy sẽ đi vào phương thức main đầu tiên.

Và,

Bắt buộc phải có phương thức main trong một chương trình Java.

Tiếp theo,

System.out.println("Hello World!");  .out.println("Hello World!");
 

Đoạn code trên in chuỗi bên trong dấu ngoặc kép Hello, World! đến đầu ra tiêu chuẩn (màn hình của bạn).

Lưu ý, câu lệnh này nằm trong hàm main, hàm main nằm trong class HelloWorld

Chương I. Phần 1.3. Bạn học được gì từ chương trình Hello, World với Java?

Ok,

Bây giờ bạn đã đi hết phần viết chương trình "Hello, World!" bằng Java.

Và đây là những thứ bạn cần phải nhớ:

  • Mỗi ứng dụng Java hợp lệ phải có định nghĩa class (tên class khớp với tên tệp)định nghĩa class (tên class khớp với tên tệp)
  • Phương thức
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    8 (bắt buộc phải có) được đặt trong class
  • Trình biên dịch thực thi code từ hàm mainthực thi code từ hàm main

Đây là một chương trình Java hợp lệ mà không thực hiện gì cả.

// Ví dụ một chương trình Java hợp lệ

public class HelloWorld { class HelloWorld {

public static void main(String[] args) {  static void main(String[] args) {

// Viết code gì đó tại đây

}

}  
 

Đừng lo lắng nếu bạn không hiểu ý nghĩa của "Hello Word"0,

if (BieuThucDieuKien) {
    // Các câu lệnh ...
}
2, phương thức ("Hello Word"2), v.v.

Bạn sẽ được học chi tiết trong các phần sau.

> Chú ý: Phần 2.1, 2.2, 2.3 ngay bên dưới đây là một phần khá là lý thuyết để giúp bạn hiểu về cấu trúc của ngôn ngữ Java và JVM. Bạn cũng có thể lướt qua nhanh hoặc đi ngay vào phần 3.Chú ý: Phần 2.1, 2.2, 2.3 ngay bên dưới đây là một phần khá là lý thuyết để giúp bạn hiểu về cấu trúc của ngôn ngữ Java và JVM. Bạn cũng có thể lướt qua nhanh hoặc đi ngay vào phần 3.

Chương I. Phần 2. Tìm hiểu về JDK, JRE và JVM

Trong phần này, bạn sẽ được tìm hiểu về sự khác biệt chính giữa JDK, JRE và JVM.

Chương I. Phần 2.1. JVM là cái gì? Có gì ảo diệu?

JVM (Máy ảo Java) là một máy trừu tượng cho phép máy tính của bạn chạy chương trình Java. (Máy ảo Java) là một máy trừu tượng cho phép máy tính của bạn chạy chương trình Java.

Khi bạn chạy chương trình Java,

Trước tiên, trình biên dịch Java sẽ biên dịch mã Java của bạn thành bytecode.

Sau đó, JVM dịch bytecode thành mã máy gốc (tập hợp các hướng dẫn mà CPU của máy tính thực thi trực tiếp).JVM dịch bytecode thành mã máy gốc (tập hợp các hướng dẫn mà CPU của máy tính thực thi trực tiếp).

Java là một ngôn ngữ độc lập với nền tảng.

Đó là bởi vì khi bạn viết mã Java, nó được viết cho JVM chứ không phải máy tính vật lý (máy tính) của bạn.

Do đó, chỉ cần có JVM là code Java của bạn chạy mọi nơi (Độc lập với nền tảng)

Hướng dẫn java html - javahtml

Cách chương trình Java hoạt động, thực thi

Nếu bạn quan tâm đến việc tìm hiểu về Kiến trúc JVM, hãy đọc bài viết Máy ảo Java.Máy ảo Java.

Chương I. Phần 2.2. JRE là cái gì?

JRE (Java Runtime Environment) có nghĩa là môi trường thực thi Java. (Java Runtime Environment) có nghĩa là môi trường thực thi Java.

JRE là gói phần mềm cung cấp các thư viện Java class, cùng với Máy ảo Java (JVM) và các thành phần khác để chạy các ứng dụng được viết bằng Java.

Hiểu đơn giản JRE là:

Hướng dẫn java html - javahtml

JRE = Java class + JVM

Nếu bạn cần chạy các chương trình Java, nhưng không phát triển ứng dụng nào cả, JRE là thứ bạn cần.

Bạn có thể tải xuống JRE từ trang chủ của Oracle (Ông chú phát hành Java)Oracle (Ông chú phát hành Java)

Chương I. Phần 2.3. JDK là gì?

JDK (Java Development Kit) là một bộ công cụ phát triển phần mềm để phát triển các ứng dụng trong Java. (Java Development Kit) là một bộ công cụ phát triển phần mềm để phát triển các ứng dụng trong Java.

Khi bạn tải xuống JDK, JRE cũng được tải xuống và không cần tải xuống riêng.

Ngoài JRE, JDK cũng chứa số lượng công cụ phát triển (trình biên dịch, JavaDoc, Trình gỡ lỗi Java, v.v.).

Hướng dẫn java html - javahtml

JDK = JRE + Compiler + Debugger + ...


 

Nếu bạn muốn lập trình ứng dụng Java, hãy tải xuống JDK.JDK.

Đây là mối quan hệ giữa JVM, JRE và JDK.

Hướng dẫn java html - javahtml

Mối liên hệ giữa JVM, JRE và JDK

Chương I. Phần 3. Biến và Kiểu dữ liệu Nguyên thủy

Trong phần này, bạn sẽ tìm hiểu về các biến, cách tạo ra biến trong Java.

Và các kiểu dữ liệu khác nhau mà ngôn ngữ lập trình Java hỗ trợ để tạo các biến.

Chương I. Phần 3.1. Biến trong Java

Video Tự học Java 02: Tìm hiểu về Biến trong Java

Một biến là một vị trí trong bộ nhớ (vùng lưu trữ) để giữ dữ liệu.biến là một vị trí trong bộ nhớ (vùng lưu trữ) để giữ dữ liệu.

Để chỉ ra vùng lưu trữ, mỗi biến phải được đặt một tên duy nhất (mã định danh). Tìm hiểu thêm về cách đặt tên trong Java.cách đặt tên trong Java.

Chương I. Phần 3.2. Cách khai báo biến trong Java

Đây là một ví dụ để khai báo một biến trong Java.

Ở đây,

"Hello Word"3 là một biến có kiểu dữ liệu "Hello Word"4 và được gán giá trị "Hello Word"5. Có nghĩa là biến "Hello Word"3 có thể lưu trữ các giá trị nguyên.

> Bạn sẽ tìm hiểu về các kiểu dữ liệu Java một cách chi tiết sau trong bài viết này.

Trong ví dụ này, chúng ta đã gán giá trị cho biến trong quá trình khai báo.

Tuy nhiên, nó không bắt buộc.

Bạn có thể khai báo các biến mà không cần gán giá trị, và sau đó bạn có thể lưu trữ giá trị theo ý muốn. Ví dụ:


Giá trị của biến này có thể thay đổi trong chương trình, ví dụ:

Java là một ngôn ngữ chặt chẽ static-typed.

Có nghĩa là tất cả các biến phải được khai báo trước khi chúng có thể được sử dụng.

Ngoài ra, trong Java, bạn không thể khai báo 2 biến trùng tên trong cùng phạm vi biến (Variable Scope).không thể khai báo 2 biến trùng tên trong cùng phạm vi biến (Variable Scope).

Phạm vi biến là gì?

Đừng vội quan tâm về nó bây giờ.

Bây giờ, bạn chỉ cần nhớ, bạn không thể làm như thế này.

... .. ...

int speedLimit;    speedLimit;
 

Chương I. Phần 3.3. Quy tắc đặt tên biến trong Java

Ngôn ngữ lập trình Java có bộ quy tắc và quy ước riêng để đặt tên biến.

Đây là những gì bạn cần biết:

Biến trong Java phân biệt chữ HOA - chữ thường

Tên của biến là một chuỗi các chữ cái và chữ số Unicode. Nó có thể bắt đầu bằng một chữ cái, "Hello Word"7 hoặc "Hello Word"8

Tuy nhiên, tốt hơn hết là sử dụng chữ cái để bắt đầu tên của một biến.

Ngoài ra, tên biến không thể sử dụng khoảng trắng.

Khi tạo các biến, nên chọn một tên có ý nghĩa. Ví dụ: "Hello Word"9, Hello, World!0, Hello, World!1 tốt hơn là Hello, World!2, Hello, World!3, Hello, World!4.

Nếu bạn chọn biến là một từ, nên sử dụng chữ cái viết thường. Ví dụ: tốt hơn là sử dụng Hello, World!5 thay vì Hello, World!6 hay là Hello, World!7.

Còn nếu bạn muốn đặt tên biến có từ 2 từ trở lên?

Hãy viết thường cho từ đầu tiên, các từ sau viết Hoa chữ cái đầu, ví dụ: "Hello Word"3

Có 4 loại biến trong ngôn ngữ lập trình Java:

  • Instance Variables (Biến thể hiện / Biến đối tượng)
  • Class Variables (Biến class) (Static Fields)
  • Local Variables (Biến cục bộ)
  • Parameters (Tham số)

Bạn sẽ tìm hiểu về 4 loại biến này ở các chương sau.

Như đã đề cập ở trên, Java là một ngôn ngữ rất chặt chẽ.

Điều này có nghĩa là, tất cả các biến phải được khai báo trước khi chúng có thể được sử dụng.

Ở đây, Hello, World!9 là một biến và kiểu dữ liệu của nó là "Hello Word"4.

Kiểu dữ liệu "Hello Word"4 xác định rằng biến Hello, World!9 chỉ có thể chứa số nguyên (integer).

Nói một cách đơn giản, kiểu dữ liệu của biến xác định các giá trị mà biến có thể lưu trữ.

Có 8 kiểu dữ liệu được xác định trước trong ngôn ngữ lập trình Java, được gọi là kiểu dữ liệu nguyên thủy.

Ngoài các kiểu dữ liệu nguyên thủy, còn có các kiểu dữ liệu được tham chiếu trong Java (bạn sẽ được học về chúng trong các chương sau).

Chương I. Phần 3.4. 8 Kiểu dữ liệu nguyên thủy trong Java

Kiểu dữ liệu #1. Boolean

Video Tự học Java 03: Kiểu dữ liệu Boolean trong Java

Kiểu dữ liệu "Hello, World!"3 có hai giá trị có thể là "Hello, World!"4 hoặc "Hello, World!"5."Hello, World!"3 có hai giá trị có thể là "Hello, World!"4 hoặc "Hello, World!"5.

Giá trị mặc định: "Hello, World!"5.

Chúng thường được sử dụng cho các điều kiện đúng / sai.

Ví dụ:

public static void main(String[] args) { static void main(String[] args) {

        boolean dapAn = true;boolean dapAn true;

System.out.println(dapAn);.out.println(dapAn);

}

}  
 


Khi bạn chạy chương trình, kết quả sẽ là:

Kiểu dữ liệu #2. byte

Video Tự học Java 04: Kiểu dữ liệu Byte trong Java

Kiểu dữ liệu "Hello, World!"7 có thể có giá trị từ -128 đến 127."Hello, World!"7 có thể có giá trị từ -128 đến 127.

Kiểu "Hello, World!"7 được sử dụng để thay thế kiểu "Hello Word"4 để tiết kiệm bộ nhớ nếu dữ liệu nằm trong khoảng từ [-121, 127].

Giá trị mặc định: HelloWorld.java0

Ví dụ:

public static void main(String[] args) { static void main(String[] args) {

byte testSo; testSo;

testSo = 124;124;

System.out.println(testSo);.out.println(testSo);

}

}  
 

Khi bạn chạy chương trình, kết quả sẽ là:

Kiểu dữ liệu #2. byte

Video Tự học Java 04: Kiểu dữ liệu Byte trong Java

Kiểu dữ liệu "Hello, World!"7 có thể có giá trị từ -128 đến 127.

Kiểu "Hello, World!"7 được sử dụng để thay thế kiểu "Hello Word"4 để tiết kiệm bộ nhớ nếu dữ liệu nằm trong khoảng từ [-121, 127]."Hello Word"4 để tiết kiệm bộ nhớ nếu dữ liệu nằm trong khoảng từ [-32768, 32767].

Giá trị mặc định: HelloWorld.java0

Ví dụ:

public static void main(String[] args) { static void main(String[] args) {

short nhietDo; nhietDo;

nhietDo = -200;200;

System.out.println(nhietDo);.out.println(nhietDo);

}

}  
 

Khi bạn chạy chương trình, kết quả sẽ là:

Kiểu dữ liệu #2. byte

Video Tự học Java 04: Kiểu dữ liệu Byte trong Java

Kiểu dữ liệu "Hello, World!"7 có thể có giá trị từ -128 đến 127.

Giá trị mặc định: HelloWorld.java0

Ví dụ:

public static void main(String[] args) { static void main(String[] args) {

int soNguyenA = 5000000; soNguyenA = 5000000;

System.out.println(soNguyenA);.out.println(soNguyenA);

}

}  
 

Khi bạn chạy chương trình, kết quả sẽ là:

Kiểu dữ liệu #2. byte

Video Tự học Java 04: Kiểu dữ liệu Byte trong JavaHelloWorld.java6 có thể chứa giá trị từ -2^63 đến 2^63 - 1.

Giá trị mặc định: HelloWorld.java0

Khi bạn chạy chương trình. Kết quả nhận được là:

public static void main(String[] args) { static void main(String[] args) {

long soB = 42332200000L; soB = 42332200000L;

Kiểu dữ liệu #3. short.out.println(soB);

}

}  
 

Khi bạn chạy chương trình, kết quả sẽ là:

Kiểu dữ liệu #2. byte

Video Tự học Java 04: Kiểu dữ liệu Byte trong Java

Kiểu dữ liệu "Hello, World!"7 có thể có giá trị từ -128 đến 127.

Kiểu "Hello, World!"7 được sử dụng để thay thế kiểu "Hello Word"4 để tiết kiệm bộ nhớ nếu dữ liệu nằm trong khoảng từ [-121, 127].

Giá trị mặc định: HelloWorld.java0

Khi bạn chạy chương trình. Kết quả nhận được là://1 là kiểu số thập phân 64-bit

Kiểu dữ liệu #3. short

Ví dụ:

        boolean dapAn = true; static void main(String[] args) {

float soDouble = -10.5d; soDouble = -10.5d;

System.out.println(soDouble);.out.println(soDouble);

}

}  
 

Khi bạn chạy chương trình, kết quả sẽ là:

Kiểu dữ liệu #2. byte

Video Tự học Java 04: Kiểu dữ liệu Byte trong Java//4 là kiểu số thập phân 32-bit.

Giá trị mặc định: //2 (//6)

Ví dụ:

public static void main(String[] args) { static void main(String[] args) {

float soFloat = -6.9f; soFloat = -6.9f;

System.out.println(soFloat);.out.println(soFloat);

}

}  
 

Khi bạn chạy chương trình. Kết quả nhận được là:

Kiểu dữ liệu #8. char

Video Tự học Java 08: Kiểu dữ liệu char trong Java

Kiểu dữ liệu //7 có thể chứa giá trị unicode 16-bit//7 có thể chứa giá trị unicode 16-bit

Giá trị tối đa của kiểu dữ liệu char là //8(0). Giá trị tối thiểu là //9

Giá trị mặc định: //8

Ví dụ:

public static void main(String[] args) { static void main(String[] args) {

char letter = '\u0051'; letter = '\u0051';

System.out.println(letter);.out.println(letter);

}

}  
 

Khi bạn chạy chương trình. Kết quả nhận được là:

Kiểu dữ liệu #8. char

Video Tự học Java 08: Kiểu dữ liệu char trong Java

public static void main(String[] args) { static void main(String[] args) {

char letter1 = '9'; letter1 = '9';

System.out.println(letter1);.out.println(letter1);

Kiểu dữ liệu //7 có thể chứa giá trị unicode 16-bit letter2 = 65;

System.out.println(letter2);.out.println(letter2);

}

}  
 

Khi bạn chạy chương trình. Kết quả nhận được là:

Kiểu dữ liệu #8. char

Video Tự học Java 08: Kiểu dữ liệu char trong Java

Kiểu dữ liệu //7 có thể chứa giá trị unicode 16-bit"Tự học Lập trình Java";
 

Giá trị tối đa của kiểu dữ liệu char là //8(0). Giá trị tối thiểu là //9

Giá trị mặc định: //8

Ví dụ:

char letter = '\u0051';

Bạn nhận dược giá trị HelloWorld1 bởi vì ký tự tương ứng với giá trị Unicode HelloWorld2 là HelloWorld1.

  • Đây là một ví dụ khác về kiểu dữ liệu char:
  • char letter2 = 65;
  • Ngoài ra, Java cũng hỗ trợ cho chuỗi ký tự char thông qua class java.lang.String.

Bạn có thể tạo đối tượng chuỗi trong Java như sau:

chuoiCuaToi = "Tự học Lập trình Java";  

Chuỗi trong Java là một chủ đề quan trọng.

Chúng ta sẽ tìm hiểu về chúng trong những phần tiếp theo của bài hướng dẫn này.

Chương I. Phần 3.5. Java literals

Để hiểu về literals, hãy lấy một ví dụ về gán giá trị cho biến.

Ở đây:

"Hello, World!"3 là kiểu dữ liệu

HelloWorld5 là biến

"Hello, World!"5 là literal

Theo nghĩa đen, literals là code đại diện cho một giá trị cố định.

Các giá trị HelloWorld7, HelloWorld8, "Hello, World!"4, "Hello, World!"5 xuất hiện trực tiếp trong chương trình mà không đòi hỏi tính toán là literals.

Trong ví dụ trên HelloWorld5 là một biến. "Hello, World!"3 là kiểu dữ liệu, nó cho phép biến HelloWorld5 có thể lưu trữ giá trị "Hello, World!"4 hoặc "Hello, World!"5. giaTriKieuLong1 = 42332200000;

Để trình biên dịch hiểu nó, nó đã yêu cầu phải tính toán.

Tuy nhiên, literals như là main6, main7, "Hello, World!"4 đại diện cho giá trị cố định. giaTriKieuLong2 = 42332200000L;
 

Chương I. Phần 3.6. Integer Literals

Integer Literals được sử dụng để khởi tạo các biến dữ liệu kiểu nguyên như "Hello, World!"7, HelloWorld.java1, "Hello Word"4 và HelloWorld.java6.

Nếu một số nguyên có kết thúc là main3 hoặc HelloWorld.java8, nó là kiểu dữ liệu HelloWorld.java6. soThapPhan = 34;

Lưu ý!

int soThapLucPhan = 0x2F; soThapLucPhan = 0x2F;

Sử dụng

HelloWorld.java8 thay vì main3 soNhiPhan = 0b10010;
 

// Lỗi! literal 42332200000 của kiểu type nằm ngoài phạm vi

long giaTriKieuLong1 = 42332200000;

// 42332200000L là kiểu long, nó không nằm ngoài phạm vi

long giaTriKieuLong2 = 42332200000L;  

Integer literals có thể được thể hiện trong số thập phân và nhị phân số hệ thống.

Những con số bắt đầu với tố main8 đại diện cho thập lục phân. Tương tự, số bắt đầu với tố main9 đại diện cho nhị phân. static void main(String[] args) {

double soDouble = 3.4; soDouble = 3.4;

float soFloat = 3.4F; soFloat = 3.4F;

// 3.445*10^2

double soDoubleKieuKhoaHoc = 3.445e2; soDoubleKieuKhoaHoc = 3.445e2;

System.out.println(soDouble);.out.println(soDouble);

System.out.println(myFsoFloatloat);.out.println(myFsoFloatloat);

int soThapPhan = 34; .out.println(myDoubleScientific);

}

}  
 

Khi bạn chạy chương trình. Kết quả nhận được là:

// 0x Đại diện cho hệ thập lục phân

// 0b Đại diện cho hệ nhị phân

int soNhiPhan = 0b10010;  

Chương I. Phần 3.7. Floating-point Literals

Floating-point Literals được sử dụng để khởi tạo biến của dữ liệu loại //4 và //1.

  • Nếu một thập phân số kết thúc với
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    02 hoặc
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    03, nó là loại //4. Nếu không, nó là của //1.
  • Một số //1 có thể tùy chọn kết thúc với
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    07 hay Hello, World!2. Tuy nhiên, nó không cần thiết.
  • Chúng cũng có thể biểu diễn trong ký hiệu khoa học sử dụng
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    09 hoặc
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    10
  • public static void main(String[] args) {
  • System.out.println(myDoubleScientific);

public static void main(String[] args) { static void main(String[] args) {

char giaTriChar = 'g';  giaTriChar = 'g';

char themDongMoi = '\n'; themDongMoi = '\n';

String giaTriString = "Lập trình Java"; giaTriString = "Lập trình Java";

System.out.println(giaTriChar);.out.println(giaTriChar);

System.out.println(themDongMoi);.out.println(themDongMoi);

System.out.println(giaTriString);.out.println(giaTriString);

}

}  
 

Khi bạn chạy chương trình. Kết quả nhận được là:

    Ok, đến đây bạn đã biết về một số kiểu dữ liệu trong Java.

    Bây giờ, chúng ta sẽ tiếp tìm hiểu về toán tử và hiểu sâu hơn về các kiểu dữ liệu

    Chương I. Phần 4. Toán tử trong Java

    Trong phần hướng dẫn tự học Java này, bạn sẽ tìm hiểu các kiểu toán tử khác nhau trong ngôn ngữ Java.toán tử khác nhau trong ngôn ngữ Java.

    Và tìm hiểu cách các toán tử chúng hoạt động thông qua các ví dụ.

    Toán tử là gì?

    Toán tử là biểu tượng đặc biệt (ký tự đặc biệt) thực hiện các hoạt động trên toán hạng (biến và giá trị).

    Ví dụ, toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    27 sẽ thực hiện cộng các toán hạng.

    Trong phần 3 bạn đã được học cách khai báo biến và gán giá trị cho biến. Bây giờ, bạn sẽ học tiếp cách sử dụng toán tử để thao tác với các biến.

    Chương I. Phần 4.1. Toán tử gán trong Java.

    Video tự học Java 09: Toán tử gán trong Java

    Toán tử gán trong Java được sử dụng để gán giá trị cho biến. Ví dụ: trong Java được sử dụng để gán giá trị cho biến. Ví dụ:

    Hành động này có nghĩa là, giá trị ở phía bên phải được gán cho biến nằm ở phía bên trái. Bạn không thể làm ngược lại.

    Còn nhiều thứ về toán tử gán.

    Tuy nhiên, để thật đơn giản, chúng ta sẽ tìm hiểu đến chúng sau.

    Ví dụ về toán tử gán:

    public static void main(String[] args) { static void main(String[] args) {

    int so1, so2; so1so2;

    // Gán 6 cho so1 

    so1 = 6;6;

    System.out.println(so1); .out.println(so1);

    // Gán giá trị của so1 cho so2

    so2 = so1;

    System.out.println(so2);.out.println(so2);

    }

    }  
     

    Khi bạn chạy chương trình. Kết quả nhận được là:

    Ok, đến đây bạn đã biết về một số kiểu dữ liệu trong Java.

    Bây giờ, chúng ta sẽ tiếp tìm hiểu về toán tử và hiểu sâu hơn về các kiểu dữ liệu

    Chương I. Phần 4. Toán tử trong Java

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    29 Trừ
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    30 Nhân
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    31 Chia
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    32 Lấy phần dư

    Trong phần hướng dẫn tự học Java này, bạn sẽ tìm hiểu các kiểu toán tử khác nhau trong ngôn ngữ Java.

    class ViDuToanTuToanHoc { ViDuToanTuToanHoc {

    public static void main(String[] args) { static void main(String[] args) {

    double so1 = 12.5, so2 = 3.5, ketQua; so1 = 12.5, so2 = 3.5, ketQua;

    Và tìm hiểu cách các toán tử chúng hoạt động thông qua các ví dụ.

    ketQua = so1 + so2;

    System.out.println("so1 + so2 = " + ketQua);.out.println("so1 + so2 = " + ketQua);

    Toán tử là gì?

    ketQua = so1 - so2;

    System.out.println("so1 - so2 = " + ketQua);.out.println("so1 - so2 = " + ketQua);

    Toán tử là biểu tượng đặc biệt (ký tự đặc biệt) thực hiện các hoạt động trên toán hạng (biến và giá trị).

    Ví dụ, toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    27 sẽ thực hiện cộng các toán hạng.

    System.out.println("so1 * so2 = " + ketQua);.out.println("so1 * so2 = " + ketQua);

    Trong phần 3 bạn đã được học cách khai báo biến và gán giá trị cho biến. Bây giờ, bạn sẽ học tiếp cách sử dụng toán tử để thao tác với các biến.

    Chương I. Phần 4.1. Toán tử gán trong Java.

    System.out.println("so1 / so2 = " + ketQua);.out.println("so1 / so2 = " + ketQua);

    Video tự học Java 09: Toán tử gán trong Java

    Toán tử gán trong Java được sử dụng để gán giá trị cho biến. Ví dụ:

    Hành động này có nghĩa là, giá trị ở phía bên phải được gán cho biến nằm ở phía bên trái. Bạn không thể làm ngược lại..out.println("so1 % so2 = " + ketQua);

    }

    }  
     

    Khi bạn chạy chương trình. Kết quả nhận được là:

    Ok, đến đây bạn đã biết về một số kiểu dữ liệu trong Java.
    so1 * so2 = 43.75
    so1 / so2 = 3.5714285714285716
    so1 % so2 = 2.0
     

    Bây giờ, chúng ta sẽ tiếp tìm hiểu về toán tử và hiểu sâu hơn về các kiểu dữ liệu

    Chương I. Phần 4. Toán tử trong Java

    Trong phần hướng dẫn tự học Java này, bạn sẽ tìm hiểu các kiểu toán tử khác nhau trong ngôn ngữ Java.

    Và tìm hiểu cách các toán tử chúng hoạt động thông qua các ví dụ.2.3 + 4.5;

    Toán tử là gì?2.9;
     

    Toán tử là biểu tượng đặc biệt (ký tự đặc biệt) thực hiện các hoạt động trên toán hạng (biến và giá trị).

    Ví dụ, toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    27 sẽ thực hiện cộng các toán hạng.

    class NoiChuoiVoiToanTuCong { NoiChuoiVoiToanTuCong {

    public static void main(String[] args) { static void main(String[] args) {

    Trong phần 3 bạn đã được học cách khai báo biến và gán giá trị cho biến. Bây giờ, bạn sẽ học tiếp cách sử dụng toán tử để thao tác với các biến. chuoi1chuoi2chuoi3ketQua;

    Chương I. Phần 4.1. Toán tử gán trong Java."Bài viết: ";

    Video tự học Java 09: Toán tử gán trong Java"Tự học lập trình Java. ";

    chuoi3 = "One for All";"One for All";

    ketQua = chuoi1 + chuoi2 + chuoi3;

    System.out.println(ketQua);.out.println(ketQua);

    }

    }  
     

    Khi bạn chạy chương trình. Kết quả nhận được là:

    Toán tử gán trong Java được sử dụng để gán giá trị cho biến. Ví dụ:
     

    Hành động này có nghĩa là, giá trị ở phía bên phải được gán cho biến nằm ở phía bên trái. Bạn không thể làm ngược lại.

    Còn nhiều thứ về toán tử gán.

    Tuy nhiên, để thật đơn giản, chúng ta sẽ tìm hiểu đến chúng sau. trong Java thực hiện hoạt động chỉ với một toán hạng.

    Ví dụ về toán tử gán:

    // Gán 6 cho so1 

    System.out.println(so1);

    // Gán giá trị của so1 cho so2

    Chương I. Phần 4.2. Toán tử toán học trong Java

    Toán tử toán học được sử dụng để tính toán như: Cộng, Trừ, Nhân, Chia

    class ViDuToanTuDonPhuong { ViDuToanTuDonPhuong {

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    27 Cộng (Hoặc nối chuỗi)
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    29 Trừ
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    30 Nhân
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    31 Chia
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    32 Lấy phần dư static void main(String[] args) {

    double so = 5.2, ketQua; so = 5.2, ketQua;

    boolean giaTriSai = false; giaTriSai = false;

    Ví dụ về toán tử toán học:.out.println("Kết quả: +so = " + +so);

    // Cộng hai số

    System.out.println ("Kết & nbsp; quả: & nbsp; -so & nbsp; = & nbsp;" & nbsp;+& nbsp; -so);.out.println("Kết quả: -so = " + -so);

    // kết quả: 

    // & nbsp; ++ so & nbsp; tương & nbsp;

    System.out.println ("Kết & nbsp; quả: & nbsp; so ++ & nbsp; = & nbsp;" & nbsp;+& nbsp; ++ so);.out.println("Kết quả: so++ = " + ++so);

    // kết quả: 

    // & nbsp;-so & nbsp; tương & nbsp;

    System.out.println ("Kết & nbsp; quả: & nbsp;-so & nbsp; = & nbsp;" & nbsp;+& nbsp;-so);.out.println("Kết quả: --so = " + --so);

    // kết Quer

    System.out.println ("ket quat:! Giatrisai =" & nbsp;+& nbsp;! Giatrisai);.out.println("Ket qua: !giaTriSai = " + !giaTriSai);

    // & nbsp; ket qua: & nbsp;!

    }

    } & nbsp;
     

    Bạn cũng đó là sử dụng toán tử tă tă tử tă

    Ví dụ:

    ++ a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6// a = 6

    a ++ & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 7// a = 7

    --a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6// a = 6

    a-& nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 5 & nbsp;// a = 5
     

    Đến bây giờ, đó là thể bạn vẫn dễ hiểu bởi vì mọi thứ ônang rất đơn giản.

    TUy Nhiênn, Có Một Sự Khác Biệt Giữa Việc Đặt Toán Tử Tăng, GiảM lÀm tiền Tố Hoặc Hậu Tố.

    Ví dụ:

    class ViDuToanTuDonPhuong2 { ViDuToanTuDonPhuong2 {

    ++ a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6 static void main(String[] args) {

    a ++ & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 7int a = 5;

    System.out.println(a++);.out.println(a++);

    System.out.println(a);.out.println(a);

    System.out.println(++a);.out.println(++a);

    System.out.println(a);.out.println(a);

    --a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6

    } & nbsp;
     

    Bạn cũng đó là sử dụng toán tử tă tă tử tă

    Ví dụ:

    ++ a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6

    a ++ & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 7

    --a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6

    a-& nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 5 & nbsp;

    Đến bây giờ, đó là thể bạn vẫn dễ hiểu bởi vì mọi thứ ônang rất đơn giản.

    TUy Nhiênn, Có Một Sự Khác Biệt Giữa Việc Đặt Toán Tử Tăng, GiảM lÀm tiền Tố Hoặc Hậu Tố.

    public & nbsp; static & nbsp; void & nbsp; chính (chuỗi [] & nbsp; args) & nbsp; {{

    & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;toán tử quan hệ xác định mối quan hệ giữa hai toán hạng.

    }

    Khi bạn chạy chương trình. Kết Quả NHậN ĐượC Là:

    Các toán tử tăng gie

    Chính vì thế, câu lệNH

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    41 Cho ra kết quả
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    42.

    Và Câu lệNH Sau Đào,

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    43 Cho ra Kết Quả
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    44.

    Toán tử tă tă Giảm Được Đặt lÀm tiền tốó hànnh vi ngược lại.

    Khi máiy Đọc Câu lệNH, nó sẽ đun từ trái hát phải.

    Nó sẽ thấy và thực thi toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    35, lưu giá trị mới vào biến
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    46 trước. Sau Đùa Câu Mới ĐổiH Giá Giá Trị
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    46.

    Chương I. Phần 4.5. Toán tử bằng và các

    Video tự học java 13: toán tử quan hệ trong java

    Toán tử bằng và toán tử quan hệ xác đó

    Nó sẽ kiểm tra nếu một toán

    ++ a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6 static void main(String[] args) {

    int so1 = 5, so2 = 6; so1 = 5, so2 = 6;

    if (so1 > so2){ (so1 > so2){

    a ++ & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 7.out.println("Số 1 lớn hơn Số 2.");

    } else{else{

    --a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6.out.println("Số 2 lớn hơn hoặc bằng Số 1");

    }

    }

    } & nbsp;
     

    Bạn cũng đó là sử dụng toán tử tă tă tử tă

    Ví dụ:
     

    ++ a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6

    a ++ & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 7

    --a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6

    a-& nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 5 & nbsp;

    Đến bây giờ, đó là thể bạn vẫn dễ hiểu bởi vì mọi thứ ônang rất đơn giản.

    TUy Nhiênn, Có Một Sự Khác Biệt Giữa Việc Đặt Toán Tử Tăng, GiảM lÀm tiền Tố Hoặc Hậu Tố.

    public & nbsp; static & nbsp; void & nbsp; chính (chuỗi [] & nbsp; args) & nbsp; {{

    & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

    }

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 được sử dụng để so sánh kiểu của một đối tượng với một kiểu xác định nào đó.

    Ví dụ:

    public static void main(String[] args) { static void main(String[] args) {

    String test = "abcxyz"; test = "abcxyz";

    boolean result; result;

    ++ a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6instanceof String;

    System.out.println(result);.out.println(result);

    }

    } & nbsp;
     

    Bạn cũng đó là sử dụng toán tử tă tă tử tă

    Ví dụ:

    ++ a & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 6

    a ++ & nbsp; & nbsp; & nbsp; // & nbsp; a & nbsp; = & nbsp; 7

    Chương I. Phần 4.6 Toán tử Logic

    Video tự học Java 14: Toán tử Logic trong Java


     

    Chúng ta có hai toán tử logic trong Java đó là,

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    74 và
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    75toán tử logic trong Java đó là,
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    74 và
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    75

    Chúng được sử dụng trong biểu thức điều kiện boolean. Đây là cách chúng làm việc:

    • if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      74 (toán tử OR): Trả về giá trị "Hello, World!"4 nếu ít nhất một điều kiện là "Hello, World!"4OR): Trả về giá trị "Hello, World!"4 nếu ít nhất một điều kiện là "Hello, World!"4
    • if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      75 ( toán tử AND): Trả về giá trị "Hello, World!"4 nếu tất cả điều kiện "Hello, World!"4AND): Trả về giá trị "Hello, World!"4 nếu tất cả điều kiện "Hello, World!"4

    Ví dụ về toán tử logic:

    public static void main(String[] args) { static void main(String[] args) {

    int so1 = 1, so2 = 2, so3 = 9;  so1 = 1, so2 = 2, so3 = 9;

    boolean ketQua; ketQua;

    // Ít nhất một biểu thức đúng để trả về giá trị true

    ketQua = (so1 > so2) || (so3 > so1);

    // Kết quả sẽ là true. Bởi vì so3 > so1

    System.out.println(ketQua);.out.println(ketQua);

    // Tất cả biểu thức phải đúng để trả về giá trị true    

    ketQua = (so1 > so2) && (so3 > so1);

    // Kết quả nhận được là false vì biểu thức so1 > so2 bị sai

    System.out.println(ketQua);.out.println(ketQua);

    }

    }  
     

    Khi chúng ta chạy chương trình, kết quả nhận được là:

    Chú ý!  

      Toán tử logic thường xuyên được sử dụng trong vòng lặp.


     

    Chương I. Phần 4.7. Toán tử Ternary

    Video tự học Java 15: Toán tử Ternary trong Java

    Toán tử Ternary (hay còn gọi là toán tử 3 ngôi)

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    82 là cách viết tắt của câu lệnh
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    83.Ternary (hay còn gọi là toán tử 3 ngôi)
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    82 là cách viết tắt của câu lệnh
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    83.

    Cú pháp của toán tử Ternary là:

    bienKetQua = BieuTHucDieuKien ? bieuThuc1 : bieuThuc2

    Đây là cách toán tử ternary làm việc:

    • Nếu
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      84 là "Hello, World!"4 thì thực hiện
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      86
    • Ngược lại thì thực hiện
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      87
    • Sau đó giá trị trả về gán vào
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      88

    Ví dụ về toán tử Ternary:

    class ViDuToanTuTernary { ViDuToanTuTernary {

    public static void main(String[] args) { static void main(String[] args) {

    int tuoi = 18; tuoi = 18;

    String ketQua; ketQua;

    ketQua = (tuoi >= 18) ? "Được xem phim 18+" : "Chưa được xem phim 18+";18? "Được xem phim 18+" : "Chưa được xem phim 18+";

    System.out.println(ketQua);.out.println(ketQua);

    }

    }  
     

    Khi chúng ta chạy chương trình, kết quả nhận được là:

    Chú ý!  

      Toán tử logic thường xuyên được sử dụng trong vòng lặp.

    Chương I. Phần 4.7. Toán tử Ternary

    Video tự học Java 15: Toán tử Ternary trong Java

    Toán tử Ternary (hay còn gọi là toán tử 3 ngôi)

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    82 là cách viết tắt của câu lệnh
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    83.

    Cú pháp của toán tử Ternary là:output) và lấy dữ liệu từ người dùng (input)

    Đây là cách toán tử ternary làm việc:

    Nếu

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    84 là "Hello, World!"4 thì thực hiện
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    86

    • Ngược lại thì thực hiện
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      87
    • Sau đó giá trị trả về gán vào
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      88
    • Sau đó giá trị trả về gán vào
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      88

    Ví dụ về toán tử Ternary:

    public static void main(String[] args) { static void main(String[] args) {

    ketQua = (tuoi >= 18) ? "Được xem phim 18+" : "Chưa được xem phim 18+";.out.println("Tự học Lập trình Java (One for All).");

    }

    }  
     

    Khi chúng ta chạy chương trình, kết quả nhận được là:

    Chú ý!  
     

      Toán tử logic thường xuyên được sử dụng trong vòng lặp.

    Chương I. Phần 4.7. Toán tử Ternary
    • Video tự học Java 15: Toán tử Ternary trong Java
    • Toán tử Ternary (hay còn gọi là toán tử 3 ngôi)
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      82 là cách viết tắt của câu lệnh
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      83.
    • Cú pháp của toán tử Ternary là:

    Đây là cách toán tử ternary làm việc:print()println():

    public static void main(String[] args) { static void main(String[] args) {

    System.out.println("1. println ");.out.println("1. println ");

    System.out.println("2. println ");.out.println("2. println ");

    Nếu

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    84 là "Hello, World!"4 thì thực hiện
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    86.out.print("1. print ");

    System.out.print("2. print");.out.print("2. print");

    }

    }  
     

    Khi chúng ta chạy chương trình, kết quả nhận được là:

    Chú ý!  
    2. println
    1. print 2. print
     

      Toán tử logic thường xuyên được sử dụng trong vòng lặp.printf() trong Java.

    Chương I. Phần 4.7. Toán tử Ternary

    public static void main(String[] args) { static void main(String[] args) {

    Double soAm = -6.9; soAm = -6.9;

    System.out.println(5);.out.println(5);

    System.out.println(soAm);.out.println(soAm);

    }

    }  
     

    Khi chúng ta chạy chương trình, kết quả nhận được là:

    Chú ý!  

      Toán tử logic thường xuyên được sử dụng trong vòng lặp.

    public static void main(String[] args) { static void main(String[] args) {

    Double soAm = -6.9; soAm = -6.9;

    Chương I. Phần 4.7. Toán tử Ternary.out.println("Tự học " + "Lập trình Java.");

    Video tự học Java 15: Toán tử Ternary trong Java.out.println("Số = " + soAm);

    }

    }  
     

    Khi chúng ta chạy chương trình, kết quả nhận được là:

    Chú ý!  
    Số = -6.9
     

      Toán tử logic thường xuyên được sử dụng trong vòng lặp.

    Chương I. Phần 4.7. Toán tử Ternary

    Video tự học Java 15: Toán tử Ternary trong Java

    Ở đây vì

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    95 không được đặt trong dấu nháy nên nó được đánh giá như một biến.

    Sau đó, giá trị //1 được trình biên dịch chuyển thành

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15.

    Cuối cùng nó được nối vào chuỗi

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    98 và in tất cả ra màn hình.

    Chương I. Phần 5.2. Java input

    Có một số cách để có được đầu vào (input) từ người dùng trong Java.input) từ người dùng trong Java.

    Trong bài này, bạn sẽ học cách lấy đầu vào bằng cách sử dụng đối tượng

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    99.
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    99
    .

    Để làm điều đó, bạn cần import class Scanner bằng cách sử dụng cú pháp:

    import java.util.Scanner;   java.util.Scanner;
     

    Sau đó, chúng ta sẽ tạo một đối tượng của lớp Scanner sẽ được sử dụng để nhận đầu vào từ người dùng.

    Scanner input = new Scanner(System.in); input = new Scanner(System.in);

    int soInput = input.nextInt();   soInput = input.nextInt();
     

    Ví dụ lấy input từ người dùng:

    import java.util.Scanner; java.util.Scanner;

    class ViDuInput1 { ViDuInput1 {

    public static void main(String[] args) { static void main(String[] args) {

    // Tạo đối tượng input

    Scanner input = new Scanner(System.in);  input = new Scanner(System.in);

    // Xuất ra thông báo cho người dùng nhập dữ liệu

    System.out.print("Nhập vào một số nguyên: ");.out.print("Nhập vào một số nguyên: ");

    // Lấy dữ liệu người dùng vừa nhập

    // Gán vào biến soNguyen

    int soNguyen = input.nextInt();  soNguyen = input.nextInt();

    // In dữ liệu vừa lấy được ra màn hình

    System.out.println("Số bạn vừa nhập là: " + soNguyen);.out.println("Số bạn vừa nhập là: " + soNguyen);

    }

    }  
     

    Khi chạy chương trình, output sẽ tương tự thế này:

    Nhập vào một số nguyên: 6996 Số bạn vừa nhập là: 6996  
    Số bạn vừa nhập là: 6996
     

    Ở đây,

    Sau khi đối tượng "Hello Word"00 của class

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    99 được tạo. Phương thức "Hello Word"02 của class
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    99 sẽ lấy dữ liệu do người dùng nhập vào.

    Để lấy các giá trị HelloWorld.java6, //4, //1 và

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 thì bạn cần sử dụng các phương thức tương ứng như: "Hello Word"08, "Hello Word"09, "Hello Word"10 và "Hello Word"11

    Ví dụ lấy dữ liệu kiểu float, double và String từ người dùng:

    public static void main(String[] args) {  static void main(String[] args) {

    Scanner input = new Scanner(System.in); input = new Scanner(System.in);

    // Lấy số float từ người dùng

    System.out.print("Nhập số Float: ");.out.print("Nhập số Float: ");

    float soFloat = input.nextFloat(); soFloat = input.nextFloat();

    System.out.println("Số Float bạn vừa nhập là: " + soFloat); .out.println("Số Float bạn vừa nhập là: " + soFloat);

    // Lấy số double từ người dùng

    System.out.print("Nhập số double: ");.out.print("Nhập số double: ");

    double soDouble = input.nextDouble(); soDouble = input.nextDouble();

    System.out.println("Số Double bạn vừa nhập là: " + soDouble);.out.println("Số Double bạn vừa nhập là: " + soDouble);

    // Lấy chuỗi từ người dùng

    System.out.print("Nhập vào một chuỗi: ");.out.print("Nhập vào một chuỗi: ");

    String chuoiString = input.next(); chuoiString = input.next();

    System.out.println("Chuỗi bạn vừa nhập là: " + chuoiString);.out.println("Chuỗi bạn vừa nhập là: " + chuoiString);

    }

    }  
     

    Khi chạy chương trình, output sẽ tương tự thế này:

    Nhập vào một số nguyên: 6996 Số bạn vừa nhập là: 6996  
    Số Float bạn vừa nhập là: 6.9
    Nhập số Double: -9.6
    Số Double bạn vừa nhập là: -9.6
    Nhập vào một chuỗi: Tôi tự học Lập trình Java
    Chuỗi bạn vừa nhập là: Tôi tự học Lập trình Java

    Ở đây,Stack Overflow

    Sau khi đối tượng "Hello Word"00 của class if (BieuThucDieuKien) { // Các câu lệnh ... }99 được tạo. Phương thức "Hello Word"02 của class if (BieuThucDieuKien) { // Các câu lệnh ... }99 sẽ lấy dữ liệu do người dùng nhập vào.

    Để lấy các giá trị HelloWorld.java6, //4, //1 và

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 thì bạn cần sử dụng các phương thức tương ứng như: "Hello Word"08, "Hello Word"09, "Hello Word"10 và "Hello Word"11Expression (Biểu thức), Statement (Câu lệnh) và Block (Khối) trong Java.

    Ví dụ lấy dữ liệu kiểu float, double và String từ người dùng:

    public static void main(String[] args) {

    // Lấy số float từ người dùng

    System.out.print("Nhập số Float: "); bao gồm các biến, toán tử, listerals và các cuộc gọi phương thức được ước tính thành một giá trị duy nhất.

    System.out.println("Số Float bạn vừa nhập là: " + soFloat);

    // Lấy số double từ người dùng

    System.out.print("Nhập số double: "); a = 6.9, b = 9.6, ketQua;

    System.out.println("Số Double bạn vừa nhập là: " + soDouble);6.5;
     

    // Lấy chuỗi từ người dùng

    System.out.print("Nhập vào một chuỗi: ");.out.println("Số 1 bằng Số 2");
     

    System.out.println("Chuỗi bạn vừa nhập là: " + chuoiString);

    Nhập số Float: 6.9 Số Float bạn vừa nhập là: 6.9 Nhập số Double: -9.6 Số Double bạn vừa nhập là: -9.6 Nhập vào một chuỗi: Tôi tự học Lập trình Java Chuỗi bạn vừa nhập là: Tôi tự học Lập trình Java

    Như đã nói, có nhiều cách để lấy dữ liệu từ người dùng. Bạn có thể tham khảo thêm tại thảo luận trên Stack Overflow

    Chương I. Phần 6. Biểu thức, Câu lệnh và Khối trong Java là tất cả mọi thứ tạo nên một đơn vị hoàn chỉnh.

    Trong bài viết này, bạn sẽ tìm hiểu về Expression (Biểu thức), Statement (Câu lệnh) và Block (Khối) trong Java.

    Chúng ta đã sử dụng chúng qua các ví dụ mà không cần hiểu gì quá nhiều.

    Phần này chỉ giúp bạn nhận biết rõ hơn về chúng.

    Chương I. Phần 6.1. Biểu thức trong Java

    Biểu thức bao gồm các biến, toán tử, listerals và các cuộc gọi phương thức được ước tính thành một giá trị duy nhất.

    Trong bài viết này, bạn sẽ tìm hiểu về Expression (Biểu thức), Statement (Câu lệnh) và Block (Khối) trong Java.

    Chúng ta đã sử dụng chúng qua các ví dụ mà không cần hiểu gì quá nhiều.

    Phần này chỉ giúp bạn nhận biết rõ hơn về chúng.

    Chương I. Phần 6.1. Biểu thức trong Java

    Ngoài ra, chúng ta còn có các câu lệnh điều khiển, phần này các bạn sẽ được học trong phần sau.

    Chương I. Phần 6.3. Khối trong Java

    Một khối trong Java (Java Block) là một nhóm các câu lệnh được bao bọc bởi cặp dấu ngoặc nhọn "Hello Word"25khối trong Java (Java Block) là một nhóm các câu lệnh được bao bọc bởi cặp dấu ngoặc nhọn "Hello Word"25

    Ví dụ:

    public static void main(String[] args) { static void main(String[] args) {

    String ngoNguLapTrinh = "Java"; ngoNguLapTrinh = "Java";

    if (thuongHieu == "Java") { // Bắt đầu block (thuongHieu == "Java") { // Bắt đầu block

    System.out.print("Học ");.out.print("Học ");

    System.out.print("Java ngay!");.out.print("Java ngay!");

    } // Kết thúc block// Kết thúc block

    }

    }  
     

    Ở đây, chúng ta có 2 câu lệnh "Hello Word"26 và "Hello Word"27nằm bên trong một khối.

    Lưu ý!

    Một khối cũng có thể không có câu lệnh nào.

    Đến đây, bạn đã cơ bản làm quen bước đầu với ngôn ngữ lập trình Java.

    Phần tiếp theo, chúng ta sẽ đi sâu hơn về một phần rất quan trọng trong lập trình, không chỉ riêng ngôn ngữ Java.

    CHƯƠNG II: HỌC LẬP TRÌNH CẤU TRÚC ĐIỀU KHIỂN TRONG JAVA

    Trong phần này, bạn sẽ được học về các cấu trúc điều khiển trong lập trình Java như:cấu trúc điều khiển trong lập trình Java như:

    • Cấu trúc if...elseif...else
    • Câu lệnh switchswitch
    • Vòng lặp forfor
    • Vòng lặp for...eachfor...each
    • Vòng lặp whilewhile
    • Câu lệnh breakbreak
    • Câu lệnh continuecontinue

    Chúng ta sẽ đi ngay vào phần đầu tiên.

    Chương II. Phần 1: Cấu trúc if...else trong Java


    Video tự học Java 17: Cấu trúc IF ELSE trong Java

    Trong phần hướng dẫn tự học lập trình Java này, bạn sẽ học sử dụng hai câu lệnh if và if...else để kiểm soát dòng chảy của chương trình.câu lệnh ifif...else để kiểm soát dòng chảy của chương trình.

    Trong lập trình, chúng ta thường chỉ muốn thực thi một phần code nào đó nếu điều kiện kiểm tra là đúng hoặc sai (true hay false).

    Nhưng trường hợp như thế này chúng ta sẽ cần cấu trúc điều khiển.

    Chương II. Phần 1.1. Câu lệnh if

    Cú pháp của câu lệnh if trong Java là:if trong Java là:

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }

    Trong đó:

    • if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      84: Là biểu thức logic sẽ trả về giá trị "Hello, World!"4 hoặc "Hello, World!"5
    • Nếu 
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      84 trả về giá trị là "Hello, World!"4 thì các câu lệnh bên trong khối được thực thi.
    • Nếu
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      84 trả về giá trị là "Hello, World!"5 thì chương trình sẽ bỏ qua các câu lệnh trong khối.

    Hướng dẫn java html - javahtml

    Lưu đồ thuật toán if trong Java

    Ví dụ về câu lệnh if trong Java:if trong Java:

    public static void main(String[] args) { static void main(String[] args) {

    int so = 10; so = 10;

    if (so > 0) { (so > 0) {

    System.out.println("Số Dương");.out.println("Số Dương");

    }

    }  .out.println("Câu lệnh này luôn được thực thi.");

    }

    }  
     

    Ở đây, chúng ta có 2 câu lệnh "Hello Word"26 và "Hello Word"27nằm bên trong một khối.

    Lưu ý!
     

    Một khối cũng có thể không có câu lệnh nào.

    • Đến đây, bạn đã cơ bản làm quen bước đầu với ngôn ngữ lập trình Java.
    • Phần tiếp theo, chúng ta sẽ đi sâu hơn về một phần rất quan trọng trong lập trình, không chỉ riêng ngôn ngữ Java.

    CHƯƠNG II: HỌC LẬP TRÌNH CẤU TRÚC ĐIỀU KHIỂN TRONG JAVA

    Trong phần này, bạn sẽ được học về các cấu trúc điều khiển trong lập trình Java như:

    Cấu trúc if...else

    Câu lệnh switch

    • Vòng lặp for
    • Vòng lặp for...each
    • Vòng lặp while

    Câu lệnh break

    Câu lệnh continue

    Chúng ta sẽ đi ngay vào phần đầu tiên.

    Chương II. Phần 1: Cấu trúc if...else trong Java

    Video tự học Java 17: Cấu trúc IF ELSE trong Java

    Trong phần hướng dẫn tự học lập trình Java này, bạn sẽ học sử dụng hai câu lệnh if và if...else để kiểm soát dòng chảy của chương trình.

    } else {else {

    Trong lập trình, chúng ta thường chỉ muốn thực thi một phần code nào đó nếu điều kiện kiểm tra là đúng hoặc sai (true hay false).

    }  
     


    Hướng dẫn java html - javahtml

    Ở đây, chúng ta có 2 câu lệnh "Hello Word"26 và "Hello Word"27nằm bên trong một khối.

    Lưu ý!if...else trong Java:

    class ViDuCauLenhIfElse { ViDuCauLenhIfElse {

    public static void main(String[] args) {         static void main(String[] args) {        

    int so = 10; so = 10;

    if (so > 0) { (so > 0) {

    Một khối cũng có thể không có câu lệnh nào..out.println("Số Dương.");

    }

    else { {

    }  .out.println("Số Âm.");

    }

    }  .out.println("Câu lệnh này luôn được thực thi.");

    }

    }  
     

    Ở đây, chúng ta có 2 câu lệnh "Hello Word"26 và "Hello Word"27nằm bên trong một khối.

    Lưu ý!
     

    Một khối cũng có thể không có câu lệnh nào.

    Đến đây, bạn đã cơ bản làm quen bước đầu với ngôn ngữ lập trình Java.

    Phần tiếp theo, chúng ta sẽ đi sâu hơn về một phần rất quan trọng trong lập trình, không chỉ riêng ngôn ngữ Java.

    Lưu ý!
     

    Một khối cũng có thể không có câu lệnh nào.

    Đến đây, bạn đã cơ bản làm quen bước đầu với ngôn ngữ lập trình Java.

    Phần tiếp theo, chúng ta sẽ đi sâu hơn về một phần rất quan trọng trong lập trình, không chỉ riêng ngôn ngữ Java.

    CHƯƠNG II: HỌC LẬP TRÌNH CẤU TRÚC ĐIỀU KHIỂN TRONG JAVAif else if.

    Trong phần này, bạn sẽ được học về các cấu trúc điều khiển trong lập trình Java như:

    // codes

    }

    else if(BieuThucDieuKien2) { if(BieuThucDieuKien2) {

    // codes

    }

    else if (BieuThucDieuKien3) { if (BieuThucDieuKien3) {

    // codes

    }

    .

    .

    else { {

    // codes

    }  
     

    Câu lệnh if được đánh giá từ trên xuống dưới.if được đánh giá từ trên xuống dưới.

    Nếu biểu thức điều kiện nào là "Hello, World!"4, máy tính thực thi code bên trong khối đó. Sau đó nó thoát ra khỏi cấu trúc if else if.if else if.

    Nếu tất cả biểu thức điều kiện là "Hello, World!"5, code bên trong khối else sẽ được thực thi.

    Ví dụ sử dụng câu lệnh if...else...if trong Java:if...else...if trong Java:

    public static void main(String[] args) {    static void main(String[] args) {   

    int so = 0; so = 0;

    if (so > 0) { (so > 0) {

    System.out.println("Số Dương."); .out.println("Số Dương.");

    }

    else if (so  if (so < 0) {

    System.out.println("Số Âm.");.out.println("Số Âm.");

    }

    else { {

    System.out.println("Số Âm.");.out.println("Số 0.");

    }

    }  
     

    Câu lệnh if được đánh giá từ trên xuống dưới.

    Nếu biểu thức điều kiện nào là "Hello, World!"4, máy tính thực thi code bên trong khối đó. Sau đó nó thoát ra khỏi cấu trúc if else if.

    Nếu tất cả biểu thức điều kiện là "Hello, World!"5, code bên trong khối else sẽ được thực thi.

    Ví dụ sử dụng câu lệnh if...else...if trong Java:

    System.out.println("Số Dương.");

    }NESTED IF)

    System.out.println("Số Âm.");

    System.out.println("Số 0."); ViDuIfElseLongNhau {

    public static void main(String[] args) { static void main(String[] args) {

    int a = 1, b = 5, c = 8, max; a = 1, b = 5, c = 8, max;

    if (a >= b) { (a >= b) {

    if (a >= c) { (a >= c) {

    max = a;

    Khi chạy chương trình, kết quả nhận được là:else {

    max = c;

    }

    } else {else {

    if (b >= c) { (b >= c) {

    max = b;

    } else {else {

    max = c;

    }

    }

    System.out.println("Số Âm.");.out.println("Số lớn nhất là: " + max);

    }

    }  
     

    Câu lệnh if được đánh giá từ trên xuống dưới.

    Nếu biểu thức điều kiện nào là "Hello, World!"4, máy tính thực thi code bên trong khối đó. Sau đó nó thoát ra khỏi cấu trúc if else if.


    Nếu tất cả biểu thức điều kiện là "Hello, World!"5, code bên trong khối else sẽ được thực thi.

    Ví dụ sử dụng câu lệnh if...else...if trong Java:câu lệnh switch trong Java. (Hay còn gọi là Cấu trúc Switch Case)

    System.out.println("Số Dương."); "Hello Word"56 có thể được sử dụng để thay thế cho câu lệnh "Hello Word"57 để đạt được tính dễ đọc hơn.

    }switch trong Java:

    System.out.println("Số Âm."); (bien / BieuThucDieuKien) {

    case value1: value1:

    // statements

    break;;

    case value2: value2:

    // statements

    System.out.println("Số 0.");;

    .. .. ...

    .. .. ...

    default:

    // statements

    }  
     

    Câu lệnh if được đánh giá từ trên xuống dưới.

    Nếu biểu thức điều kiện nào là "Hello, World!"4, máy tính thực thi code bên trong khối đó. Sau đó nó thoát ra khỏi cấu trúc if else if.

    • Nếu tất cả biểu thức điều kiện là "Hello, World!"5, code bên trong khối else sẽ được thực thi.
    • Ví dụ sử dụng câu lệnh if...else...if trong Java:

    System.out.println("Số Dương.");

    }

    System.out.println("Số Âm.");

    Hướng dẫn java html - javahtml

    System.out.println("Số 0.");

    Khi chạy chương trình, kết quả nhận được là:

    • Chương II. Phần 1.4. Câu lệnh if else lồng nhau trong Java
    • Video tự học Java 19: Cấu trúc NESTED IF trong Java
    • Trong Java, bạn hoàn toàn có thể đặc câu lệnh
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      66 bên trong câu lệnh
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      66 khác.
    • > LƯU Ý: Code trong Video sẽ không giống hoàn toàn trong bài viết bởi mình mong muốn bạn xem video thì học được logic. Sau đó đọc ví dụ trong bài viết để kiểm chứng kiến thức vừa học. Nếu hiểu -> Đó là một thành công.

    Nó được gọi là câu lệnh

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    66 lồng nhau (Hay là NESTED IF)

    class ViDuCauLenhSwitch { ViDuCauLenhSwitch {

    public static void main(String[] args) { static void main(String[] args) {

    int soChoNgoi = 4; soChoNgoi = 4;

    String loaiXe; loaiXe;

    switch (soChoNgoi) { (soChoNgoi) {

    case 2: 2:

    Ví dụ câu lệnh if else if lồng nhau để tìm số lớn nhất trong 3 số nguyên cho trước:"Xe Thể thao";

    break;;

    case 4: 4:

    loaiXe = "Sedan";"Sedan";

    break;;

    case 7: 7:

    loaiXe = "SUV";"SUV";

    break;;

    default:

    class ViDuIfElseLongNhau {"Xe khác";

    break;;

    }

    System.out.println(loaiXe);.out.println(loaiXe);

    }

    }  
     

    Câu lệnh if được đánh giá từ trên xuống dưới.

    Nếu biểu thức điều kiện nào là "Hello, World!"4, máy tính thực thi code bên trong khối đó. Sau đó nó thoát ra khỏi cấu trúc if else if.

    Nếu tất cả biểu thức điều kiện là "Hello, World!"5, code bên trong khối else sẽ được thực thi.

    Ví dụ sử dụng câu lệnh if...else...if trong Java:

    System.out.println("Số Dương.");

    }

    import java.util.Scanner; java.util.Scanner;

    class MayTinhDonGian { MayTinhDonGian {

    public static void main(String[] args) { static void main(String[] args) {

    char phepTinh; phepTinh;

    System.out.println("Số Âm."); so1so2ketQua;

    Scanner scanner = new Scanner(System.in); scanner = new Scanner(System.in);

    System.out.println("Số 0.");.out.print("Chọn phép tính (+, -, * hoặc /): ");

    phepTinh = scanner.next().charAt(0);scanner.next().charAt(0);

    System.out.print("Nhập Số 1 và Số 2: "); .out.print("Nhập Số 1 và Số 2: ");

    so1 = scanner.nextDouble();scanner.nextDouble();

    so2 = scanner.nextDouble();scanner.nextDouble();

    switch (phepTinh) { (phepTinh) {

    case '+': '+':

    ketQua = so1 + so2;

    System.out.print(so1 + " + " + so2 + " = " + ketQua);.out.print(so1 + " + " + so2 + " = " + ketQua);

    break;;

    case '-': '-':

    ketQua = so1 - so2;

    System.out.print(so1 + " - " + so2 + " = " + ketQua);.out.print(so1 + " - " + so2 + " = " + ketQua);

    break;;

    case '*': '*':

    ketQua = so1 * so2;

    System.out.print(so1 + " * " + so2 + " = " + ketQua);.out.print(so1 + " * " + so2 + " = " + ketQua);

    break;;

    case '/': '/':

    ketQua = so1 / so2;

    System.out.print(so1 + " / " + so2 + " = " + ketQua);.out.print(so1 + " / " + so2 + " = " + ketQua);

    break;;

    default:

    System.out.println("Phép tính không hợp lệ"); .out.println("Phép tính không hợp lệ");

    break;;

    }       

    }

    }

    Khi bạn chạy chương trình, out sẽ tương tự như thế này:

    Chọn phép tính (+, -, * hoặc /): * Nhập Số 1 và Số 2: 6 9 6 * 9 = 54  
    Nhập Số 1 và Số 2: 6
    9
    6 * 9 = 54
     

    Chương II. Phần 3: Vòng lặp for trong Java

    Vòng lặp được sử dụng trong lập trình để lặp lại một hành động (khối code) cụ thể.

    Trong phần hướng dẫn tự học Java này, bạn sẽ tìm hiểu để tạo ra một vòng lặp trong lập trình.

    Chương II. Phần 3.1. Vòng lặp for là gì?

    Vòng lặp for là một vòng lặp đơn giản, thường xuyên được sử dụng trong lập trình Java. là một vòng lặp đơn giản, thường xuyên được sử dụng trong lập trình Java.

    Vòng lặp for thực hiện một khối code cho đến khi điều kiện đánh giá thành false.

    Cú pháp của vòng lặp for trong Java:

    for (KhoiTaoBienDem; BieuThucDieuKien; CapNhatBienDem){ (KhoiTaoBienDem; BieuThucDieuKien; CapNhatBienDem){

    // Code thực thi hành động nào đó

    }  
     

    Để hiểu vòng lặp for trong Java hoạt động như thế nào, chúng ta hãy xem lưu đồ thuật toán sau:vòng lặp for trong Java hoạt động như thế nào, chúng ta hãy xem lưu đồ thuật toán sau:

    Hướng dẫn java html - javahtml

    Lưu đồ thuật toán vòng lặp for trong Java

    Ví dụ về vòng lặp for trong Java:

    // Chương trình in ra số từ 1 đến 5

    class ViDuVongLapFor { ViDuVongLapFor {

    public static void main(String[] args) { static void main(String[] args) {

    for (int i = 1; i  (int i = 1; i <= 5; ++i) {

    System.out.println("Số " + i); .out.println("Số " + i);

    }

    }

    }  
     

    Để hiểu vòng lặp for trong Java hoạt động như thế nào, chúng ta hãy xem lưu đồ thuật toán sau:

    Lưu đồ thuật toán vòng lặp for trong Java

    • Ví dụ về vòng lặp for trong Java:
    • // Chương trình in ra số từ 1 đến 5
    • System.out.println("Số " + i);
    • Khi chạy chương trình, chúng ta nhận được kết quả:
    • Giải thích chương trình vòng lặp for:
    • Chúng ta khởi tạo giá trị "Hello Word"79
    • Thực hiện đánh giá biểu thức "Hello Word"80. Nếu "Hello, World!"4 thì thực hiện câu lệnh "Hello Word"82 bên trong.

    Sau đó, update điều kiện, thực thi "Hello Word"83.

    Bây giờ, "Hello Word"84 có giá trị là "Hello Word"85, "Hello Word"84 vẫn nhỏ hơn hoặc bằng

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    42.

    Tiếp tục thực hiện câu lệnh "Hello Word"82 ViDuVongLapFor2 {

    public static void main(String[] args) { static void main(String[] args) {

    int tong = 0; tong = 0;

    for (int i = 1; i  (int i = 1; i <= 100; ++i) {

    tong += i;     // sum = sum + i// sum = sum + i

    }

    }.out.println("Tổng = " + tong);

    }

    }  
     

    Để hiểu vòng lặp for trong Java hoạt động như thế nào, chúng ta hãy xem lưu đồ thuật toán sau:

    Lưu đồ thuật toán vòng lặp for trong Java

    • Ví dụ về vòng lặp for trong Java:
    • // Chương trình in ra số từ 1 đến 5
    • System.out.println("Số " + i);
    • Khi chạy chương trình, chúng ta nhận được kết quả:
    • Chúng ta khởi tạo giá trị "Hello Word"79
    • Thực hiện đánh giá biểu thức "Hello Word"80. Nếu "Hello, World!"4 thì thực hiện câu lệnh "Hello Word"82 bên trong.

    Sau đó, update điều kiện, thực thi "Hello Word"83.

    Bây giờ, "Hello Word"84 có giá trị là "Hello Word"85, "Hello Word"84 vẫn nhỏ hơn hoặc bằng

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    42.

    Tiếp tục thực hiện câu lệnh "Hello Word"82

    class ViDuVongLapForVoCuc { ViDuVongLapForVoCuc {

    public static void main(String[] args) { static void main(String[] args) {

    for (int i = 1; i  (int i = 1; i <= 10; --i) {

    ....out.println("Tự học JAVA Không phải JAV");

    }

    }

    }  
     

    Để hiểu vòng lặp for trong Java hoạt động như thế nào, chúng ta hãy xem lưu đồ thuật toán sau:

    Lưu đồ thuật toán vòng lặp for trong Java

    Ví dụ về vòng lặp for trong Java:

    // Chương trình in ra số từ 1 đến 5

    System.out.println("Số " + i);

    Khi chạy chương trình, chúng ta nhận được kết quả:

    Giải thích chương trình vòng lặp for:

    Bây giờ, hãy cùng tìm hiểu về vòng lặp for - each trong Java.

    Chương II. Phần 4: Vòng lặp for each trong Java

    Vòng lặp for each trong Java là vòng lặp chuyên được sử dụng để lặp qua các mảng, tập hợp. là vòng lặp chuyên được sử dụng để lặp qua các mảng, tập hợp.

    Vòng lặp for each còn được gọi là Vòng lặp for tăng cường. còn được gọi là Vòng lặp for tăng cường.

    Đây là một ví dụ để lặp qua các phần tử của một mảng bằng cách sử dụng vòng lặp for tiêu chuẩn:

    class ViDuVongLapForTieuChuan { ViDuVongLapForTieuChuan {

    public static void main(String[] args) { static void main(String[] args) {

    char[] mangKyTu = {'t', 'u', 'h', 'o', 'c'};[] mangKyTu = {'t''u''h''o''c'};

    for (int i = 0; i  (int i = 0; i < mangKyTu.length; ++ i) {

    System.out.println(mangKyTu[i]);.out.println(mangKyTu[i]);

    }

    }

    }  
     

    Và, thay vì sử dụng vòng lặp for tiêu chuẩn.

    Java cung cấp một vòng lặp for each để chuyên làm những việc tương tự như thế này.

    class ViDuVongLapForEach { ViDuVongLapForEach {

    public static void main(String[] args) {  static void main(String[] args) {

    char[] mangKyTu = {'t', 'u', 'h', 'o', 'c'};[] mangKyTu = {'t''u''h''o''c'};

    // Vòng lặp for each

    for (char kytu: mangKyTu) { (char kytu: mangKyTu) {

    System.out.println(kytu);.out.println(kytu);

    }

    }

    }  
     

    Và, thay vì sử dụng vòng lặp for tiêu chuẩn.

    Java cung cấp một vòng lặp for each để chuyên làm những việc tương tự như thế này.

    public static void main(String[] args) {

    // Vòng lặp for each

    Khi chạy cả hai vòng lặp này, chúng ta được một kết quả tương tự:cú pháp của vòng lặp for each xem nào:

    for (data_type item: collection){ (data_type item: collection){

    }  
     

    Và, thay vì sử dụng vòng lặp for tiêu chuẩn.

    • Java cung cấp một vòng lặp for each để chuyên làm những việc tương tự như thế này.
    • public static void main(String[] args) {
    • // Vòng lặp for each

    Khi chạy cả hai vòng lặp này, chúng ta được một kết quả tương tự:

    Việc sử dụng vòng lặp for each dễ viết hơn và làm cho code của bạn dễ đọc hơn.

    Do đó, người ta khuyến nghị sử dụng vòng lặp for each hơn vòng lặp for tiêu chuẩn (bất cứ khi nào có thể)

    class TinhTongPhanTuTrongMang { TinhTongPhanTuTrongMang {

    public static void main(String[] args) { static void main(String[] args) {

            int[] mangSoNguyen = {2, 0, 2, 0, 0, 3};int[] mangSoNguyen = {202, 0, 03};

    int tong = 0; tong = 0;

    Chương II. Phần 4.1. Cú pháp vòng lặp for each trong Java (int soNguyen: mangSoNguyen) {

    tong += soNguyen;

    }

    }  .out.println("Tổng = " + tong);

    }

    }  
     

    Và, thay vì sử dụng vòng lặp for tiêu chuẩn.

    Java cung cấp một vòng lặp for each để chuyên làm những việc tương tự như thế này.

    public static void main(String[] args) {

    // Vòng lặp for each

    • Khi chạy cả hai vòng lặp này, chúng ta được một kết quả tương tự:
    • Việc sử dụng vòng lặp for each dễ viết hơn và làm cho code của bạn dễ đọc hơn.
    • Do đó, người ta khuyến nghị sử dụng vòng lặp for each hơn vòng lặp for tiêu chuẩn (bất cứ khi nào có thể)
    • Chương II. Phần 4.1. Cú pháp vòng lặp for each trong Java
    • Ở trên chúng ta đã thử làm ví dụ bằng vòng lặp for each. Bây giờ, hãy phân tích cú pháp của vòng lặp for each xem nào:
    • Trong đó:
    • Hello, World!11 là kiểu dữ liệu của item
    • Hello, World!12 là tên đại diện cho từng phần tử trong collection (bạn có thể đặt tùy ý)

    Hello, World!13 là tập hợp hoặc tên của mảng bạn đang muốn lặp qua nó

    Chương II. Phần 4.2. Ví dụ vòng lặp for each trong Java

    Để bạn hiểu hơn cách hoạt động của vòng lặp for each hãy cùng thực hiện thêm các ví dụ. cũng được sử dụng lặp lại một khối code cụ thể. Trong phần này, bạn sẽ học cách tạo vòng lặp while do ... while trong Java.

    Đây là một chương trình tính tổng của các phần tử trong mảng.

    for (int soNguyen: mangSoNguyen) {

    • System.out.println("Tổng = " + tong);
    • Khi chạy chương trình, kết quả nhận được là:
    • Lưu ý!

    Hello, World!14 tương đương với Hello, World!15.

    Giải thích chương trình:vòng lặp while trong Java là:

    while (bieuThucDieuKien) { (bieuThucDieuKien) {

    Lặp lần 1: Hello, World!16, Hello, World!17. Thực hiện Hello, World!14. Lúc này, Hello, World!19.

    }  
     

    Và, thay vì sử dụng vòng lặp for tiêu chuẩn.

    • Java cung cấp một vòng lặp for each để chuyên làm những việc tương tự như thế này.
    • public static void main(String[] args) {

    // Vòng lặp for each

    Khi chạy cả hai vòng lặp này, chúng ta được một kết quả tương tự:

    • Việc sử dụng vòng lặp for each dễ viết hơn và làm cho code của bạn dễ đọc hơn.
    • Do đó, người ta khuyến nghị sử dụng vòng lặp for each hơn vòng lặp for tiêu chuẩn (bất cứ khi nào có thể)
    • Chương II. Phần 4.1. Cú pháp vòng lặp for each trong Java
    • Do đó, người ta khuyến nghị sử dụng vòng lặp for each hơn vòng lặp for tiêu chuẩn (bất cứ khi nào có thể)
    • Chương II. Phần 4.1. Cú pháp vòng lặp for each trong Java
    • Ở trên chúng ta đã thử làm ví dụ bằng vòng lặp for each. Bây giờ, hãy phân tích cú pháp của vòng lặp for each xem nào:

    Trong đó:

    Hướng dẫn java html - javahtml

    Lưu đồ thuật toán vòng lặp while

    Chương II. Phần 5.3. Ví dụ về vòng lặp while trong Java.

    Để hiểu cách vòng lặp while hoạt động, hãy cùng xem ví dụ sau:

    // Chương trình in ra số từ 1 đến 10

    class ViDuVongLapWhile { ViDuVongLapWhile {

    public static void main(String[] args) { static void main(String[] args) {

    int i = 1; i = 1;

    while (i  (i <= 10) {

    System.out.println("Số: " + i);.out.println("Số: " + i);

    ++i;

    }

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Số: 1 Số: 2 Số: 3 Số: 4 Số: 5 Số: 6 Số: 7 Số: 8 Số: 9 Số: 10
    Số: 2
    Số: 3
    Số: 4
    Số: 5
    Số: 6
    Số: 7
    Số: 8
    Số: 9
    Số: 10

    Chú ý, câu lệnh "Hello Word"83 bên trong thân vòng lặp while.

    Sau lần lặp thứ 10, biến "Hello Word"84 sẽ có giá trị Hello, World!53.

    Khi đó, kiểm tra biểu thức điều kiện Hello, World!54 trả về giá trị "Hello, World!"5.

    Điều này dẫn tới việc chấm dứt vòng lặp while.

    Chúng ta cũng có thể vận dụng vòng lặp while để xử lý bài toán cộng từ 1 đến 100 như sau:

    // Chương trình cộng 1 đến 100 sử dụng vòng lặp while

    class CongTu1Den100 { CongTu1Den100 {

    public static void main(String[] args) { static void main(String[] args) {

    int tong = 0, i = 100;  tong = 0, i = 100;

    while (i != 0) { (i != 0) {

    tong += i; // Tương đương với tong = tong + i// Tương đương với tong = tong + i

    --i;

    }

    }  .out.println("Tổng = " + tong);

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Số: 1 Số: 2 Số: 3 Số: 4 Số: 5 Số: 6 Số: 7 Số: 8 Số: 9 Số: 10

    Chú ý, câu lệnh "Hello Word"83 bên trong thân vòng lặp while.HỌC THUẬT TOÁN với JAVA để tìm hiểu thêm các thuật toán phổ biến bạn nhé.

    Sau lần lặp thứ 10, biến "Hello Word"84 sẽ có giá trị Hello, World!53.

    Khi đó, kiểm tra biểu thức điều kiện Hello, World!54 trả về giá trị "Hello, World!"5.

    Điều này dẫn tới việc chấm dứt vòng lặp while.

    Chúng ta cũng có thể vận dụng vòng lặp while để xử lý bài toán cộng từ 1 đến 100 như sau:

    // Chương trình cộng 1 đến 100 sử dụng vòng lặp while

    int tong = 0, i = 100;

    tong += i; // Tương đương với tong = tong + i

    System.out.println("Tổng = " + tong);while (bieuThucDieuKien);
     

    Khi chạy chương trình, kết quả nhận được là:

    • * Kết quả giống như sử dụng vòng lặp for đúng không?
    • > Thuật toán rất quan trọng, nó là nền tảng để giúp bạn nắm vững ngôn ngữ, cách vận dụng ngôn ngữ hơn. Tham khảo hướng dẫn HỌC THUẬT TOÁN với JAVA để tìm hiểu thêm các thuật toán phổ biến bạn nhé.

    Chương II. Phần 5.4. Vòng lặp do while trong Java

    Vòng lặp do while trong Java cũng lặp lại một khối code cụ thể cho đến khi thỏa mãn điều kiện nào đó.

    • Vòng lặp do while hoạt động tương tự như vòng lặp while.
    • Tuy nhiên, điểm khác biệt là vòng lặp do while sẽ thực hiện khối code ít nhất 1 lần, cho dù điều kiện đúng hay sai.
    • Nghĩa là, lần lặp đầu tiên, khối code sẽ được thực thi, sau đó mới kiểm tra điều kiện.
    • Cú pháp vòng lặp do while trong Java là:
    • // Code thực thi cái gì đó
    • } while (bieuThucDieuKien);  

    Trong đó:

    Hướng dẫn java html - javahtml

    Hello, World!56, Hello, World!39 là từ khóa

    Hello, World!40 là biểu thức điều kiện boolean trả về giá trị "Hello, World!"4 hoặc "Hello, World!"5.

    Chương II. Phần 5.5. Vòng lặp do while hoạt động thế nào?

    Đây là cách vòng lặp do while trong Java hoạt động:

    Thực hiện khối code bên trong vòng lặp 1 lần

    Đánh giá biểu thức Hello, World!40java.util.Scanner;

    class TinhTong { TinhTong {

    public static void main(String[] args) { static void main(String[] args) {

    Nếu Hello, World!40 trả về giá trị "Hello, World!"4. Tiêp tục thực hiện khối code trong block Hello, World!56 sotong = 0.0;

    Scanner input = new Scanner(System.in); input = new Scanner(System.in);

    Tiếp tục đánh giá biểu thức Hello, World!40. Nếu true thì thực hiện khối code trong block Hello, World!56

    do { {

    ....out.print("Nhập vào một số: ");

    so = input.nextDouble();input.nextDouble();

    tong += so;

    Nếu Hello, World!40 trả về giá trị "Hello, World!"5. Chấm dứt vòng lặpwhile (so != 0.0);

    Xem lưu đồ thuật toán vòng lặp do while để hiểu dòng chảy của vòng lặp..out.println("Tổng = " + tong);

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Số: 1 Số: 2 Số: 3 Số: 4 Số: 5 Số: 6 Số: 7 Số: 8 Số: 9 Số: 10
    Nhập vào một số: 2.5
    Nhập vào một số: 5.0
    Nhập vào một số: 0.0
    Tổng = 11.0

    Chú ý, câu lệnh "Hello Word"83 bên trong thân vòng lặp while.

    Sau lần lặp thứ 10, biến "Hello Word"84 sẽ có giá trị Hello, World!53.

    Khi đó, kiểm tra biểu thức điều kiện Hello, World!54 trả về giá trị "Hello, World!"5.

    Điều này dẫn tới việc chấm dứt vòng lặp while.

    class VongLapWhileVoCuc { VongLapWhileVoCuc {

    public static void main(String[] args) { static void main(String[] args) {

    int i = 100; i = 100;

    Chúng ta cũng có thể vận dụng vòng lặp while để xử lý bài toán cộng từ 1 đến 100 như sau:

    while (i == 100) { (i == 100) {

    // Chương trình cộng 1 đến 100 sử dụng vòng lặp while.out.println("Tự học Lập trình Java");

    }

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Số: 1 Số: 2 Số: 3 Số: 4 Số: 5 Số: 6 Số: 7 Số: 8 Số: 9 Số: 10

    Chú ý, câu lệnh "Hello Word"83 bên trong thân vòng lặp while.

    Sau lần lặp thứ 10, biến "Hello Word"84 sẽ có giá trị Hello, World!53.

    Chương II. Phần 6. Câu lệnh break trong Java

    Trong phần câu lệnh switch bạn đã nhìn thấy giải thích qua về các hoạt động của câu lệnh break.break.

    Phần này, chúng ta sẽ tìm hiểu kỹ hơn một chút về câu lệnh break.break.

    Câu lệnh "Hello Word"64 thường được sử dụng để chấm dứt vòng lặp ngay lập tức mà không cần đợi kiểm tra biểu thức.

    Chương trình sẽ chuyển sang câu lệnh tiếp theo sau vòng lặp ngay lập tức.

    Cú pháp của câu lệnh break:

    Chương II. Phần 6.1. Ví dụ về cách sử dụng câu lệnh break trong Java

    Để hiểu cách hoạt động của câu lệnh break trong Java, hãy cùng làm một vài ví dụ:

    class ViDuBreak1 { ViDuBreak1 {

    public static void main(String[] args) { static void main(String[] args) {

    for (int i = 1; i  (int i = 1; i <= 10; ++i) {

    // Chấm dứt vòng lặp nếu i bằng 5

    if (i == 5) { (i == 5) {

    break;;

    }      

    System.out.println(i);.out.println(i);

    }   

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Như bạn thấy, biểu thức kiểm tra là Hello, World!07. Khi Hello, World!74 vẫn thỏa mãn biểu thức kiểm tra của vòng lặp.

    Tuy nhiên, câu lệnh Hello, World!75 đã chấm dứt vòng lặp tại đây.

    Dẫn tới, 5, 6, 7, 8, 9, 10 không được in ra màn hình.

    Hãy cùng làm một ví dụ khác để hiểu về câu lệnh break.

    Chương trình lấy các số được người dùng nhập vào để tính tổng cho đến khi người dùng nhập số âm.

    * Bạn nên xem lại cách lấy dữ liệu từ người dùng trong phần Java input.

    Code chương trình:

    import java.util.Scanner; java.util.Scanner;

    class TinhTongSoDuong { TinhTongSoDuong {

    public static void main(String[] args) { static void main(String[] args) {

    // Khởi tạo biến

    Double so, tong = 0.0; sotong = 0.0;

    Scanner input = new Scanner(System.in);  input = new Scanner(System.in);

    // Sử dụng vòng lặp while để tính tổng

    while (true) { (true) {

    System.out.print("Nhập vào một số: ");.out.print("Nhập vào một số: ");

    so = input.nextDouble();input.nextDouble();

    /* Sử dụng break để chấm dứt vòng lặp

                 khi người dùng nhập vào số âm */

    if (so  (so < 0.0) {

    break;;

    }

    tong += so;

    }

    }  .out.println("Tổng = " + tong);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Như bạn thấy, biểu thức kiểm tra là Hello, World!07. Khi Hello, World!74 vẫn thỏa mãn biểu thức kiểm tra của vòng lặp.
    Nhập vào một số: 2.5
    Nhập vào một số: 1.5
    Nhập vào một số: 3.5
    Nhập vào một số: -1.0
    Tổng = 8.5

    Tuy nhiên, câu lệnh Hello, World!75 đã chấm dứt vòng lặp tại đây.

    Dẫn tới, 5, 6, 7, 8, 9, 10 không được in ra màn hình.

    Hãy cùng làm một ví dụ khác để hiểu về câu lệnh break.

    Chương trình lấy các số được người dùng nhập vào để tính tổng cho đến khi người dùng nhập số âm.

    * Bạn nên xem lại cách lấy dữ liệu từ người dùng trong phần Java input.

    Code chương trình:

    import java.util.Scanner;

    // Khởi tạo biến

    Scanner input = new Scanner(System.in);

    public static void main (String[] args) { static void main (String[] args) {

    for (int i = 1; i  (int i = 1; i <= 3; ++i) {

    // Sử dụng vòng lặp while để tính tổng.out.println("Chương " + i);

    for (int j = 1; i  (int j = 1; i <= 5; ++j) {

    System.out.print("Nhập vào một số: ");.out.println("Phần " + j);

    if (j == 3) { (j == 3) {

    /* Sử dụng break để chấm dứt vòng lặp.out.println("Thoát vòng lặp bên trong");

    break;;

    }

    }

    }

    }  .out.println("Kết thúc chương trình lặp");        

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Như bạn thấy, biểu thức kiểm tra là Hello, World!07. Khi Hello, World!74 vẫn thỏa mãn biểu thức kiểm tra của vòng lặp.

    Tuy nhiên, câu lệnh Hello, World!75 đã chấm dứt vòng lặp tại đây.

    Dẫn tới, 5, 6, 7, 8, 9, 10 không được in ra màn hình.

    Hãy cùng làm một ví dụ khác để hiểu về câu lệnh break.

    Chương trình lấy các số được người dùng nhập vào để tính tổng cho đến khi người dùng nhập số âm.

    * Bạn nên xem lại cách lấy dữ liệu từ người dùng trong phần Java input.
    Phần 1
    Phần 2
    Phần 3
    Thoát vòng lặp for bên trong
    Chương 2
    Phần 1
    Phần 2
    Phần 3
    Thoát vòng lặp for bên trong
    Chương 3
    Phần 1
    Phần 2
    Phần 3
    Thoát vòng lặp for bên trong
    Kết thúc chương trình lặp

    Code chương trình:

    import java.util.Scanner;

    public static void main(String[] args) { static void main(String[] args) {

    vongLap1::

    for( int i = 1; i int i = 1; i < 5; i++) {

    vongLap2::

    for(int j = 1; j (int j = 1; j < 3; j ++ ) {

    // Khởi tạo biến.out.println("i = " + i + " và j = " +j);

    if ( i == 2) { ( i == 2) {

    break vongLap1; vongLap1;

    }

    }

    }

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    i = 1 và j = 1 i = 1 và j = 2 i = 2 và j = 1  
    i = 1 và j = 2
    i = 2 và j = 1
     

    Như bạn thấy, khi "Hello Word"84 bằng "Hello Word"85, chương trình vẫn in ra Hello, World!80.

    Tuy nhiên, sau khi in, điều kiện Hello, World!81 sẽ được đánh giá và trả lại giá trị "Hello, World!"4. Lúc này, câu lệnh Hello, World!83 được kích hoạt.

    Và chương trình lặp thoát hoàn toàn, không giống như chỉ thoát vòng lặp bên trong như ở ví dụ trên.

    Và nếu, chúng ta thực hiện đánh giá điều kiện Hello, World!81 trước, như thế này:

    public static void main(String[] args) { static void main(String[] args) {

    vongLap1::

    for( int i = 1; i int i = 1; i < 5; i++) {

    vongLap2::

    for(int j = 1; j (int j = 1; j < 3; j ++ ) {

    if ( i == 2) { ( i == 2) {

    break vongLap1; vongLap1;

    }

    System.out.println("i = " + i + " và j = " +j);.out.println("i = " + i + " và j = " +j);

    }

    }

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    i = 1 và j = 1 i = 1 và j = 2 i = 2 và j = 1  
    i = 2 và j = 2

    Như bạn thấy, khi "Hello Word"84 bằng "Hello Word"85, chương trình vẫn in ra Hello, World!80.break trong Java chưa?

    Tuy nhiên, sau khi in, điều kiện Hello, World!81 sẽ được đánh giá và trả lại giá trị "Hello, World!"4. Lúc này, câu lệnh Hello, World!83 được kích hoạt.

    Và chương trình lặp thoát hoàn toàn, không giống như chỉ thoát vòng lặp bên trong như ở ví dụ trên.

    Và nếu, chúng ta thực hiện đánh giá điều kiện Hello, World!81 trước, như thế này:

    System.out.println("i = " + i + " và j = " +j);

    Kết quả nhận được là:

    i = 1 và j = 1 i = 2 và j = 2

    Ok, cho đến bây giờ, bạn đã hiểu về câu lệnh break trong Java chưa?

    Chương II. Phần 7. Câu lệnh continue trong Java

    Trong phần này, bạn sẽ học cách sử dụng câu lệnh continue trong Java.

    class ViDuContinue { ViDuContinue {

    Câu lệnh continue sẽ cho phép chương trình bỏ qua lần lặp hiện tại của một vòng lặp. static void main(String[] args) {

    Khi câu lệnh continue được thực thi, trình điều khiển chương trình nhảy đến cuối vòng lặp.

    for (int i = 1; i  (int i = 1; i <= 10; ++i) {   

    Sau đó, biểu thức kiểm tra điều khiển vòng lặp được đánh giá.

    if (i > 4 && i  (i > 4 && i < 9) {

    continue;;

    }

    Trong trường hợp của vòng lặp for, câu lệnh cập nhật được thực thi trước khi biểu thức kiểm tra được đánh giá.

    System.out.println(i);.out.println(i);

    }   

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    i = 1 và j = 1 i = 1 và j = 2 i = 2 và j = 1  if trong vòng lặp for có biểu thức điều kiện là Hello, World!85.

    Như bạn thấy, khi "Hello Word"84 bằng "Hello Word"85, chương trình vẫn in ra Hello, World!80.

    Tuy nhiên, sau khi in, điều kiện Hello, World!81 sẽ được đánh giá và trả lại giá trị "Hello, World!"4. Lúc này, câu lệnh Hello, World!83 được kích hoạt.

    "Hello Word"83

    Và chương trình lặp thoát hoàn toàn, không giống như chỉ thoát vòng lặp bên trong như ở ví dụ trên.

    Và nếu, chúng ta thực hiện đánh giá điều kiện Hello, World!81 trước, như thế này:

    System.out.println("i = " + i + " và j = " +j);

    Kết quả nhận được là:

    i = 1 và j = 1 i = 2 và j = 2

    Ok, cho đến bây giờ, bạn đã hiểu về câu lệnh break trong Java chưa? java.util.Scanner;

    class TinhTongSoDuong { TinhTongSoDuong {

    public static void main(String[] args) { static void main(String[] args) {

    Double so, tong = 0.0; sotong = 0.0;

    Scanner input = new Scanner(System.in); input = new Scanner(System.in);

    for (int i = 1; i  (int i = 1; i < 6; ++i) {

    Chương II. Phần 7. Câu lệnh continue trong Java.out.print("Nhập vào một số Dương: ");

    so = input.nextDouble();input.nextDouble();

    Trong phần này, bạn sẽ học cách sử dụng câu lệnh continue trong Java.

    Câu lệnh continue sẽ cho phép chương trình bỏ qua lần lặp hiện tại của một vòng lặp.

    if (so  (so <= 0.0) {

    Khi câu lệnh continue được thực thi, trình điều khiển chương trình nhảy đến cuối vòng lặp.;

    }

    tong += so;

    }

    Sau đó, biểu thức kiểm tra điều khiển vòng lặp được đánh giá..out.println("Tổng = " + tong);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    i = 1 và j = 1 i = 1 và j = 2 i = 2 và j = 1  
    Nhập vào một số Dương: -1
    Nhập vào một số Dương: 2
    Nhập vào một số Dương: 0
    Nhập vào một số DƯơng: 2.0
    Tổng = 5
     

    Như bạn thấy, khi "Hello Word"84 bằng "Hello Word"85, chương trình vẫn in ra Hello, World!80.

    Tuy nhiên, sau khi in, điều kiện Hello, World!81 sẽ được đánh giá và trả lại giá trị "Hello, World!"4. Lúc này, câu lệnh Hello, World!83 được kích hoạt.

    Và chương trình lặp thoát hoàn toàn, không giống như chỉ thoát vòng lặp bên trong như ở ví dụ trên.

    Và nếu, chúng ta thực hiện đánh giá điều kiện Hello, World!81 trước, như thế này:

    System.out.println("i = " + i + " và j = " +j);

    Kết quả nhận được là:

    class ViDuContinueLabel { ViDuContinueLabel {

    public static void main(String[] args) { static void main(String[] args) {

    vongLapFor1::

    for (int i = 1; i  (int i = 1; i <= 3; ++i) {

    for (int j = 1; j  (int j = 1; j <= 3; ++j) {

    i = 1 và j = 1 i = 2 và j = 2

    Ok, cho đến bây giờ, bạn đã hiểu về câu lệnh break trong Java chưa?

    if (j == 2) (j == 2)

    continue vongLapFor1; vongLapFor1;

    System.out.println("i = " + i + "; j = " + j);  .out.println("i = " + i + "; j = " + j); 

    }

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    i = 1 và j = 1 i = 2 và j = 1 i = 3 và j = 1  
    i = 2 và j = 1
    i = 3 và j = 1
     

    Lưu ý!

    Việc sử dụng label trong lập trình không được khuyến khích vì nó làm code của bạn khó hiểu.

    Nếu đứng trước tình huống sử dụng label thì tốt hơn hết là nên tái cấu trúc lại code. Cố gắng tìm cách giải quyết khác.

    > Nếu bạn chưa hiểu lắm về continue thì tiếp tục đọc bài Continue trong Java nhé.Continue trong Java nhé.

    Như vậy là đến đây, bạn đã được hướng dẫn tự học ngôn ngữ Java với:

    • Chương 1: Làm quen với ngôn ngữ lập trình Java
    • Chương 2: Cấu trúc điều khiển trong Java.

    Tiếp theo, chúng ta sẽ đến với một phần rất quan trọng trong lập trình Java, đó là Mảng trong Java.Mảng trong Java.

    Trong khi làm việc thực tế, chúng ta sẽ thao tác với mảng rất nhiều. Do đó, phần Mảng sẽ là một chương.

    CHƯƠNG III: HỌC LẬP TRÌNH VỚI MẢNG TRONG JAVA

    Trong chương này, bạn sẽ học cách làm việc với các mảng trong Java.mảng trong Java.

    Bạn sẽ học được cách khai báo, khởi tạo và truy cập các phần tử mảng qua từng ví dụ cụ thể.khai báo, khởi tạotruy cập các phần tử mảng qua từng ví dụ cụ thể.

    Mảng trong Java giống như một con tàu chở một loại mặt hàng duy nhất.

    Nó được sinh ra để chứa nhiều giá trị cùng loại.

    Trước khi chưa biết về mảng, chúng ta thường tạo nhiều biến để lưu giá trị, như thế này:

    int b = 2; b = 2;

    int c = 3; c = 3;

    int d = 4; d = 4;

    int e = 5;  e = 5;

    ...

    int x =    x = 
     

    Nhưng với mảng, chúng ta chỉ chỉ cần tạo một mảng duy nhất:mảng, chúng ta chỉ chỉ cần tạo một mảng duy nhất:

    int[] diem = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};  [] diem = {12345678910};
     

    Chương III. Phần 1. Cách khai báo Mảng trong Java

    Đây là cách bạn có thể khai báo một mảng trong Java:

    Trong đó:

    • Hello, World!94 có thể là một kiểu dữ liệu nguyên thủy (int, char, Double, byte...) hoặc một đối tượng (chúng ta sẽ học về đối tượng sau)
    • Hello, World!95 là tên của mảng do bạn định nghĩa

    Hãy lấy một ví dụ đơn giản như thế này:

    Ở đây, mảng Hello, World!5 có thể chứa các số nguyên (int)

    Nhưng,

    Mảng có thể lưu trữ bao nhiêu phần tử?

    Ngôn ngữ Java được sử dụng rất phổ biến bởi tính chặt chẽ của nó. Nó cho phép chúng ta kiểm soát tài nguyên, bộ nhớ rất tốt.

    Khi khai báo mảng Hello, World!5 ở trên, chúng ta chưa phân bổ bộ nhớ cho các phần tử của mảng.

    Bây giờ, hãy phân bổ cho nó.

    Bây giờ, mảng diem đã có thể chứa được 10 phần tử kiểu int (độ dài của mảng là 10).

    Lưu ý!

    Việc sử dụng label trong lập trình không được khuyến khích vì nó làm code của bạn khó hiểu.

    Nếu đứng trước tình huống sử dụng label thì tốt hơn hết là nên tái cấu trúc lại code. Cố gắng tìm cách giải quyết khác.

    > Nếu bạn chưa hiểu lắm về continue thì tiếp tục đọc bài Continue trong Java nhé.[] diem = new int[10];
     

    Như vậy là đến đây, bạn đã được hướng dẫn tự học ngôn ngữ Java với:

    Chương 1: Làm quen với ngôn ngữ lập trình Java

    Chương 2: Cấu trúc điều khiển trong Java.

    > Nếu bạn chưa hiểu lắm về continue thì tiếp tục đọc bài Continue trong Java nhé.[] diem = new int[10];
     

    Hướng dẫn java html - javahtml

    Như vậy là đến đây, bạn đã được hướng dẫn tự học ngôn ngữ Java với:

    Trong đó:

    • Hello, World!94 có thể là một kiểu dữ liệu nguyên thủy (int, char, Double, byte...) hoặc một đối tượng (chúng ta sẽ học về đối tượng sau)
    • Hello, World!95 là tên của mảng do bạn định nghĩa
    • Hãy lấy một ví dụ đơn giản như thế này:
    • Ở đây, mảng Hello, World!5 có thể chứa các số nguyên (int)

    Nhưng,

    Mảng có thể lưu trữ bao nhiêu phần tử? static void main(String[] args) {

    int[] diem = new int[5];[] diem = new int[5];

    System.out.println(diem[0]);.out.println(diem[0]);

    System.out.println(diem[1]);.out.println(diem[1]);

    System.out.println(diem[2]);.out.println(diem[2]);

    System.out.println(diem[3]);.out.println(diem[3]);

    Ngôn ngữ Java được sử dụng rất phổ biến bởi tính chặt chẽ của nó. Nó cho phép chúng ta kiểm soát tài nguyên, bộ nhớ rất tốt..out.println(diem[4]);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Khi khai báo mảng Hello, World!5 ở trên, chúng ta chưa phân bổ bộ nhớ cho các phần tử của mảng.

    Bây giờ, hãy phân bổ cho nó.

    class ViDuLapMang { ViDuLapMang {

    Mảng có thể lưu trữ bao nhiêu phần tử? static void main(String[] args) {

    int[] diem = new int[5];[] diem = new int[5];

    for (int i = 0; i  (int i = 0; i < 5; ++i) {

    System.out.println(diem[i]);.out.println(diem[i]);

    }

    }

    }  
     

    Ngôn ngữ Java được sử dụng rất phổ biến bởi tính chặt chẽ của nó. Nó cho phép chúng ta kiểm soát tài nguyên, bộ nhớ rất tốt.

    Khi khai báo mảng Hello, World!5 ở trên, chúng ta chưa phân bổ bộ nhớ cho các phần tử của mảng.

    Bây giờ, hãy phân bổ cho nó.[] diem = {98174};
     

    Bây giờ, mảng diem đã có thể chứa được 10 phần tử kiểu int (độ dài của mảng là 10).

    Trong Java, một khi độ dài được xác định, nó không thể thay đổi

    Bạn cũng có thể vừa khai báo, vừa phân bổ bộ nhớ cho mảng trong một câu lệnh, như thế này:

    Hướng dẫn java html - javahtml

    int[] diem = new int[10];  

    Chương III. Phần 2. Chỉ số Mảng trong Java

    public static void mani (String[] args) {  static void mani (String[] args) {

    int[] diem = {9, 8, 1, 7, 4};[] diem = {98174};

    // Sử dụng vòng lặp for để lặp qua mảng

    for (int i = 0; i  (int i = 0; i <= 5; ++i) {

    System.out.println("Phần tử ở vị trí " + i + " là: " + diem[i]); .out.println("Phần tử ở vị trí " + i + " là: " + diem[i]);

    }

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Phần tử ở vị trí 0 là: 9 Phần tử ở vị trí 1 là: 8 Phần tử ở vị trí 2 là: 1 Phần tử ở vị trí 3 là: 7 Phần tử ở vị trí 4 là: 4  
    Phần tử ở vị trí 1 là: 8
    Phần tử ở vị trí 2 là: 1
    Phần tử ở vị trí 3 là: 7
    Phần tử ở vị trí 4 là: 4
     

    Chương III. Phần 2.2. Cách truy cập phần tử mảng trong Java.

    Trong lập trình Java, bạn có thể dễ  dàng truy cập phần tử của mảng thông qua chỉ số (index) của nó.

    Ví dụ:

    public static void mani (String[] args) { static void mani (String[] args) {

    int[] diem = {9, 8, 1, 7, 4};[] diem = {98174};

    diem[2] = 10;2] = 10;

    // Sử dụng vòng lặp for để lặp qua mảng

    System.out.println("Phần tử ở vị trí " + i + " là: " + diem[i]); .out.println("Phần tử đầu tiên của mảng diem là " + diem[0]);

    }.out.println("Phần tử thứ 3 của mảng diem là " + diem[2]);

    }  .out.println("Phần tử thứ 4 của mảng diem là " + diem[3]);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Phần tử ở vị trí 0 là: 9 Phần tử ở vị trí 1 là: 8 Phần tử ở vị trí 2 là: 1 Phần tử ở vị trí 3 là: 7 Phần tử ở vị trí 4 là: 4  
    Phần tử thứ 3 của mảng diem là: 10
    Phần tử thứ 4 của mảng diem là: 7
     

    Chương III. Phần 2.2. Cách truy cập phần tử mảng trong Java.

    Trong lập trình Java, bạn có thể dễ  dàng truy cập phần tử của mảng thông qua chỉ số (index) của nó.

    Ví dụ:

    System.out.println("Phần tử đầu tiên của mảng diem là " + diem[0]);  static void main (String[] args) {

    int[] diemToan = {9, 8, 1, 7, 4};[] diemToan = {98174};

    int tong = 0; tong = 0;

    Double diemTrungBinh; diemTrungBinh;

    System.out.println("Phần tử thứ 3 của mảng diem là " + diem[2]);

    for (int diem : diemToan) { (int diem : diemToan) {

    System.out.println("Phần tử thứ 4 của mảng diem là " + diem[3]);

    }

    }  

    int doDaiMang = diemToan.length; doDaiMang = diemToan.length;

    Khi chạy chương trình, kết quả nhận được là:

    Phần tử ở vị trí 0 là: 9 Phần tử ở vị trí 1 là: 8 Phần tử ở vị trí 2 là: 1 Phần tử ở vị trí 3 là: 7 Phần tử ở vị trí 4 là: 4  

    diemTrungBinh = ((double)tong / (double)doDaiMang);double)tong / (double)doDaiMang);

    Chương III. Phần 2.2. Cách truy cập phần tử mảng trong Java.

    Trong lập trình Java, bạn có thể dễ  dàng truy cập phần tử của mảng thông qua chỉ số (index) của nó..out.println("Tổng điểm = " + tong);

    Ví dụ:.out.println("Điểm trung bình môn Toán = " + diemTrungBinh);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Phần tử ở vị trí 0 là: 9 Phần tử ở vị trí 1 là: 8 Phần tử ở vị trí 2 là: 1 Phần tử ở vị trí 3 là: 7 Phần tử ở vị trí 4 là: 4  
    Điểm trung bình môn Toán = 5.8
     

    Chương III. Phần 2.2. Cách truy cập phần tử mảng trong Java.

    Trong lập trình Java, bạn có thể dễ  dàng truy cập phần tử của mảng thông qua chỉ số (index) của nó.

    Ví dụ:

    System.out.println("Phần tử đầu tiên của mảng diem là " + diem[0]);

    System.out.println("Phần tử thứ 3 của mảng diem là " + diem[2]);

    System.out.println("Phần tử thứ 4 của mảng diem là " + diem[3]);

    Phần tử đầu tiên của mảng diem là: 9 Phần tử thứ 3 của mảng diem là: 10 Phần tử thứ 4 của mảng diem là: 7  

    * Lưu ý: Trong lập trình, máy tính đếm từ 0, 1, 2, 3, 4, 5, ...Java, bạn có thể khai báo một mảng chứa các mảng được gọi là mảng đa chiều.

    Như vậy, câu lệnh "Hello, World!"07 đã thực hiện gán lại giá trị của phần tử thứ 3 trong mảng diem.

    Một ví dụ khác bên dưới đây sẽ tính tổng và giá trị trung bình của điểm trong mảng diem int:

    Ví dụ:

    System.out.println("Phần tử đầu tiên của mảng diem là " + diem[0]); [][] a = new int[3][4];
     

    System.out.println("Phần tử thứ 3 của mảng diem là " + diem[2]);

    System.out.println("Phần tử thứ 4 của mảng diem là " + diem[3]);

    Hướng dẫn java html - javahtml

    Phần tử đầu tiên của mảng diem là: 9 Phần tử thứ 3 của mảng diem là: 10 Phần tử thứ 4 của mảng diem là: 7  

    * Lưu ý: Trong lập trình, máy tính đếm từ 0, 1, 2, 3, 4, 5, ...

    Như vậy, câu lệnh "Hello, World!"07 đã thực hiện gán lại giá trị của phần tử thứ 3 trong mảng diem.

    Một ví dụ khác bên dưới đây sẽ tính tổng và giá trị trung bình của điểm trong mảng diem int:

    public static void main (String[] args) { [][][] a = new int[3][4][2];
     

    // Sử dụng for each để lặp

    * Lưu ý: Trong lập trình, máy tính đếm từ 0, 1, 2, 3, 4, 5, ...

    Như vậy, câu lệnh "Hello, World!"07 đã thực hiện gán lại giá trị của phần tử thứ 3 trong mảng diem.

    Một ví dụ khác bên dưới đây sẽ tính tổng và giá trị trung bình của điểm trong mảng diem int:

    public static void main (String[] args) {

    // Sử dụng for each để lặp234},

    {3, 4, 3, 5},3435},

    {3},3},

    }  
     

    tong += diem;

    Hướng dẫn java html - javahtml

    Ví dụ khởi tạo mảng 2 chiều trong Java

    Thử viết chương trình để chứng minh ví dụ trên:

    public static void main(String[] args) { static void main(String[] args) {

    int[][] a = {[][] a = {

                {2, 3, 4}, 234}, 

                {3, 4, 3, 5}, 3435}, 

                {3}, 3}, 

    };

    System.out.println("Độ dài hàng 1: " + a[0].length);.out.println("Độ dài hàng 1: " + a[0].length);

    System.out.println("Độ dài hàng 2: " + a[1].length);.out.println("Độ dài hàng 2: " + a[1].length);

    System.out.println("Độ dài hàng 3: " + a[2].length); .out.println("Độ dài hàng 3: " + a[2].length);

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Độ dài hàng 1: 3 Độ dài hàng 2: 4 Độ dài hàng 3: 1  
    Độ dài hàng 2: 4
    Độ dài hàng 3: 1
     

    Bởi vì, mỗi một thành phần của một mảng đa chiều cũng là một mảng.

    Vì thế, "Hello, World!"19, "Hello, World!"20, "Hello, World!"21 cũng là một mảng.

    Do đó, bạn có thể sử dụng thuộc tính "Hello, World!"22 để tính độ dài của chúng.

    Chương III. Phần 2.2. Ví dụ về mảng đa chiều trong Java.

    Để hiểu hơn về mảng đa chiều, hãy cùng làm thêm ví dụ về chúng.

    Ví dụ dưới đây sẽ sử dụng vòng lặp for để in ra tất cả các phần tử trong mảng.

    public static void main(String[] args) { static void main(String[] args) {

    // Khởi tạo mảng

    int[][] a = {[][] a = {

    {2, 3, 4},  234}, 

    {3, 4, 3, 5}, 3435}, 

    {3}, 3}, 

    };

    System.out.println("Độ dài hàng 1: " + a[0].length);

    for (int i = 0; i  (int i = 0; i < a.length; ++i) {

    for (int j = 0; j  (int j = 0; j < a[i].length; ++j) {

    System.out.println("Độ dài hàng 2: " + a[1].length);.out.println("Phần tử a[" + i + "]" + "[" + j + "] là: " + a[i][j]);

    }

    }

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Độ dài hàng 1: 3 Độ dài hàng 2: 4 Độ dài hàng 3: 1  
    Phần tử a[0][1] là: 3
    Phần tử a[0][2] là: 4
    Phần tử a[1][0] là: 3
    Phần tử a[1][1] là: 4
    Phần tử a[1][2] là: 5
    Phần tử a[2][0] là: 3
     

    Bởi vì, mỗi một thành phần của một mảng đa chiều cũng là một mảng.

    Vì thế, "Hello, World!"19, "Hello, World!"20, "Hello, World!"21 cũng là một mảng. vòng lặp for each.

    public static void main(String[] args) { static void main(String[] args) {

    // Khởi tạo mảng

    int[][] a = {[][] a = {

    {2, 3, 4},  234}, 

    {3, 4, 3, 5}, 3435}, 

    {3}, 3}, 

    };

    System.out.println("Độ dài hàng 1: " + a[0].length);

    System.out.println("Độ dài hàng 2: " + a[1].length);

    for (int[] mangCon: a) { (int[] mangCon: a) {

    System.out.println("Độ dài hàng 3: " + a[2].length);  (int giaTri: mangCon) {

    System.out.println(giaTri);.out.println(giaTri);

    }

    }

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Độ dài hàng 1: 3 Độ dài hàng 2: 4 Độ dài hàng 3: 1  

    Bởi vì, mỗi một thành phần của một mảng đa chiều cũng là một mảng.

    Vì thế, "Hello, World!"19, "Hello, World!"20, "Hello, World!"21 cũng là một mảng.

    int[][][] mang3Chieu = {[][][] mang3Chieu = {

    Do đó, bạn có thể sử dụng thuộc tính "Hello, World!"22 để tính độ dài của chúng.

    {2, 3, 4},234},

    {3, 4, 3, 5},3435},

    {3},3},

    Chương III. Phần 2.2. Ví dụ về mảng đa chiều trong Java.

    Do đó, bạn có thể sử dụng thuộc tính "Hello, World!"22 để tính độ dài của chúng.

            {1, 2, 3, 4},1234},

    {5, 5}55}

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Độ dài hàng 1: 3 Độ dài hàng 2: 4 Độ dài hàng 3: 1  

    Bởi vì, mỗi một thành phần của một mảng đa chiều cũng là một mảng.

    Vì thế, "Hello, World!"19, "Hello, World!"20, "Hello, World!"21 cũng là một mảng.

    Do đó, bạn có thể sử dụng thuộc tính "Hello, World!"22 để tính độ dài của chúng. static void manin(String[] args) {

    Vì thế, "Hello, World!"19, "Hello, World!"20, "Hello, World!"21 cũng là một mảng.

    int[][][] mang3Chieu = {[][][] mang3Chieu = {

    Do đó, bạn có thể sử dụng thuộc tính "Hello, World!"22 để tính độ dài của chúng.

    {2, 3, 4},234},

    {3, 4, 3, 5},3435},

    {3},3},

    Chương III. Phần 2.2. Ví dụ về mảng đa chiều trong Java.

    Do đó, bạn có thể sử dụng thuộc tính "Hello, World!"22 để tính độ dài của chúng.

    {1, 2, 3, 4},1234},

    {5, 5}55}

    }

    };

    }  

    System.out.println("Độ dài hàng 2: " + a[1].length);

    for (int[][] mang2Chieu: mang3Chieu) { (int[][] mang2Chieu: mang3Chieu) {

    for (int[] mangCon: mang2Chieu) { (int[] mangCon: mang2Chieu) {

    for (int giaTri: mangCon) { (int giaTri: mangCon) {

    System.out.println(giaTri);.out.println(giaTri);

    }

    }  

    }

    }

    }  
     

    Khi chạy chương trình, kết quả bạn nhận được là:

    Độ dài hàng 1: 3 Độ dài hàng 2: 4 Độ dài hàng 3: 1  
    3
    4
    3
    4
    3
    5
    3
    1
    2
    3
    4
    5
    5
     

    Bởi vì, mỗi một thành phần của một mảng đa chiều cũng là một mảng.

    Vì thế, "Hello, World!"19, "Hello, World!"20, "Hello, World!"21 cũng là một mảng.

    Do đó, bạn có thể sử dụng thuộc tính "Hello, World!"22 để tính độ dài của chúng.

    Chương III. Phần 2.2. Ví dụ về mảng đa chiều trong Java.sao chép mảng / copy mảng trong Java (cả một chiều và hai chiều).

    Để hiểu hơn về mảng đa chiều, hãy cùng làm thêm ví dụ về chúng.

    Ví dụ dưới đây sẽ sử dụng vòng lặp for để in ra tất cả các phần tử trong mảng.

    public static void main(String[] args) { static void main(String[] args) {

    // Khởi tạo mảng [] diemToan = {123456};

    {2, 3, 4}, 

    int [] diemToan1 = diemToan; [] diemToan1 = diemToan;

    for (int diem: diemToan1) { (int diem: diemToan1) {

    System.out.print(diem + ", ");.out.print(diem + ", ");

    }

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Mặc dù kỹ thuật sao chép mảng trong Java bằng toán tử gán có vẻ làm rất tốt.

    Nhưng có một vấn đề với cách sao chép mảng này:

    Nếu bạn thay đổi phần tử của 1 mảng, mảng còn lại cũng thay đổi theo. Ví dụ:

    public static void main(String[] args) { static void main(String[] args) {

    int [] diemToan = {1, 2, 3, 4, 5, 6};  [] diemToan = {123456};

    // Copy mảng sử dụng toán tử gán

    int [] diemToan1 = diemToan; [] diemToan1 = diemToan;

    // Thay đổi phần tử trong mảng diemToan

    diemToan[0] = 10;0] = 10;

    System.out.print("Mảng diemToan1: ");.out.print("Mảng diemToan1: ");

    // In tất cả các phần tử trong mảng diemToan1

    for (int diem: diemToan1) { (int diem: diemToan1) {

    System.out.print(diem + ", ");.out.print(diem + ", ");

    }

    // Thay đổi phần tử trong mảng diemToan1

    diemToan1[1] = 10;1] = 10;

    System.out.print('\n' + "Mảng diemToan: "); .out.print('\n' + "Mảng diemToan: ");

    // In tất cả phần tử trong mảng diemToan

    for (int diem: diemToan) { (int diem: diemToan) {

    System.out.print(diem + ", ");.out.print(diem + ", ");

    }

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Mặc dù kỹ thuật sao chép mảng trong Java bằng toán tử gán có vẻ làm rất tốt.
    Mảng diemToan: 10, 10, 3, 4, 5, 6,
     

    Nhưng có một vấn đề với cách sao chép mảng này:

    • Nếu bạn thay đổi phần tử của 1 mảng, mảng còn lại cũng thay đổi theo. Ví dụ:
    • int [] diemToan = {1, 2, 3, 4, 5, 6};
    • // Copy mảng sử dụng toán tử gán

    // Thay đổi phần tử trong mảng diemToan

    • System.out.print("Mảng diemToan1: ");
    • // In tất cả các phần tử trong mảng diemToan1
    • // Thay đổi phần tử trong mảng diemToan1

    System.out.print('\n' + "Mảng diemToan: ");

    // In tất cả phần tử trong mảng diemToan

    Kết quả:sao chép nông (shallow copy).

    Mảng diemToan1: 10, 2, 3, 4, 5, 6, Mảng diemToan: 10, 10, 3, 4, 5, 6,  

    Như bạn thấy, trong ví dụ trên:

    class ViDuCopyMang2 { ViDuCopyMang2 {

    public static void main(String[] args) { static void main(String[] args) {

    int [] diemToan = {1, 2, 3, 4, 5, 6}; [] diemToan = {123456};

    Chúng ta gán lại phần tử đầu tiên của mảng "Hello, World!"23 [] diemVan = new int[6];

    for (int i = 0; i  (int i = 0; i < diemToan.length; ++i) {

    diemVan[i] = diemToan[i];

    }

    Sau đó in ra tất cả các phần tử của mảng "Hello, World!"24.

    System.out.println(Arrays.toString(diemVan));.out.println(Arrays.toString(diemVan));

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Mặc dù kỹ thuật sao chép mảng trong Java bằng toán tử gán có vẻ làm rất tốt.

    Nhưng có một vấn đề với cách sao chép mảng này:

    Nếu bạn thay đổi phần tử của 1 mảng, mảng còn lại cũng thay đổi theo. Ví dụ:

    int [] diemToan = {1, 2, 3, 4, 5, 6};

    // Copy mảng sử dụng toán tử gán

    // Thay đổi phần tử trong mảng diemToan

    System.out.print("Mảng diemToan1: ");

    // In tất cả các phần tử trong mảng diemToan1System chứa phương thức "Hello, World!"38 cho phép bạn sao chép dữ liệu từ mảng này sang mảng khác.

    // Thay đổi phần tử trong mảng diemToan1arraycopy() rất linh hoạt và hiệu quả.

    System.out.print('\n' + "Mảng diemToan: ");

    // In tất cả phần tử trong mảng diemToan

    public static void arraycopy(Object mangNguon, int viTriBatDauMangNguon, static void arraycopy(Object mangNguon, int viTriBatDauMangNguon,

    Kết quả: mangDich, int viTriBatDauMangDich, int doDai)
     

    Mảng diemToan1: 10, 2, 3, 4, 5, 6, Mảng diemToan: 10, 10, 3, 4, 5, 6,  

    • Như bạn thấy, trong ví dụ trên:
    • Chúng ta gán lại phần tử đầu tiên của mảng "Hello, World!"23
    • Sau đó in ra tất cả các phần tử của mảng "Hello, World!"24.
    • Nhận thấy mảng "Hello, World!"24 đã thay đổi theo sự thay đổi của mảng "Hello, World!"23
    • Tương tự,

    Chúng ta thử nghiệm thay đổi phần tử thứ 2 của mảng "Hello, World!"24arraycopy():

    Rồi thử in tất cả các phần tử của mảng "Hello, World!"23

    import java.util.Arrays; java.util.Arrays;

    class ViDuCopyMang3 { ViDuCopyMang3 {

    public static void main(String[] args) { static void main(String[] args) {

    Nhận thấy, mảng "Hello, World!"23 cũng đã thay đổi theo sự thay đổi của mảng "Hello, World!"24[] n1 = {123456};

    int[] n3 = new int[5];[] n3 = new int[5];

    Như vậy, kết luận là, sử dụng toán tử gán để sao chép mảng dẫn tới 2 mảng cùng tham chiếu đến cùng một vị trí.

    int[] n2 = new int[n1.length];[] n2 = new int[n1.length];

    // Sao chép mảng n1 sang mảng n2

    System.arraycopy(n1, 0, n2, 0, n1.length); .arraycopy(n1, 0, n2, 0n1.length);

    System.out.println("Mảng n2 = " + Arrays.toString(n2));  .out.println("Mảng n2 = " + Arrays.toString(n2));  

    // Sao chép 2 phần tử mảng n1, bắt đầu từ phần tử

    // có index là 2 đến mảng n3 (bắt đầu từ vị trí index 1)  
     

    System.arraycopy(n1, 2, n3, 1, 2); .arraycopy(n1, 2, n3, 12);

    System.out.println("Mảng n3 = " + Arrays.toString(n3));  .out.println("Mảng n3 = " + Arrays.toString(n3));  

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Mảng n2 = [1, 2, 3, 4, 5, 6] Mảng n3 = [0, 3, 4, 0, 0]  
    Mảng n3 = [0, 3, 4, 0, 0]
     

    Lưu ý!

    Giá trị ban đầu mặc định của mảng int là 0

    Chương III. Phần 3.4. Sao chép mảng Java sử dụng phương thức copyOfRange()

    Ngoài ra, bạn có thể sử dụng phương thức copyOfRange() được định nghĩa trong class java.util.Arrays để sao chép mảng.java.util.Arrays để sao chép mảng.

    Như thế, bạn sẽ không cần tạo mảng đích trước khi gọi phương thức này.

    Đây là cách phương thức copyOfRange() hoạt động:copyOfRange() hoạt động:

    // Để sử dụng Phương thức toString() và copyOfRange()

    import java.util.Arrays; java.util.Arrays;

    class ViDuCopyMang4 { ViDuCopyMang4 {

    public static void main(String[] args) { static void main(String[] args) {

    int[] mangNguon = {1, 2, 3, 4, 5};[] mangNguon = {12345};

    // Sao chép mảng nguồn đến mảng đích 1

    int[] mangDich2 = Arrays.copyOfRange(mangNguon, 0, mangNguon.length);      [] mangDich2 = Arrays.copyOfRange(mangNguon, 0mangNguon.length);      

    System.out.println("Mảng mangDich2 = " + Arrays.toString(mangDich2)); .out.println("Mảng mangDich2 = " + Arrays.toString(mangDich2)); 

    // Sao chép mảng nguồn đến mảng đích 2

    // từ index bằng 2 đến index bằng 4 (Không bao gồm ví trí index 4)

    // Có nghĩa là chỉ sao chép giá trị 3, 4 trong mảng nguồn

    int[] mangDich2 = Arrays.copyOfRange(mangNguon, 2, 4); [] mangDich2 = Arrays.copyOfRange(mangNguon, 24); 

    System.out.println("Mảng mangDich2 = " + Arrays.toString(mangDich2));    .out.println("Mảng mangDich2 = " + Arrays.toString(mangDich2));   

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Mảng n2 = [1, 2, 3, 4, 5, 6] Mảng n3 = [0, 3, 4, 0, 0]  
    Mảng mangDich2 = [3, 4]
     

    Lưu ý!

    Giá trị ban đầu mặc định của mảng int là 0

    Chương III. Phần 3.4. Sao chép mảng Java sử dụng phương thức copyOfRange()

    Ngoài ra, bạn có thể sử dụng phương thức copyOfRange() được định nghĩa trong class java.util.Arrays để sao chép mảng. ViDuCopyMang2Chieu {

    public static void main(String[] args) { static void main(String[] args) {

    int[][] mangNguon = {[][] mangNguon = {

    {2, 3, 4}, 234}, 

    {3, 4, 3, 5},3435},

    {3},3},

    Như thế, bạn sẽ không cần tạo mảng đích trước khi gọi phương thức này.

    Đây là cách phương thức copyOfRange() hoạt động:[][] mangDich = new int[mangNguon.length][];

    for (int i = 0; i  (int i = 0; i < mangDich.length; ++i) {

    // Để sử dụng Phương thức toString() và copyOfRange()

    mangDich[i] = new int[mangNguon[i].length];new int[mangNguon[i].length];

    for (int j = 0; j  (int j = 0; j < mangDich[i].length; ++j) {

    mangDich[i][j] = mangNguon[i][j];

    }

    }

    }  

    System.out.println(Arrays.deepToString(mangDich));  .out.println(Arrays.deepToString(mangDich));  

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Mảng n2 = [1, 2, 3, 4, 5, 6] Mảng n3 = [0, 3, 4, 0, 0]  
     

    Lưu ý!

    Giá trị ban đầu mặc định của mảng int là 0

    Chương III. Phần 3.4. Sao chép mảng Java sử dụng phương thức copyOfRange()Oracle.

    Ngoài ra, bạn có thể sử dụng phương thức copyOfRange() được định nghĩa trong class java.util.Arrays để sao chép mảng.

    class ViDuCopyMang2Chieu2 { ViDuCopyMang2Chieu2 {

    Như thế, bạn sẽ không cần tạo mảng đích trước khi gọi phương thức này. static void main(String[] args) {

    int[][] mangNguon = {[][] mangNguon = {

    {2, 3, 4}, 234}, 

    {3, 4, 3, 5},3435},

    {3},3},

    Như thế, bạn sẽ không cần tạo mảng đích trước khi gọi phương thức này.

    int[][] mangDich = new int[mangNguon.length][];[][] mangDich = new int[mangNguon.length][];

    for (int i = 0; i  (int i = 0; i < mangNguon.length; ++i) {

    // Để sử dụng Phương thức toString() và copyOfRange()

    mangDich[i] = new int[mangNguon[i].length];new int[mangNguon[i].length];

    System.arraycopy(mangNguon[i], 0, mangDich[i], 0, mangDich[i].length);.arraycopy(mangNguon[i], 0, mangDich[i], 0, mangDich[i].length);

    }

    }  

    Khi chạy chương trình, kết quả nhận được là:.out.println(Arrays.deepToString(mangDich));      

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Mảng n2 = [1, 2, 3, 4, 5, 6] Mảng n3 = [0, 3, 4, 0, 0]  
     

    Lưu ý!

    Giá trị ban đầu mặc định của mảng int là 0

    Chương III. Phần 3.4. Sao chép mảng Java sử dụng phương thức copyOfRange()

    Ngoài ra, bạn có thể sử dụng phương thức copyOfRange() được định nghĩa trong class java.util.Arrays để sao chép mảng.

    Trong chương tới đây, bạn sẽ được học OOP thật kỹ càng. Học từ cách thể tạo class và object tùy chỉnh cho đến việc vận dụng các tính chất của OOP.

    CHƯƠNG IV. HỌC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG (Part1)

    Chương IV. Phần 1. Class và Object trong Java

    Java là một ngôn ngữ lập trình hướng đối tượng (OOP). là một ngôn ngữ lập trình hướng đối tượng (OOP).

    OOP là viết tắt của từ Object-oriented programming   là viết tắt của từ Object-oriented programming
     

    Lập trình hướng đối tượng cho phép bạn chia các vấn đề phức tạp thành các tập nhỏ hơn bằng cách tạo ra các đối tượng.

    Những đối tượng này có chung đặc điểm:

    • Trạng thái / thuộc tính
    • Hành vi

    Hãy cùng lấy một ví dụ:

    • Đèn là một đối tượng
    • Đèn có thuộc tính sáng hoặc không sáng
    • Đèn có thể có hành vi tắt đèn và bật đèn

    Tương tự:

    • Ô tô là một đối tượng
    • Ô tô có thuộc tính bánh xe, tên, thương hiệu, ghế ngồi ...
    • Ô tô có hành vi là di chuyển, rẽ trái, rẽ phải. lùi ...

    Bạn sẽ được học về 3 đặc điểm của hướng đối tượng như đóng gói dữ liệu, kế thừa, đa hình ở chương tiếp theo.

    Trong chương này, hãy để mọi thứ đơn giản nhất đã.

    Video tự học Java 30: Class và Object trong Java 

    Chương IV. Phần 1.1. Class trong Java

    Trước khi bạn tạo ra các đối tượng trong Java, bạn cần định nghĩa một class.class.

    Một class là một bản kế hoạch chi tiết cho đối tượng.

    Chúng ta có thể nghĩ về class như một bản thiết kế ngôi nhà.

    Nó chứa tất cả các chi tiết về sàn nhà, cửa ra vào, cửa sổ... Và dựa trên những mô tả này, chúng ta có thể xây dựng ra các ngôi nhà.

    Ở đây, Nhà là đối tượng (object).object).

    Chương IV. Phần 1.2. Cách định nghĩa class trong Java

    Đây là cách bạn có thể định nghĩa một class trong Java:

    Còn đây, là một ví dụ về class đèn mà chúng ta đã mô tả ở trên:

    // Biến thể hiện (instance variable)

    private String denSang; String denSang;

    // Phương thức bật đèn

    public void batDen(){ void batDen(){

    denSang = "Đèn đang sáng";"Đèn đang sáng";

    }

    // Phương thức tắt đèn

    public void tatDen() {  void tatDen() {

    denSang = "Đèn đang tắt";"Đèn đang tắt";

    }

    // Phương thức tắt đèn
     

    public void tatDen() {

    • denSang = "Đèn đang tắt";
    • }  
    • Ở đây, chúng ta đã định nghĩa:

    Một class tên là "Hello, World!"46 (Xem thêm vê quy tắc đặt tên class trong Java)members của class.

    Một biến thể hiện là "Hello, World!"47, có kiểu dữ liệu là 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15.

    • Hai phương thức "Hello, World!"49 và "Hello, World!"50"Hello, World!"52 làm cho biến thể hiện và phương thức chỉ có thể truy cập được từ bên trong cùng class.
    • Tất cả biến và phương thức trong class được gọi là members của class.
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      1
      làm cho biến thể hiện và phương thức có thể truy cập được từ bên ngoài class.

    Và lưu ý, chúng ta có từ khóa

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1 và "Hello, World!"52. Đây là từ khóa được sử dụng để điều chỉnh mức độ truy cập.

    Từ khóa "Hello, World!"52 làm cho biến thể hiện và phương thức chỉ có thể truy cập được từ bên trong cùng class.

    Từ khóa
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1 làm cho biến thể hiện và phương thức có thể truy cập được từ bên ngoài class.

    Trong chương trình trên, biến "Hello, World!"47 là "Hello, World!"52.

    Nếu bạn cố gắng truy cập vào biến "Hello, World!"47 từ class khác (mà không phải bên trong class "Hello, World!"46) thì trình biên dịch sẽ ném ra lỗi.

    Chương IV. Phần 1.3. Cách tạo Object trong Java

    // Biến thể hiện (instance variable)

    private String denSang; String denSang;

    // Phương thức bật đèn

    public void batDen(){ void batDen(){

    denSang = "Đèn đang sáng";"Đèn đang sáng";

    }

    // Phương thức tắt đèn

    public void tatDen() { void tatDen() {

    public void tatDen() { "Đèn đang tắt";

    }

    // Phương thức tắt đèn

    class TaoDoiTuongDen { TaoDoiTuongDen {

    public static void main(String[] args) { static void main(String[] args) {

    public void tatDen() {

    Den den1 = new Den(); den1 = new Den();

    denSang = "Đèn đang tắt";

    Den den2 = new Den(); den2 = new Den();

    }

    // Phương thức tắt đèn
     

    public void tatDen() {

    denSang = "Đèn đang tắt";

    }  members) bạn có thể sử dụng toán tử dot "Hello, World!"63

    Ở đây, chúng ta đã định nghĩa:

    Một class tên là "Hello, World!"46 (Xem thêm vê quy tắc đặt tên class trong Java)

    Một biến thể hiện là "Hello, World!"47, có kiểu dữ liệu là 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15.

    Hai phương thức "Hello, World!"49 và "Hello, World!"50

    • Tất cả biến và phương thức trong class được gọi là members của class.
    • Và lưu ý, chúng ta có từ khóa
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      1 và "Hello, World!"52. Đây là từ khóa được sử dụng để điều chỉnh mức độ truy cập.

    Hướng dẫn java html - javahtml

    Từ khóa "Hello, World!"52 làm cho biến thể hiện và phương thức chỉ có thể truy cập được từ bên trong cùng class.

    Từ khóa

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1 làm cho biến thể hiện và phương thức có thể truy cập được từ bên ngoài class.

    Trong chương trình trên, biến "Hello, World!"47 là "Hello, World!"52..denSang = "Đèn sáng rồi ....";
     

    Nếu bạn cố gắng truy cập vào biến "Hello, World!"47 từ class khác (mà không phải bên trong class "Hello, World!"46) thì trình biên dịch sẽ ném ra lỗi.

    Vì thế, nếu câu lệnh "Hello, World!"68 được đặt trong phương thức "Hello, World!"69 ở class "Hello, World!"70 thì chương trình sẽ ném ra lỗi.

    Chương IV. Phần 1.5. Ví dụ về Class và Object trong Java

    Bây giờ, hãy làm một ví dụ hoàn chỉnh về class và object trong Java.

    Lần này chúng ta chỉ cần tạo một đối tượng đèn để ngắn gọn hơn.

    // Biến thể hiện (instance variable)

    private String denSang; String denSang;

    // Phương thức bật đèn

    public void batDen(){ void batDen(){

    denSang = "Đèn đang sáng";"Đèn đang sáng";

    }

    // Phương thức tắt đèn

    public void tatDen() { void tatDen() {

    denSang = "Đèn đang tắt"; "Đèn đang tắt";

    }

    public void thongBao() { void thongBao() {

    // Phương thức tắt đèn.out.println("Thông báo: " + denSang);

    }

    // Phương thức tắt đèn

    class TaoDoiTuongDen { TaoDoiTuongDen {

    public static void main(String[] args) { static void main(String[] args) {

    denSang = "Đèn đang tắt";

    Den den = new Den(); den = new Den();

    System.out.println("Thông báo: " + denSang);

    den.batDen();.batDen();

    }

    den.thongBao();.thongBao();

    // Tạo đối tượng den1 từ class Den

    den.tatDen();.tatDen();

    }

    // Tạo đối tượng den1 từ class Den.thongBao();

    }

    // Phương thức tắt đèn
     

    denSang = "Đèn đang tắt";

    System.out.println("Thông báo: " + denSang);
    Thông báo: Đèn đang tắt
     

    }

    • // Tạo đối tượng den1 từ class Den
    • // Bật đèn
    • // Thông báo trạng thái của đèn
    • // Tắt đèn

    den.thongBao();

    • }  
    • Khi chúng ta chạy chương trình, kết quả nhận được là:
    • Thông báo: Đèn đang sáng Thông báo: Đèn đang tắt  
    • Trong chương trình trên:
    • Chúng ta đã tạo một class "Hello, World!"46 để định nghĩa các biến và phương thức.
    • Biến "Hello, World!"47 nhận giá trị dạng
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      15.

    Hai phương thức "Hello, World!"49 và "Hello, World!"50 là để gán giá trị cho biến "Hello, World!"47.instance variable) là có lý do của nó.

    Phương thức "Hello, World!"77 là để in ra giá trị "Hello, World!"47 đang chứa.

    Tiếp đó:

    Chúng ta tạo class "Hello, World!"70

    Câu lệnh "Hello, World!"80 là để tạo một đối tượng den từ class "Hello, World!"46

    Sau đó, chúng ta thử bật đèn. Câu lệnh "Hello, World!"82 chỉ định chương trình thực thi code bên trong phương thức "Hello, World!"49.

    Có nghĩa là gán giá trị "Hello, World!"84 cho biến "Hello, World!"47.

    Và in ra giá trị "Hello, World!"47 đang chứa bằng câu lệnh "Hello, World!"87

    Tương tự, chúng ta tắt đèn bằng cách gọi đến phương thức "Hello, World!"50 và lại in thông báo.

    Lưu ý rằng, biến được định nghĩa bên trong class được gọi là biến thể hiện (instance variable) là có lý do của nó.

    Vì khi một đối tượng được khởi tạo, nó được gọi là một thể hiện (instance).

    Mỗi thể hiện chứa bản sao riêng của các biến này. Thế nên gọi là biến thể hiện (instance variable)

    • Ví dụ, biến "Hello, World!"47 ở trên đầu được tạo ra cho đối tượng "Hello, World!"60 và "Hello, World!"61 là khác nhau.
    • Chương IV. Phần 2. Phương thức trong Java
    • Ok, như đã đề cập ở trên, phần này bạn sẽ được học về Phương thức trong Java.

    Bạn sẽ học được cách định nghĩa phương thức, cách sử dụng phương thức trong lập trình.

    Vậy...Phương thức" để gần với ý nghĩa hướng đối tượng hơn.

    Chính xác thì .... trong tiếng Anh là method

    Chương IV. Phần 2.1. Phương thức là gì?

    Trong Toán học, chắc bạn đã được học về hàm.

    Ví dụ, hàm f(x) = x ^ 2 là một hàm trả về giá trị bình phương của x.

    • Nếu x = 2 thì f(2) = 4
    • Nếu x = 3 thì f(3) = 9

    Cứ thế ...

    Tương tự, trong lập trình cũng thế. Một hàm là một khối code thực hiện một nhiệm vụ cụ thể nào đó.

    Và trong phương pháp lập trình hướng đối tượng, hàm được gọi với tên gọi khác là "Phương thức" để gần với ý nghĩa hướng đối tượng hơn.phương thức được dựng sẵn trong Java (Built-in Functions).

    Phương thức trong tiếng Anh là method

    Các phương thức này được liên kết với một class. Và nó định nghĩa hành vi của class đó.

    Chương IV. Phần 2.2. Các kiểu phương thức.

    • Tùy thuộc vào việc một phương thức được định nghĩa bởi người dùng hay có sẵn trong thư viện chuẩn mà chia thành hai loại phương thức:
    • Standard Library Methods

    User-defined Methods

    Chương IV. Phần 2.3 Phương thức trong thư viện tiêu chuẩn

    public class ViDuSqrtMethod { class ViDuSqrtMethod {

    Video tự học Java 31: Phương thức dựng sẵn (Có trong thư viện tiêu chuẩn) static void main(String[] args) {

    Các phương thức kiểu Standard Library Methods là các phương thức được dựng sẵn trong Java (Built-in Functions)..out.print("Căn bậc 2 của 4 là: " + Math.sqrt(4));

    }

    // Phương thức tắt đèn
     

    denSang = "Đèn đang tắt";

    System.out.println("Thông báo: " + denSang);

    }

    // Tạo đối tượng den1 từ class Dentự định nghĩa các phương thức bên trong một class theo mong muốn của bạn.

    Các phương thức như vậy được gọi là phương thức do người dùng định nghĩa (user-defined methods)phương thức do người dùng định nghĩa (user-defined methods)

    Trước khi bạn có thể sử dụng (gọi một phương thức), bạn cần định nghĩa nó.

    Đây là cách bạn định nghĩa các phương thức trong Java:

    public static void myMethod() { static void myMethod() {

    System.out.println("Phương thức myMethod được gọi");.out.println("Phương thức myMethod được gọi");

    }  
     

    Ở đây, chúng ta đã định nghĩa phương thức có tên là "Hello, World!"92

    Bạn có thể thấy:

    • Từ khóa
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      1 cho phép bạn có thể truy cập phương thức từ bên ngoài class nó được định nghĩa.
    • Từ khóa
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      2 cho phép bạn có thể truy cập phương thức mà không cần tạo đối tượng.
    • Từ khóa
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      3 biểu thị rằng phương thức này không trả về bất kỳ giá trị nào.

    Trong chương trình trên, phương thức myMethod không chấp nhận bất kỳ đối số nào.

    Do đó dấu ngoặc tròn () này không có gì.

    Lưu ý!

    Bạn sẽ được học cách truyền đối số cho một phương thức trong các phần sau.

    Cú pháp đầy đủ để định nghĩa một phương thức trong Java là:phương thức trong Java là:

    modifier static returnType nameOfMethod (Parameter List) {static returnType nameOfMethod (Parameter List) {

    // method body

    }  
     

    Ở đây, chúng ta đã định nghĩa phương thức có tên là "Hello, World!"92

    • Bạn có thể thấy:: Xác định mức độ truy cập như public, private và protected

    • Từ khóa
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      1 cho phép bạn có thể truy cập phương thức từ bên ngoài class nó được định nghĩa.
      : Nếu bạn sử dụng từ khóa static thì phương thức có thể được truy cập mà không cần tạo đối tượng.

    • Từ khóa
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      2 cho phép bạn có thể truy cập phương thức mà không cần tạo đối tượng.
      : Giá trị phương thức có thể trả về

    Từ khóa

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    3 biểu thị rằng phương thức này không trả về bất kỳ giá trị nào.


    • Trong chương trình trên, phương thức myMethod không chấp nhận bất kỳ đối số nào.: Tên (định danh) của phương thức

    Do đó dấu ngoặc tròn () này không có gì.

    Lưu ý!


    • Bạn sẽ được học cách truyền đối số cho một phương thức trong các phần sau.: Các tham số là các giá trị được truyền cho một phương thức.

    Cú pháp đầy đủ để định nghĩa một phương thức trong Java là:


    • modifier static returnType nameOfMethod (Parameter List) {: Nó xác định phương thức thực sự làm gì, cách các tham số được thao tác với các câu lệnh lập trình và giá trị nào được trả về. Các câu lệnh được đặt bên trong dấu ngoặc nhọn "Hello Word"25 là phần thân của phương thức.

    Trong đó:

    modifier: Xác định mức độ truy cập như public, private và protected

    static: Nếu bạn sử dụng từ khóa static thì phương thức có thể được truy cập mà không cần tạo đối tượng.

    • returnType: Giá trị phương thức có thể trả về
    • Nó có thể trả về các kiểu dữ liệu gốc (int, float, double, v.v.), các đối tượng gốc (String, Map, List, v.v.) hoặc bất kỳ đối tượng nào được tích hợp hoặc đối tượng do người dùng định nghĩa.
    • nameOfMethod: Tên (định danh) của phương thức

    Bạn có thể đặt bất kỳ tên nào cho một phương thức.

    Tuy nhiên, thông thường, tên phương thức được đặt theo hành vi của nó ví dụ: "Hello, World!"96, "Hello, World!"97, ...

    Parameters (Arguments): Các tham số là các giá trị được truyền cho một phương thức.

    Bạn có thể truyền đối số cho một phương thức với số lượng bất kỳ. Main {

    public static void main(String[] args) { static void main(String[] args) {

    Method body: Nó xác định phương thức thực sự làm gì, cách các tham số được thao tác với các câu lệnh lập trình và giá trị nào được trả về. Các câu lệnh được đặt bên trong dấu ngoặc nhọn "Hello Word"25 là phần thân của phương thức..out.println("Sắp gọi đến một phương thức");

    Sau khi bạn đã định nghĩa phương thức. Nó có thể được gọi trong main

    myMethod();();

    Khi bạn gọi phương thức, đây là câu lệnh thường dùng để gọi phương thức kiểu

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    2..out.println("Phương thức thực thi thành công");

    Còn khi gọi phương thức HelloWorld.java00, chúng ta gọi thông qua đối tượng (Giả sử mình đã tạo đối tượng den của class Den):

    Đầu tiên, trình điều khiển chương trình bắt đầu trong hàm main. (Không quan tâm main được đặt ở đầu / giữa / cuối)

    private static void myMethod(){ static void myMethod(){

    Khi gặp phương thức nào hợp lệ. Thì nhảy đến thực thi code bên trong phương thức (đã được định nghĩa trong class).out.println("Dòng này in từ trong myMethod");

    Còn khi gọi phương thức HelloWorld.java00, chúng ta gọi thông qua đối tượng (Giả sử mình đã tạo đối tượng den của class Den):

    }  
     

    Đầu tiên, trình điều khiển chương trình bắt đầu trong hàm main. (Không quan tâm main được đặt ở đầu / giữa / cuối)

    Khi gặp phương thức nào hợp lệ. Thì nhảy đến thực thi code bên trong phương thức (đã được định nghĩa trong class)
    Dòng này in từ trong myMethod
    Phương thức thực thi thành công
     

    Sau đó, trình điều khiển lại tiếp tục nhảy đến dòng tiếp theo (trong main), sau phương thức vừa thực thi.

    Chương IV. Phần 2.5. Ví dụ phương thức trong Java.

    Để hiểu hơn về phương thức trong Java, hãy cùng làm theo ví dụ:

    // Ví dụ phương thức trong Java

    class Main {

    public static void main(String[] args) { static void main(String[] args) {

    Output obj = new Output(); obj = new Output();

    Method body: Nó xác định phương thức thực sự làm gì, cách các tham số được thao tác với các câu lệnh lập trình và giá trị nào được trả về. Các câu lệnh được đặt bên trong dấu ngoặc nhọn "Hello Word"25 là phần thân của phương thức..out.println("Sắp gọi đến một phương thức");

    Sau khi bạn đã định nghĩa phương thức. Nó có thể được gọi trong main

    obj.myMethod();.myMethod();

    Khi bạn gọi phương thức, đây là câu lệnh thường dùng để gọi phương thức kiểu

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    2..out.println("Phương thức thực thi thành công");

    Còn khi gọi phương thức HelloWorld.java00, chúng ta gọi thông qua đối tượng (Giả sử mình đã tạo đối tượng den của class Den):

    Đầu tiên, trình điều khiển chương trình bắt đầu trong hàm main. (Không quan tâm main được đặt ở đầu / giữa / cuối)

    class Output { Output {

    Khi gặp phương thức nào hợp lệ. Thì nhảy đến thực thi code bên trong phương thức (đã được định nghĩa trong class)

    public void myMethod() { void myMethod() {

    Sau đó, trình điều khiển lại tiếp tục nhảy đến dòng tiếp theo (trong main), sau phương thức vừa thực thi..out.println("Dòng này in từ trong myMethod");

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Sắp gọi đến một phương thức Dòng này in từ trong myMethod Phương thức thực thi thành công  
    Dòng này in từ trong myMethod
    Phương thức thực thi thành công
     

    Lưu ý rằng, đầu tiên chúng ta đã tạo đối tượng của class HelloWorld.java05.

    Sau đó phương thức myMethod được gọi bằng cách sử dụng đối tượng HelloWorld.java06. Điều này là do HelloWorld.java01 là một phương thức non-static.

    Chương IV. Phần 2.6. Phương thức chấp nhận đối số và có giá trị trả về trong Java.

    Video tự học Java 33: Phương thức có tham số trong Java

    Một phương thức Java có thể không có hoặc có rất nhiều tham số.

    • Các tham số khi định nghĩa phương thức sẽ chấp nhận các đối số tương ứng được truyền vào khi gọi phương thức.tham số khi định nghĩa phương thức sẽ chấp nhận các đối số tương ứng được truyền vào khi gọi phương thức.

    • Ví dụ: Khi định nghĩa phương thức như thế này HelloWorld.java08 thì HelloWorld.java09 lúc này gọi là tham số. Còn khi gọi HelloWorld.java10 trong main() thì HelloWorld7 gọi là đối số.

    Và, phương thức cũng có thể trả về một giá trị.

    Ví dụ:

    // Ví dụ phương thức trả về giá trị trong Java

    class BinhPhuongMotSo { BinhPhuongMotSo {

    public static void main(String[] args) { static void main(String[] args) {

    int ketQua; ketQua;

    ketQua = tinhBinhPhuong(); tinhBinhPhuong(); 

    System.out.println("Bình phương của 10 là: " + ketQua);.out.println("Bình phương của 10 là: " + ketQua);

    }

    public static int tinhBinhPhuong() {  static int tinhBinhPhuong() {

    // Câu lệnh trả về giá trị

    return 10 * 10; 10 * 10;

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Sắp gọi đến một phương thức Dòng này in từ trong myMethod Phương thức thực thi thành công  
     

    Lưu ý rằng, đầu tiên chúng ta đã tạo đối tượng của class HelloWorld.java05.

    Sau đó phương thức myMethod được gọi bằng cách sử dụng đối tượng HelloWorld.java06. Điều này là do HelloWorld.java01 là một phương thức non-static.

    Chương IV. Phần 2.6. Phương thức chấp nhận đối số và có giá trị trả về trong Java.

    Video tự học Java 33: Phương thức có tham số trong Java

    Một phương thức Java có thể không có hoặc có rất nhiều tham số.

    Các tham số khi định nghĩa phương thức sẽ chấp nhận các đối số tương ứng được truyền vào khi gọi phương thức.

    Ví dụ: Khi định nghĩa phương thức như thế này HelloWorld.java08 thì HelloWorld.java09 lúc này gọi là tham số. Còn khi gọi HelloWorld.java10 trong main() thì HelloWorld7 gọi là đối số.

    Và, phương thức cũng có thể trả về một giá trị.

    Ví dụ:

    public class TinhBinhPhuongMotSo { class TinhBinhPhuongMotSo {

    public static void main(String[] args) { static void main(String[] args) {

    int ketQua, n; ketQuan;

    n = 33

    ketQua = tinhBinhPhuong(n);tinhBinhPhuong(n);

    // Ví dụ phương thức trả về giá trị trong Java.out.println("Bình phương của 3 là: " + ketQua);

    n = 44

    ketQua = tinhBinhPhuong(n); tinhBinhPhuong(n); 

    System.out.println("Bình phương của 10 là: " + ketQua);.out.println("Bình phương của 4 là: " + ketQua);

    }

    static int tinhBinhPhuong(int i) { int tinhBinhPhuong(int i) {

    return i * i; i * i;

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Sắp gọi đến một phương thức Dòng này in từ trong myMethod Phương thức thực thi thành công  
    Bình phương của 4 là: 16
     

    Lưu ý rằng, đầu tiên chúng ta đã tạo đối tượng của class HelloWorld.java05.truyền đối số mà không cần code lại phương thức.

    Sau đó phương thức myMethod được gọi bằng cách sử dụng đối tượng HelloWorld.java06. Điều này là do HelloWorld.java01 là một phương thức non-static.

    Chương IV. Phần 2.6. Phương thức chấp nhận đối số và có giá trị trả về trong Java.

    Video tự học Java 33: Phương thức có tham số trong Java

    public class TinhToan { class TinhToan {

    Một phương thức Java có thể không có hoặc có rất nhiều tham số. static int tinhTong (int iint j) {

    return i + j; i + j;

    }

    public static int tinhTich (int x, int y) { static int tinhTich (int xint y) {

    return x * y; x * y;

    }

    public static void main(String[] args) { static void main(String[] args) {

    Các tham số khi định nghĩa phương thức sẽ chấp nhận các đối số tương ứng được truyền vào khi gọi phương thức..out.println("10 + 30 = " + tinhTong(10, 30));

    System.out.println("10 x 20 = " + tinhTich(10, 20));.out.println("10 x 20 = " + tinhTich(10, 20));

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Sắp gọi đến một phương thức Dòng này in từ trong myMethod Phương thức thực thi thành công  
    10 x 20 = 200
     

    Lưu ý rằng, đầu tiên chúng ta đã tạo đối tượng của class HelloWorld.java05.

    Sau đó phương thức myMethod được gọi bằng cách sử dụng đối tượng HelloWorld.java06. Điều này là do HelloWorld.java01 là một phương thức non-static.

    • Chương IV. Phần 2.6. Phương thức chấp nhận đối số và có giá trị trả về trong Java.
    • Video tự học Java 33: Phương thức có tham số trong Java
    • Một phương thức Java có thể không có hoặc có rất nhiều tham số.

    Các tham số khi định nghĩa phương thức sẽ chấp nhận các đối số tương ứng được truyền vào khi gọi phương thức.

    Ví dụ: Khi định nghĩa phương thức như thế này HelloWorld.java08 thì HelloWorld.java09 lúc này gọi là tham số. Còn khi gọi HelloWorld.java10 trong main() thì HelloWorld7 gọi là đối số.

    Và, phương thức cũng có thể trả về một giá trị.

    public class TinhBinhPhuong { class TinhBinhPhuong {

    Ví dụ:

    private static int tinhBinhPhuong(int x){ static int tinhBinhPhuong(int x){

    return x * x; x * x;

    }

    // Ví dụ phương thức trả về giá trị trong Java static void main(String[] args) {

    System.out.println("Bình phương của 10 là: " + ketQua);

    for (int i = 1; i  (int i = 1; i <= 5; i++) {

    // Tính bình phương

    ketQua = tinhBinhPhuong(i)tinhBinhPhuong(i)

    System.out.println("Bình phương của " + i + " là : " + ketQua); .out.println("Bình phương của " + i + " là : " + ketQua);

    }

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Bình phương của 1 là: 1 Bình phương của 2 là: 4 Bình phương của 3 là: 9 Bình phương của 4 là: 16 Bình phương của 5 là: 25  
    Bình phương của 2 là: 4
    Bình phương của 3 là: 9
    Bình phương của 4 là: 16
    Bình phương của 5 là: 25
     

    Trong ví dụ trên, phương thức HelloWorld.java12 lấy tham số kiểu "Hello Word"4. Dựa trên đối số được truyền, phương thức trả về giá trị bình phương của nó.

    Ở đây, đối số "Hello Word"84 kiểu "Hello Word"4 được truyền cho phương thức HelloWorld.java12 trong khi gọi phương thức.

    ketQua = tinhBinhPhuong(i)  tinhBinhPhuong(i)
     

    Khi truyền đối số "Hello Word"84 cho phương thức HelloWorld.java12. Phương thức này sẽ trả lại giá trị bình phương của "Hello Word"84.

    Và gán giá trị trả về cho HelloWorld.java24.

    Ưu điểm chính của phương thức là khả năng tái sử dụng code.

    Bạn chỉ cần viết một lần và sử dụng lại ở khắp nơi.

    Và lưu ý, hãy đặt tên phương thức thật dễ hiểu và đúng với hành vi của nó để giúp dễ dàng gỡ lỗi hơn sau này.

    Chương IV. Phần 3. Constructor trong Java.

    Trong phần hướng dẫn tự học lập trình Java này, bạn sẽ tìm hiểu về constructor trong Java.constructor trong Java.

    Bạn cũng sẽ được học cách để tạo và sử dụng constructor thông qua các ví dụ cụ thể.

    Chương IV. Phần 3.1. Constructor là gì?

    Một constructor (còn gọi là hàm tạo) tương tự như một phương thức (nhưng không thực sự là một phương thức) được gọi tự động khi một đối tượng được khởi tạo.constructor (còn gọi là hàm tạo) tương tự như một phương thức (nhưng không thực sự là một phương thức) được gọi tự động khi một đối tượng được khởi tạo.

    Trình biên dịch Java phân biệt giữa một phương thức và một hàm tạo theo tên và kiểu trả về của nó.

    Trong Java, một hàm tạo phải có cùng tên với class và không phải trả về bất kỳ giá trị nào.

    ViDuConstructor() {() {

    // Phần thân constructor

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:trùng với tên của class.

    Bình phương của 1 là: 1 Bình phương của 2 là: 4 Bình phương của 3 là: 9 Bình phương của 4 là: 16 Bình phương của 5 là: 25  

    void ViDuConstructor() { ViDuConstructor() {

    Trong ví dụ trên, phương thức HelloWorld.java12 lấy tham số kiểu "Hello Word"4. Dựa trên đối số được truyền, phương thức trả về giá trị bình phương của nó.

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Bình phương của 1 là: 1 Bình phương của 2 là: 4 Bình phương của 3 là: 9 Bình phương của 4 là: 16 Bình phương của 5 là: 25  

    Trong ví dụ trên, phương thức HelloWorld.java12 lấy tham số kiểu "Hello Word"4. Dựa trên đối số được truyền, phương thức trả về giá trị bình phương của nó.

    Ở đây, đối số "Hello Word"84 kiểu "Hello Word"4 được truyền cho phương thức HelloWorld.java12 trong khi gọi phương thức.

    ketQua = tinhBinhPhuong(i)  

    class ConsMain { ConsMain {

    private int x; int x;

    // constructor

    private ConsMain(){ ConsMain(){

    Khi truyền đối số "Hello Word"84 cho phương thức HelloWorld.java12. Phương thức này sẽ trả lại giá trị bình phương của "Hello Word"84..out.println("Constructor được gọi");

    x = 10;10;

    }

    public static void main(String[] args){ static void main(String[] args){

    ConsMain obj = new ConsMain(); obj = new ConsMain();

    Và gán giá trị trả về cho HelloWorld.java24..out.println("Giá trị của x = " + obj.x);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Bình phương của 1 là: 1 Bình phương của 2 là: 4 Bình phương của 3 là: 9 Bình phương của 4 là: 16 Bình phương của 5 là: 25  
    Giá trị của x = 10
     

    Trong ví dụ trên, phương thức HelloWorld.java12 lấy tham số kiểu "Hello Word"4. Dựa trên đối số được truyền, phương thức trả về giá trị bình phương của nó.

    Ở đây, đối số "Hello Word"84 kiểu "Hello Word"4 được truyền cho phương thức HelloWorld.java12 trong khi gọi phương thức.

    ketQua = tinhBinhPhuong(i)  

    Khi truyền đối số "Hello Word"84 cho phương thức HelloWorld.java12. Phương thức này sẽ trả lại giá trị bình phương của "Hello Word"84.

    Và gán giá trị trả về cho HelloWorld.java24. không có tham số nào khi định nghĩa được gọi là constructor không đối số (no-arg constructor).

    Ưu điểm chính của phương thức là khả năng tái sử dụng code.

    Bạn chỉ cần viết một lần và sử dụng lại ở khắp nơi.ClassName() {

    // constructor body

    }  
     

    Và lưu ý, hãy đặt tên phương thức thật dễ hiểu và đúng với hành vi của nó để giúp dễ dàng gỡ lỗi hơn sau này.

    • Chương IV. Phần 3. Constructor trong Java.
    • Trong phần hướng dẫn tự học lập trình Java này, bạn sẽ tìm hiểu về constructor trong Java.

    Bạn cũng sẽ được học cách để tạo và sử dụng constructor thông qua các ví dụ cụ thể.

    Chương IV. Phần 3.1. Constructor là gì?

    class NoArgConstructor { NoArgConstructor {

    int i; i;

    Một constructor (còn gọi là hàm tạo) tương tự như một phương thức (nhưng không thực sự là một phương thức) được gọi tự động khi một đối tượng được khởi tạo.

    private NoArgConstructor(){ NoArgConstructor(){

    i = 10;10;

    Trình biên dịch Java phân biệt giữa một phương thức và một hàm tạo theo tên và kiểu trả về của nó..out.println("Đối tượng được tạo và i = " + i);

    }

    Trong Java, một hàm tạo phải có cùng tên với class và không phải trả về bất kỳ giá trị nào. static void main(String[] args) {

    // Phần thân constructor

    NoArgConstructor obj = new NoArgConstructor(); obj = new NoArgConstructor();

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Ở trên, hàm tạo tên là HelloWorld.java25 trùng với tên của class.
     

    Còn phương thức thì:

    // Phần thân constructor

    Mặc dù có tên giống với class, nhưng nó lại có kiểu trả về là void (không trả về cái gì).

    Thế nên, đây là phương thức chứ không phải constructor.

    String tenMien; tenMien;

    Chương IV. Phần 3.2. Ví dụ đơn giản về constructor trong Java.

    Chúng ta hãy xem qua ví dụ bên dưới đây để hiểu hơn về constructor trong Java.

    public CongTy(){ CongTy(){

    tenMien = "niithanoi.edu.vn";"niithanoi.edu.vn";

    }

    // Ví dụ về constructor trong Java

    public class ThanhLapCongTy { class ThanhLapCongTy {

    public static void main(String[] args) { static void main(String[] args) {

    CongTy niit = new CongTy(); niit = new CongTy();

    System.out.println("Tên miền Webiste là: "+ niit.tenMien); .out.println("Tên miền Webiste là: "niit.tenMien);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Tên miền Website là: niithanoi.edu.vn  
     

    Chương IV. Phần 3.4. Constructor mặc định trong Java.

    Nếu bạn không tự tạo constructor, trình biên dịch Java sẽ tự động tạo một constructor không có đối số trong runtime.constructor không có đối số trong runtime.

    Constructor này được gọi là constructor mặc định. Consturctor mặc định sẽ khởi tạo bất kỳ biến thể hiện nào chưa được khởi tạo.constructor mặc định. Consturctor mặc định sẽ khởi tạo bất kỳ biến thể hiện nào chưa được khởi tạo.

    Để hiểu hơn về constructor mặc định, chúng ta cùng làm ví dụ sau:

    // Ví dụ constructor mặc định trong Java

    class ConstructorMacDinh { ConstructorMacDinh {

    // Khai báo biến, chưa khởi tạo

    // giá trị ban đầu

    int a;  a;

    boolean b; b;

    public static void main(String[] args) { static void main(String[] args) {

    ConstructorMacDinh obj = new ConstructorMacDinh(); obj = new ConstructorMacDinh();

    System.out.println("a = " + obj.a);.out.println("a = " + obj.a);

    System.out.println("b = " + obj.b); .out.println("b = " + obj.b);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Tên miền Website là: niithanoi.edu.vn  

    // Ví dụ constructor mặc định trong Java

    class ConstructorMacDinh { ConstructorMacDinh {

    // Khai báo biến, chưa khởi tạo

    // giá trị ban đầu

    int a;  a;

    boolean b; b;

    private ConstructorMacDinh() { ConstructorMacDinh() {

    a = 0;0;

    b = false;false;

    }

    public static void main(String[] args) { static void main(String[] args) {

    ConstructorMacDinh obj = new ConstructorMacDinh(); obj = new ConstructorMacDinh();

    System.out.println("b = " + obj.b); .out.println("a = " + obj.a);

    System.out.println("b = " + obj.b);.out.println("b = " + obj.b);

    }

    }  
     

    Chương trình bên trên tương đương với:

    System.out.println("a = " + obj.a);

    Chương IV. Phần 3.5. Constructor có đối số (Có tham số)

    Video tự học Java 36: Constructor không tham số trong Java

    Constructor có đối số tức là constructor được định nghĩa có danh sách tham số.ClassName(arg1, arg2, ..., argn) {

    // constructor body

    }  
     

    // Cú pháp của constructor có đối số

    accessModifier ClassName(arg1, arg2, ..., argn) {

    Như bạn có thể thấy, khi định nghĩa constructor, chúng ta định nghĩa thêm danh sách tham số.

    Các tham số này sử dụng để chấp nhận đối số khi khởi tạo đối tượng.

    class XeOto { XeOto {

    String thuongHieu; thuongHieu;

    private XeOto(String thuongHieu){ XeOto(String thuongHieu){

    Ví dụ về constructor có đối số trong Java.

    // Ví dụ về constructor có đối số.out.println("Thương hiệu xe ô tô " + thuongHieu + " ra đời");

    }

    public static void main(String[] args) { static void main(String[] args) {

    XeOto xe1 = new XeOto("Vinfast"); xe1 = new XeOto("Vinfast");

    thuongHieu = thuongHieu;  xe2 = new XeOto("Tesla");

    XeOto xe3 = new XeOto("BMW"); xe3 = new XeOto("BMW");

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    System.out.println("Thương hiệu xe ô tô " + thuongHieu + " ra đời");
    Thương hiệu xe ô tô Tesla ra đời
    Thương hiệu xe ô tô BMW ra đời
     

    XeOto xe2 = new XeOto("Tesla");

    Thương hiệu xe ô tô Vinfast ra đời Thương hiệu xe ô tô Tesla ra đời Thương hiệu xe ô tô BMW ra đời  

    Ở ví dụ trên, chúng ta đã truyền đối số kiểu String cho constructor khi khởi tạo đối tượng.

    Chương IV. Phần 3.6. Constructor Overloading trong Java

    Video tự học Java 37: Constructor Overloading trong Java

    class CongTy { CongTy {

    String tenMien; tenMien;

    public CongTy(){ CongTy(){

    Tương tự như method overloading, bạn cũng có thể overload các constructor nếu hai hoặc nhiều constructor có tham số khác nhau. Ví dụ:.tenMien = "mặc định";

    }

    public CongTy(String tenMien){ CongTy(String tenMien){

    // Ví dụ Constructor overloading trong Java.tenMien = tenMien;

    }

    public void layTenMien(){ void layTenMien(){

    System.out.println(this.tenMien);.out.println(this.tenMien);

    }

    public static void main(String[] args) { static void main(String[] args) {

    CongTy ctyMacdinh = new CongTy(); ctyMacdinh = new CongTy();

    this.tenMien = "mặc định"; niit = new CongTy("niithanoi.edu.vn");

    ctyMacdinh.layTenMien();.layTenMien();

    niit.layTenMien();.layTenMien();

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    this.tenMien = tenMien;
    niithanoi.edu.vn
     

    CongTy niit = new CongTy("niithanoi.edu.vn");

    mặc định niithanoi.edu.vn  

    Như bạn thấy, chúng ta có hai constructor nhưng khác nhau về tham số.

    Khi khởi tạo đối tượng mà không truyền đối số, constructor mặc định được gọi đến.

    Khi khởi tạo đối tượng truyền vào một đối số kiểu String thì constructor tương ứng được gọi đến.

    • Chương IV. Phần 3.7. Những điểm quan trọng về Constructor trong Java.
    • Hai quy tắc để tạo một constructor là:

    Quy tắc 1: Tên hàm tạo Java phải khớp chính xác với tên lớp.

    Quy tắc 2: Một hàm tạo Java không được có kiểu trả về.

    • Nếu một class không có constructor, trình biên dịch Java sẽ tự động tạo một constructor mặc định trong runtime.

    Constructor mặc định khởi tạo các biến thể hiện với các giá trị mặc định. Ví dụ: biến

    "Hello Word"4

    sẽ được khởi tạo thành

    HelloWorld.java0

    • Các loại constructor trong Java:

    Constructor mặc định - một constructor được trình biên dịch Java tạo tự động nếu nó không được định nghĩa rõ ràng. - một constructor được trình biên dịch Java tạo tự động nếu nó không được định nghĩa rõ ràng.

    Constructor không đối số - một constructor không chấp nhận bất kỳ đối số nào. - một constructor không chấp nhận bất kỳ đối số nào.

    Constructor có đối số - chấp nhận một hoặc nhiều đối số. Được sử dụng để xác định các giá trị cụ thể của các biến trong đối tượng - chấp nhận một hoặc nhiều đối số. Được sử dụng để xác định các giá trị cụ thể của các biến trong đối tượng

    • Các constructor không thể HelloWorld.java36 hoặc
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      2 hoặc HelloWorld.java38
    • Constructor có thể bị overload (nạp chồng) nhưng không thể bị override (ghi đè)

    Đó, đến hết phần này, mình tin chắc bạn đã có kiến thức đủ về constructor để sử dụng lâu dài để tự học lập trình Java hay làm việc với Java rồi.

    Chương IV. Phần 4. Mức độ truy cập trong Java

    Trong phần này, bạn sẽ tìm hiểu về các Công cụ sửa đổi truy cập (Access Modifiers) khác nhau trong Java và cách chúng hoạt động trong các tình huống khác nhau.

    Chương IV. Phần 4.1. Access Modifier là gì?

    Access Modifier (Công cụ sửa đổi truy cập) là các từ khóa thiết lập mức độ truy cập (mức độ hiển thị) của class, interface, variable, data members, method hoặc constructor và setters của chúng (cập nhật giá trị của một biến).

    Chúng còn được gọi là visibility modifier.

    Bạn không thể thiết lập mức độ truy cập cho getters (truy xuất giá trị của một biến) vì chúng luôn có cùng mức độ hiển thị như của thuộc tính.

    Sử dụng công cụ sửa đổi truy cập để đạt được tính đóng gói dữ liệu tốt hơn.

    Có nghĩa là, với điều chỉnh mức độ truy cập, bạn có thể kiểm soát ai có thể truy cập vào dữ liệu của bạn.

    Vì thế, bạn có thể ngăn chặn hành vi truy cập dữ liệu bất hợp pháp.

    Chương IV. Phần 4.2. Có bao nhiêu mức độ truy cập trong Java?

    Một package chỉ đơn giản là một container chứa một nhóm liên quan (các class Java, interface, list ....).

    Có bốn từ khóa sửa đổi mức độ truy cập trong Java:

    • HelloWorld.java39: chỉ hiển thị trong cùng class
    • HelloWorld.java40: chỉ hiển thị bên trong package (private package)
    • HelloWorld.java41: chỉ hiển thị bên trong package hoặc tất cả các subclass
    • HelloWorld.java42: hiển thị ở mọi nơi

    Mới đầu nghe cũng có vẻ hơi khó hiểu nhỉ :D.

    Lần đầu tiên mình nghe cũng vậy. Phải đọc đi đọc lại nhiều lần mới hiểu.

    Bây giờ, mình sẽ giải thích chi tiết tất cả các mức độ truy cập ở dưới đây.

    Chương IV. Phần 4.3. Mức độ truy cập mặc định (default)

    Nếu không có từ khóa sửa đổi mức độ truy cập nào được chỉ định rõ ràng cho một class, variable, method hoặc constructor thì ....

    Theo mặc định, nó được coi là một công cụ sửa đổi truy cập mặc định.

    // Ví dụ định nghĩa mức độ truy cập mặc định

    package defaultPackage; defaultPackage;

    class Logger { Logger {

    void message(){ message(){

    System.out.println("Đây là một dòng chữ"); .out.println("Đây là một dòng chữ");

    }

    }  
     

    Ở đây, class HelloWorld.java43 có mức độ truy cập theo mặc định.

    Và class HelloWorld.java44 này hiển thị với các class thuộc gói HelloWorld.java45.

    Nếu bạn import class HelloWorld.java43 trong package khác và cố gắng khởi tạo nó, bạn sẽ gặp lỗi biên dịch.

    Chương IV. Phần 4.4. Mức độ truy cập private

    Video tự học Java 38: Từ khóa Private trong Java

    Chỉ các method và các data members là có thể được khai báo là HelloWorld.java47.method và các data members là có thể được khai báo là HelloWorld.java47.

    Còn các class hoặc interface không thể khai báo là "Hello, World!"52.class hoặc interface không thể khai báo là "Hello, World!"52.

    Tuy nhiên, các class được khai báo bên trong một class khác (class lồng nhau) có thể được khai báo là private.

    Các biến private có thể được truy cập bên ngoài class, nếu có các phương thức getter công khai trong class.getter công khai trong class.

    Ví dụ:

    public class Data { class Data {

    private String name; String name;

    public String getName() {  String getName() {

    return this.name; this.name;

    }

    public void setName(String name) { void setName(String name) {

    this.name = name;.name = name;

    }

    }  

    public class Main { class Main {

    Public static void main(String[] main){ static void main(String[] main){

    Ở đây, class HelloWorld.java43 có mức độ truy cập theo mặc định. d = new Data();

    Và class HelloWorld.java44 này hiển thị với các class thuộc gói HelloWorld.java45..setName("NIIT ICT Hà Nội");

    System.out.println(d.getName());.out.println(d.getName());

    }

    }  
     

    Ở đây, class HelloWorld.java43 có mức độ truy cập theo mặc định.

    Và class HelloWorld.java44 này hiển thị với các class thuộc gói HelloWorld.java45.

    Nếu bạn import class HelloWorld.java43 trong package khác và cố gắng khởi tạo nó, bạn sẽ gặp lỗi biên dịch.

    Chương IV. Phần 4.4. Mức độ truy cập private

    Hướng dẫn java html - javahtml

    Vì thế, khi học lập trình hãy luyện tập thật nhiều, mắc lỗi thật nhiều để trở thành một lập trình viên tốt hơn.

    Chương IV. Phần 4.5. Mức độ truy cập Protected



    Video tự học Java 39: Từ khóa Protected trong Java

    Công cụ sửa đổi mức độ truy cập HelloWorld.java54 có thể truy cập trong cùng một package cũng như các subclass của class base.HelloWorld.java54 có thể truy cập trong cùng một package cũng như các subclass của class base.

    Chỉ các method và các data members mới có thể được khai báo là HelloWorld.java54method và các data members mới có thể được khai báo là HelloWorld.java54

    Còn các class hoặc interface thì không thể được khai báo là HelloWorld.java54.

    Ví dụ, đây là class HelloWorld.java43 bên trong HelloWorld.java58

    package package1; package1;

    public class Logger { class Logger {

    protected void debug(String logLine){ void debug(String logLine){

    System.out.println("Dòng cần Debug: "+logLine); .out.println("Dòng cần Debug: "+logLine);

    }

    }  
     

    Còn đây là class HelloWorld.java51 bên trong HelloWorld.java60

    package package2; package2;

    import package1.Logger; package1.Logger;

    public class Main extends Logger { class Main extends Logger {

    public static void main(String [] args){ static void main(String [] args){

    Main logger = new Main();  logger = new Main();

    // Gọi phương thức debug() từ class Logger

    logger.debug("Được gọi từ class Main");.debug("Được gọi từ class Main");

    }

    }  
     

    Còn đây là class HelloWorld.java51 bên trong HelloWorld.java60

    Main logger = new Main();
     

    // Gọi phương thức debug() từ class Logger

    • logger.debug("Được gọi từ class Main");
    • Khi chạy chương trình, chúng ta được kết quả như sau:
    • Dòng cần debug: Được gọi từ class Main  
    • Như bạn có thể thấy:

    HelloWorld.java61 và HelloWorld.java62 ở hai package khác nhau

    Phương thức HelloWorld.java63 trong class Logger được khai báo là HelloWorld.java54. Và chỉ có thể được truy cập bên trong HelloWorld.java58

    Tuy nhiên, nó vẫn có thể được truy cập từ trong class HelloWorld.java51 (trong HelloWorld.java60).

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1 không bị hạn chế phạm vi hiển thị.

    Đó là vì class HelloWorld.java51 kế thừa class HelloWorld.java43

    Chương IV. Phần 4.6. Mức độ truy cập Public

    public class Logger { class Logger {

    public int debugLevel = 1; int debugLevel = 1;

    public void debug(String logLine){ void debug(String logLine){

    Video tự học Java 40: Từ khóa Public trong Java.out.println("Sửa lỗi: "+logLine);

    }

    }   void info(String logLine){

    Còn đây là class HelloWorld.java51 bên trong HelloWorld.java60.out.println("Thông tin: "+logLine);

    }

    }  
     

    Còn đây là class HelloWorld.java51 bên trong HelloWorld.java60

    public class LoggerImp { class LoggerImp {

    public static void main( String[] args ) { static void mainString[] args ) {

    Main logger = new Main();  logger = new Logger();

    // Gọi phương thức debug() từ class Logger.debug("Cấp độ " + logger.debugLevel);

    logger.debugLevel = 5;.debugLevel = 5;

    logger.debug("Được gọi từ class Main");.info("Lỗi cấp " + logger.debugLevel);

    }

    }  
     

    Còn đây là class HelloWorld.java51 bên trong HelloWorld.java60

    Main logger = new Main();
    Thông tin: Lỗi cấp 5
     

    // Gọi phương thức debug() từ class Logger

    • logger.debug("Được gọi từ class Main");
    • Khi chạy chương trình, chúng ta được kết quả như sau:
    • Dòng cần debug: Được gọi từ class Main  

    Như bạn có thể thấy:

    HelloWorld.java61 và HelloWorld.java62 ở hai package khác nhautừ khóa HelloWorld.java80 trong ngôn ngữ lập trình Java.

    Phương thức HelloWorld.java63 trong class Logger được khai báo là HelloWorld.java54. Và chỉ có thể được truy cập bên trong HelloWorld.java58

    Tuy nhiên, nó vẫn có thể được truy cập từ trong class HelloWorld.java51 (trong HelloWorld.java60).

    Đó là vì class HelloWorld.java51 kế thừa class HelloWorld.java43từ khóa HelloWorld.java80 đề cập đến object hiện tại.

    Chương IV. Phần 4.6. Mức độ truy cập Public

    class MyClass { MyClass {

    Video tự học Java 40: Từ khóa Public trong Java bienTheHien;

    MyClass(int bienTheHien){(int bienTheHien){

    this.bienTheHien = bienTheHien;.bienTheHien = bienTheHien;

    Công cụ sửa đổi mức độ truy cập

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1 không bị hạn chế phạm vi hiển thị..out.println("this tham chiếu đến = " + this);

    }

    public static void main(String[] args) { static void main(String[] args) {

    }   obj = new MyClass(8);

    Còn đây là class HelloWorld.java51 bên trong HelloWorld.java60.out.println("Đối tượng tham chiếu = " + obj);

    }

    }  
     

    Còn đây là class HelloWorld.java51 bên trong HelloWorld.java60

    Main logger = new Main();
    Đối tượng tham chiếu: MyClass@2a139a55
     

    // Gọi phương thức debug() từ class Logger

    logger.debug("Được gọi từ class Main");

    Khi chạy chương trình, chúng ta được kết quả như sau:

    Dòng cần debug: Được gọi từ class Main  

    Như bạn có thể thấy:

    HelloWorld.java61 và HelloWorld.java62 ở hai package khác nhau

    Phương thức HelloWorld.java63 trong class Logger được khai báo là HelloWorld.java54. Và chỉ có thể được truy cập bên trong HelloWorld.java58

    Tuy nhiên, nó vẫn có thể được truy cập từ trong class HelloWorld.java51 (trong HelloWorld.java60).

    Đó là vì class HelloWorld.java51 kế thừa class HelloWorld.java43

    class MyClass { MyClass {

    Chương IV. Phần 4.6. Mức độ truy cập Public bienA// bienA là biến thể hiện

    MyClass(int bienA){ // bienA là tham số(int bienA){ // bienA là tham số

    bienA = bienA;

    }

    }  
     

    Điều này là có thể vì 2 biến này có phạm vi khác nhau.

    Tuy nhiên, tên giống nhau hay gây nhầm lẫn.

    Để khắc phục vấn đề này, chúng ta sử dụng từ khóa HelloWorld.java80.

    Trước tiên, hãy xem ví dụ sau để thấy rõ vấn đề khi chạy chương trình.

    // Ví dụ vấn đề khi có 2 biến trùng tên

    class MyClass { MyClass {

    int bienA; // bienA là biến thể hiện bienA// bienA là biến thể hiện

    MyClass(int bienA){ // bienA là tham số(int bienA){ // bienA là tham số

    bienA = bienA;

    }

    public static void main(String[] args) { static void main(String[] args) {

    MyClass obj = new MyClass(5); obj = new MyClass(5);

    System.out.println("obj.bienA = " + obj.bienA);.out.println("obj.bienA = " + obj.bienA);

    }

    }  
     

    Điều này là có thể vì 2 biến này có phạm vi khác nhau.

    Tuy nhiên, tên giống nhau hay gây nhầm lẫn.

    Để khắc phục vấn đề này, chúng ta sử dụng từ khóa HelloWorld.java80.

    Trước tiên, hãy xem ví dụ sau để thấy rõ vấn đề khi chạy chương trình.

    // Ví dụ vấn đề khi có 2 biến trùng tên

    int bienA; // bienA là biến thể hiện

    class MyClass { MyClass {

    int bienA; // bienA là biến thể hiện bienA// bienA là biến thể hiện

    MyClass(int bienA){ // bienA là tham số(int bienA){ // bienA là tham số

    this.bienA = bienA;.bienA = bienA;

    }

    public static void main(String[] args) { static void main(String[] args) {

    MyClass obj = new MyClass(5); obj = new MyClass(5);

    }  .out.println("obj.bienA = " + obj.bienA);

    }

    }  
     

    Điều này là có thể vì 2 biến này có phạm vi khác nhau.

    Tuy nhiên, tên giống nhau hay gây nhầm lẫn.

    Để khắc phục vấn đề này, chúng ta sử dụng từ khóa HelloWorld.java80.

    Trước tiên, hãy xem ví dụ sau để thấy rõ vấn đề khi chạy chương trình.

    // Ví dụ vấn đề khi có 2 biến trùng tên

    int bienA; // bienA là biến thể hiện

    Khi chạy chương trình, kết quả nhận được là:

    HelloWorld.java80.

    Kết quả chúng ta mong đợi lẽ ra là HelloWorld.java88

    class MyClass { MyClass {

    int bienA; bienA;

    MyClass(int i) {(int i) {

    bienA = i;

    }

    }  
     

    Điều này là có thể vì 2 biến này có phạm vi khác nhau.

    class MyClass { MyClass {

    Tuy nhiên, tên giống nhau hay gây nhầm lẫn. bienA;

    MyClass(int i) {(int i) {

    this.bienA = i;.bienA = i;

    }

    }  
     

    Điều này là có thể vì 2 biến này có phạm vi khác nhau.từ khóa this là trong phương thức gettersetter.

    Tuy nhiên, tên giống nhau hay gây nhầm lẫn.

    Để khắc phục vấn đề này, chúng ta sử dụng từ khóa HelloWorld.java80.Lưu ý: Code sẽ không giống trong video hoàn toàn đâu nhé)

    Trước tiên, hãy xem ví dụ sau để thấy rõ vấn đề khi chạy chương trình.

    // Ví dụ vấn đề khi có 2 biến trùng tên

    class CongTy { CongTy {

    String domain; domain;

    void setDomain( String domain ) { setDomainString domain ) {

    this.domain = domain;.domain = domain;

    }

    String getDomain(){ getDomain(){

    int bienA; // bienA là biến thể hiện this.domain;

    }

    public static void main( String[] args ) { static void mainString[] args ) {

    CongTy com = new CongTy(); com = new CongTy();

    com.setDomain("NIITHANOI.EDU.VN");.setDomain("NIITHANOI.EDU.VN");

    Khi chạy chương trình, kết quả nhận được là:.out.println("Website công ty: "com.getDomain());

    }

    }  
     

    Kết quả chúng ta mong đợi lẽ ra là HelloWorld.java88

    Nhưng chúng ta lại nhận được kết quả là HelloWorld.java89
     

    Điều này là do chương trình không phân biệt được đâu là biến thể hiện và đâu là biến tham chiếu.

    Ok, bây giờ thay đổi một chút trong chương trình trên với từ khóa this.Constructor Overloading, bạn có thể cần gọi một constructor từ một constructor khác.

    // Sử dụng this để tránh vấn đề khi có 2 biến trùng tên

    System.out.println("obj.bienA = " + obj.bienA);

    Bây giờ, bạn đoán xem. Kết quả nhận được là gì?

    Chính xác, chúng ta nhận được:.(thamSo1, thamSo2, ...);
     

    Bây giờ, bạn đã nhận được kết quả đúng với mong đợi.

    Đó là vì khi bạn tạo một đối tượng, trình biên dịch Java biết đối tượng nào đã gọi đến constructor.

    Khi trình biên dịch Java gọi constructor, HelloWorld.java80 bên trong constructor được thay thế bởi đối tượng đã gọi constructor.

    Lưu ý! GoiPhucTap {

    private int a, b; int ab;

    Nếu bạn truyền các tham số với tên khác biến thể hiện thì trình biên dịch tự động thêm từ khóa

    private GoiPhucTap( int i, int j ){ GoiPhucTapint iint j ){

    this.a = i;.a = i;

    this.b = j;.b = j;

    }

    Ví dụ: GoiPhucTap(int i){

    Tương đương với:

    this(i, i); (i, i); 

    }

    private GoiPhucTap(){ GoiPhucTap(){

    int bienA;

    this(0); (0); 

    }

    @OverrideOverride

    public String toString(){ String toString(){

    Một cách sử dụng phổ biến của từ khóa this là trong phương thức gettervà setter. this.a + " + " + this.b + "i";

    }

    public static void main( String[] args ) { static void mainString[] args ) {

    GoiPhucTap g1 = new GoiPhucTap(2, 3); g1 = new GoiPhucTap(23);

    GoiPhucTap g2 = new GoiPhucTap(3); g2 = new GoiPhucTap(3);

    GoiPhucTap g3 = new GoiPhucTap();  g3 = new GoiPhucTap();

    System.out.println(c1);.out.println(c1);

    System.out.println(c2);.out.println(c2);

    System.out.println(c3);.out.println(c3);

    }

    }  
     

    Khi chạy chương trình, chúng ta nhận được kết quả:

    Đây là cách gọi khá lòng vòng, phức tạp.

    Bạn phải lưu ý khi sử sụng this(). Constructor gọi this() sẽ thực thi chậm hơn.

    Nếu class có ít đối tượng thì sử dụng this() sẽ hiệu quả, giảm được kha khá code.

    Đó, đây là cách bạn có thể gọi constructor từ constructor khác bằng this().

    Chương IV. Phần 5.4. Truyền this như một đối số

    Nếu bạn cần phải truyền đối tượng hiện tại như một đối số đến một phương thức, bạn có thể sử dụng từ khóa HelloWorld.java80.

    // Ví dụ truyền this như đối số

    class ViDuThis {  ViDuThis {

    int x; x;

    int y; y;

    ViDuThis(int x, int y) {(int xint y) {

    this.x = x;.x = x;

    this.y = y;.y = y;

    System.out.println("Trước khi truyền this đến phương thức cong2():");.out.println("Trước khi truyền this đến phương thức cong2():");

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

    cong2(this);  (this);
     

    System.out.println("Sau khi truyền this đến phương thức cong2():");.out.println("Sau khi truyền this đến phương thức cong2():");

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

    }

    void cong2(ViDuThis o){  cong2(ViDuThis o){

    o.x += 2;.x += 2;

    o.y += 2;.y += 2;

    }

    }

    class DemoThis { DemoThis {

    public static void main( String[] args ) { static void mainString[] args ) {

    ViDuThis obj = new ViDuThis(1, -1);  obj = new ViDuThis(1, -1);

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Trước khi truyền this đến phương thức cong2(): x = 1, y = -1 Sau khi truyền this đến phương thức cong2(): x = 3, y = 1  
    x = 1, y = -1
    Sau khi truyền this đến phương thức cong2():
    x = 3, y = 1
     

    Chương IV. Phần 6. Học sử dụng biểu thức Lambda trong Java.

    Trong phần này, bạn sẽ học về tính năng mới được giới thiệu trong Java 8, đó là sự hỗ trợ cho biểu thức lambda sử dụng functional interface.lambda sử dụng functional interface.

    Biểu thức Lambda là một chủ đề nóng khi Java 8 đã được phát hành. là một chủ đề nóng khi Java 8 đã được phát hành.

    Lambda đã được thêm vào trong phiên bản JDK 8 để tăng cường hiệu suất Java bằng cách tăng cường ý nghĩa của ngôn ngữ.

    Nhưng, trước khi học về lambda. Chúng ta cần hiểu...

    Chương IV. Phần 6.1. Functional Interface là gì?

    Nếu một Java interface có một và chỉ một phương thức trừu tượng thì nó được gọi là Functional Interface.Java interface có một và chỉ một phương thức trừu tượng thì nó được gọi là Functional Interface.

    Có nghĩa là chỉ có một phương thức để nói lên mục đích của interface.

    Ví dụ, HelloWorld.java95 interface từ package HelloWorld.java96 là một functional interface vì chỉ có một phương thức là HelloWorld.java97functional interface vì chỉ có một phương thức là HelloWorld.java97

    Ví dụ: Định nghĩa một Functional Interface trong Java

    import java.lang.FunctionalInterface; java.lang.FunctionalInterface;

    @FunctionalInterfaceFunctionalInterface

    public interface MyInterface{  interface MyInterface{

    double getValue(); getValue();

    }  
     

    Chú ý!

    HelloWorld.java98

     là không bắt buộc, nhưng nên sử dụng để thông báo cho trình biên dịch Java biết Interface này là một Functional Interface và nó chỉ có có một phương thức trừu tượng duy nhất.

    Trong Java 7, Functional Interface được gọi là Single Abstrack Method hoặc SAM.Single Abstrack Method hoặc SAM.

    Ví dụ: Khai triển SAM với class ẩn danh trong Java

    public class FunctionInterfaceTest { class FunctionInterfaceTest {

    public static void main(String[] args) {  static void main(String[] args) {

    new Thread(new Runnable() { Thread(new Runnable() {

    @OverrideOverride

    public void run() { void run() {

    System.out.println("Chỉ là chạy Runable Functional Interface");.out.println("Chỉ là chạy Runable Functional Interface");

    }

    }).start();start();

    }

    }  
     

    Khả năng truyền một class ẩn danh đến một constructor hoặc một phương thức đã làm cho việc viết code Java 7 dễ hơn.

    Tuy nhiên, cú pháp là vẫn còn khá dài cần nhiều thứ lằng nhằng, khó nhớ. (Như bạn thấy ở ví dụ trên =)) )

    Thế nên,

    Java 8 mở rộng sức mạnh của một SAM bằng một bước tiến xa hơn.

    Khi chúng ta đã biết rằng một Functional Interface chỉ có một phương thức thì câu hỏi nên hay không nên định nghĩa tên một phương thức và sau đó truyền như một đối số?

    Biểu thức Lambda sẽ cho bạn câu trả lời chính xác nhất. sẽ cho bạn câu trả lời chính xác nhất.

    Vậy,

    Biểu thức Lambda là gì?

    Về cơ bản, biểu thức Lambda là môt phương thức vô danh / không có tên.

    Biểu thức Lambda cũng không tự thực thi.

    Thay vào đó, nó được dùng để khai triển một phương thức xác định bởi một Functional Interface.

    Chương IV. Phần 6.2. Cách định nghĩa biểu thức Lambda trong Java.

    Biểu thức lambda giới thiệu một cú pháp và toán tử mới trong ngôn ngữ Java.lambda giới thiệu một cú pháp và toán tử mới trong ngôn ngữ Java.

    Toán tử mới được gọi là người lambda operator hoặc arrow operator HelloWorld.java99lambda operator hoặc arrow operator HelloWorld.java99

    Chúng ta thường viết một phương thức đơn giản trả về một hằng số như sau:

    double getPiValue() { return 3.1415; }   getPiValue() { return 3.1415; }
     

    Cách viết tương đương khi sử dụng lambda như sau:

    Trong biểu thức lambda trên:

    • Bên trái biểu thức chỉ định bất thì tham số nào cần thiết
    • Phía bên phải là phần thân, nó chỉ định hành động của biểu thức lambda

    Cũng có 2 kiểu viết phần thân của biểu thức lambda:

    Kiểu 1: Biểu thức lambda viết trên một dòng

    () -> System.out.println("Phần Lambda trong bài Tự học Lập trình Java");  -> System.out.println("Phần Lambda trong bài Tự học Lập trình Java");
     

    Kiểu 2: Biểu thức lambda viết như một khối code

    double pi = 3.1415; pi = 3.1415;

    return pi; pi;

    }  
     

    Biểu thức lambda cũng có thể có tham số, ví dụ:

    // Biểu thức lambda có tham số

    (n) -> (n%2) == 0  -> (n%2) == 0
     

    Biểu thức lambda này đánh giá giá trị của "Hello, World!"01 là chẵn hay lẻ.

    Nếu phần thân của biểu thức lambda là một khối code, bạn luôn phải //01 một giá trị rõ ràng.

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    Hãy thử viết một ví dụ thực tế với biểu thức lambda mà chỉ cần trả giá trị của Pi.

    Như đã nói trước đó, biểu thức lambda không tự thực thi chính nó.

    Thay vào đó, nó tạo thành khai triển của các phương thức trừu tượng được xác định bởi Functional Interface.

    Trước tiên, hãy tạo một file có tên là //03

    // Đây là một Functional Interface

    @FunctionalInterfaceFunctionalInterface

    public interface IMyInterface{ interface IMyInterface{

    double getPiValue(); getPiValue();

    }  
     

    Biểu thức lambda cũng có thể có tham số, ví dụ:

    // Biểu thức lambda có tham sốI ở đầu tên IMyInterFace là quy tắc đặt tên phổ biến cho Interface

    (n) -> (n%2) == 0  

    public class LambdaMain { class LambdaMain {

    public static void main( String[] args ) { static void mainString[] args ) {

    Biểu thức lambda này đánh giá giá trị của "Hello, World!"01 là chẵn hay lẻ. myInterface;

    myInterface = () -> 3.1415;-> 3.1415;

    Nếu phần thân của biểu thức lambda là một khối code, bạn luôn phải //01 một giá trị rõ ràng..out.println("Giá trị của Pi = " + myInterface.getPiValue());

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    }  
     

    Biểu thức lambda cũng có thể có tham số, ví dụ:

    // Biểu thức lambda có tham số

    (n) -> (n%2) == 0  

    Biểu thức lambda này đánh giá giá trị của "Hello, World!"01 là chẵn hay lẻ.

    Nếu phần thân của biểu thức lambda là một khối code, bạn luôn phải //01 một giá trị rõ ràng.

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    @FunctionalInterfaceFunctionalInterface

    Lưu ý! IMyInterface {

    String reverse(String n); reverse(String n);

    Chữ I ở đầu tên IMyInterFace là quy tắc đặt tên phổ biến cho Interface

    public class ParamLambdaMain { class ParamLambdaMain {

    public static void main( String[] args ) { static void mainString[] args ) {

    IMyInterface myInterface = (str) -> { myInterface = (str) -> {

    Bây giờ, chúng ta gán biểu thức lambda đến thể hiện của Functional Interface. result = "";

    for (int i = str.length() - 1; i >= 0 ; i--) (int i = str.length() - 1; i >= 0 ; i--)

    result += str.charAt(i);str.charAt(i);

    return result; result;

    IMyInterface myInterface;

    System.out.println("Giá trị của Pi = " + myInterface.getPiValue());.out.println("Đảo ngược Lambda = " + myInterface.reverse("Lambda"));

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    }  
     

    Biểu thức lambda cũng có thể có tham số, ví dụ:

    // Biểu thức lambda có tham số
     

    (n) -> (n%2) == 0  

    Biểu thức lambda này đánh giá giá trị của "Hello, World!"01 là chẵn hay lẻ.

    Nếu phần thân của biểu thức lambda là một khối code, bạn luôn phải //01 một giá trị rõ ràng.

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    // IGenericInterface.java

    @FunctionalInterfaceFunctionalInterface

    interface IGenericInterface { IGenericInterface<T> {

    T func(T t); func(T t);

    }  
     

    Biểu thức lambda cũng có thể có tham số, ví dụ:

    // Biểu thức lambda có tham số class GenericLambda {

    public static void main( String[] args ) { static void mainString[] args ) {

    IGenericInterface reverse = (str) -> {<Stringreverse = (str) -> {

    String result = ""; result = "";

    (n) -> (n%2) == 0   (int i = str.length() - 1; i >= 0 ; i--) {

    result += str.charAt(i);str.charAt(i);

    return result; result;

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    IMyInterface myInterface;

    System.out.println("Giá trị của Pi = " + myInterface.getPiValue());.out.println("Đảo ngược Lambda = " + reverse.func("Lambda"));

    IGenericInterface factorial = (n) -> {<Integerfactorial = (n) -> {

    } result = 1;

    for (int i = 1; i  (int i = 1; i <= n; i++) {

    result = i * result;

    return result; result;

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    IMyInterface myInterface;

    System.out.println("Giá trị của Pi = " + myInterface.getPiValue());.out.println("Kết quả 5! = " + factorial.func(5));

    Nhưng, nếu biểu thức lambda được viết trên một dòng, câu lệnh //01 là không cần thiết.

    }  
     

    Biểu thức lambda cũng có thể có tham số, ví dụ:

    // Biểu thức lambda có tham số
    Kết quả 5! = 120
     

    (n) -> (n%2) == 0  

    Biểu thức lambda này đánh giá giá trị của "Hello, World!"01 là chẵn hay lẻ.

    Ví dụ, chúng ta có một luồng dữ liệu (giả sử là một List các String) là sự kết hợp của tên quốc gia và thành phố.

    Bây giờ, chúng ta có thể xử lý luồng dữ liệu này và lấy về các thành phố từ Việt Nam.

    Chúng ta có thể thực hiện một số hoạt động trong luồng bởi sự kết hợp của Stream API và Biểu thức Lambda.

    // Ví dụ Sử dụng Stream API và Biểu thức Lambda

    import java.util.ArrayList; java.util.ArrayList;

    import java.util.List; java.util.List;

    public class StreamMain {  class StreamMain {

    static List city = new ArrayList(); List<Stringcity = new ArrayList<>();

    // Chuẩn bị dữ liệu

    public static List getCity(){ static List getCity(){

    city.add("Vietnam, Hanoi");.add("Vietnam, Hanoi");

    city.add("Vietnam, HCM");.add("Vietnam, HCM");

    city.add("Japan, Kyoto"); .add("Japan, Kyoto");

    city.add("Japan, Tokyo");.add("Japan, Tokyo");

    city.add("USA, New York");.add("USA, New York");

    return city; city;

    }

    public static void main( String[] args ) { static void mainString[] args ) {

    List myCity = getCity();<StringmyCity = getCity();

    System.out.println("Thành phố của Việt Nam:");.out.println("Thành phố của Việt Nam:");

    // Lọc thành phố từ Vietnam

    myCity.stream().stream()

    .filter((c) -> c.startsWith("Vietnam"))filter((c) -> c.startsWith("Vietnam"))

    .map((c) -> c.toUpperCase())map((c) -> c.toUpperCase())

    .sorted()sorted()

    .forEach((c) -> System.out.println(c)); forEach((c) -> System.out.println(c));

    }

    System.out.println("Thành phố của Việt Nam:");
     

    // Lọc thành phố từ Vietnam

    .forEach((c) -> System.out.println(c));
    Vietnam, Hanoi
    Vietnam, HCM
     

    }  biểu thức Lambda như một input.

    Khi chạy chương trình, kết quả nhận được là:

    Thành phố của Việt Nam: Vietnam, Hanoi Vietnam, HCM  

    Stream API cho phép chúng ta truy cập đến các phương thức như //08, //09, //10 và lấy biểu thức Lambda như một input.

    Chúng ta có thể sử dụng cả các phương thức Java được dựng sẵn hoặc tự định nghĩa các biểu thức riêng sử dụng cú pháp đã học ở trên.hàm đệ quy (Recursion Function).

    Như thế, chương trình của chúng ta sẽ giảm đi rất nhiều dòng code.

    Chương IV. Phần 7. Đệ quy trong Java (Recursion)

    Hướng dẫn java html - javahtml

    Trong phần này, bạn sẽ được tìm hiểu về cách tạo hàm đệ quy (Recursion Function).

    Qua phần này, bạn cũng sẽ biết được ưu điểm và nhược điểm của hàm đệ quy và biết sử dụng đúng lúc, đúng chỗ.

    Một phương thức tự gọi chính nó được gọi là Phương thức đệ quy.

    Ví dụ Đệ quy trong thế giới thực - Tự học Lập trình Java

    Hướng dẫn java html - javahtml

    Trên đây là một ví dụ về để quy trong thế giới thực. Bạn chỉ cần đặt một chiếc gương trước một chiếc gương là có thể tạo ra hình ảnh đệ quy rất thú vị.

    • Chương IV. Phần 7.1. Đệ quy hoạt động như thế nào?
    • Trước tiên, để hiểu cách đệ quy hoạt động chúng ta hãy cùng xem hình minh họa:

    Ví dụ Minh họa cách đệ quy hoạt động - Tự học lập trình Java

    Phương thức //11 được gọi từ bên trong các phương thứ main (Cuộc gọi bình thường)

    Ngoài ra, phương thức //11 cũng được gọi từ bên trong chính nó. Đây là một cuộc gọi đệ quy.

    Đệ quy vẫn tiếp tục cho đến khi thỏa mãn một số điều kiện ngăn chặn nó thực thi.

    Nếu không nó đệ quy vĩnh viễn.

    Do đó, để ngăn chặn đệ quy vĩnh viễn, chúng ta có thể sử dụng câu lệnh if...else.

    Chương IV. Phần 7.2. Ví dụ đệ quy trong Java.

    class TinhGiaiThua { TinhGiaiThua {

    Để hiểu rõ cách đệ quy hoạt động, hãy cùng làm một ví dụ đệ quy. int tinhGiaiThuaint n ) {

    if (n != 0) (n != 0)

    Ví dụ này sẽ tính toán giai thừa của một số. n * tinhGiaiThua(n-1); // Cuộc gọi đệ quy

    else

    return 1; 1;

    }

    public static void main(String[] args) { static void main(String[] args) {

    System.out.println("Thành phố của Việt Nam:"); soCanTinh = 4, ketQua;

    ketQua = tinhGiaiThua(soCanTinh);tinhGiaiThua(soCanTinh);

    // Lọc thành phố từ Vietnam.out.println("Kết quả: " + soCanTinh + "! = " + ketQua);

    }

    System.out.println("Thành phố của Việt Nam:");
     

    // Lọc thành phố từ Vietnam

    .forEach((c) -> System.out.println(c));

    }  

    • Khi chạy chương trình, kết quả nhận được là:
    • Thành phố của Việt Nam: Vietnam, Hanoi Vietnam, HCM  
    • Stream API cho phép chúng ta truy cập đến các phương thức như //08, //09, //10 và lấy biểu thức Lambda như một input.

    Chúng ta có thể sử dụng cả các phương thức Java được dựng sẵn hoặc tự định nghĩa các biểu thức riêng sử dụng cú pháp đã học ở trên.

    Như thế, chương trình của chúng ta sẽ giảm đi rất nhiều dòng code.

    Chương IV. Phần 7. Đệ quy trong Java (Recursion)

    Trong phần này, bạn sẽ được tìm hiểu về cách tạo hàm đệ quy (Recursion Function).

    Qua phần này, bạn cũng sẽ biết được ưu điểm và nhược điểm của hàm đệ quy và biết sử dụng đúng lúc, đúng chỗ.

    Một phương thức tự gọi chính nó được gọi là Phương thức đệ quy.

    Ví dụ Đệ quy trong thế giới thực - Tự học Lập trình Java

    Trên đây là một ví dụ về để quy trong thế giới thực. Bạn chỉ cần đặt một chiếc gương trước một chiếc gương là có thể tạo ra hình ảnh đệ quy rất thú vị.toán tử instanceof trong Java thông qua các ví dụ cụ thể.

    Chương IV. Phần 7.1. Đệ quy hoạt động như thế nào?

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 là một toán tử nhị phân.

    Nó được sử dụng để kiểm tra xem một đối tượng có phải là một thể hiện của một class cụ thể hay không.

    Toán tử này cũng kiểm tra xem một đối tượng có phải là một thể hiện của một class khai triển của một interface hay không (sẽ được thảo luận sau trong hướng dẫn này).

    Cú pháp của toán tử instanceof là:

    result = objectName instanceof className;  instanceof className;
     

    Trong đó:

    • if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      69: Là từ khóa
    • //32: Là tên đối tượng
    • //33: Là tên class
    • //34: "Hello, World!"4 nếu đối tượng là một thể hiện của class, "Hello, World!"5 nếu ngược lại.

    Ví dụ về toán tử instanceof:  
     

    // Ví dụ đơn giản toán tử instanceof

    class Main { Main {

    public static void main (String[] args) { static void main (String[] args) {

    String ten = "NIITHANOI.EDU.VN"; ten = "NIITHANOI.EDU.VN";

    Integer tuoi = 17; tuoi = 17;

    System.out.println("ten là thể hiện của String: "+ (ten instanceof String)); .out.println("ten là thể hiện của String: "+ (ten instanceof String));

    System.out.println("tuoi là thể hiện của Integer: "+ (tuoi instanceof Integer));.out.println("tuoi là thể hiện của Integer: "+ (tuoi instanceof Integer));

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    ten là thể hiện của String: true tuoi là thể hiện của Integer: true  
    tuoi là thể hiện của Integer: true
     

    Trong ví dụ trên, chúng ta đã tạo một tên đối tượng //37 của

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 và đối tượng //39 của loại "Hello Word"74.

    Sau đó, chúng tôi đã sử dụng toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 để kiểm tra xem //37 có thuộc kiểu
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 hay không và //39 có thuộc loại "Hello Word"74 hay không.

    Chương IV. Phần 8.1. Sử dụng toán tử instanceof trong kế thừa

    Trong trường hợp kế thừa, toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 được sử dụng để kiểm tra xem một đối tượng của lớp con có phải là một thể hiện của lớp cha hay không.toán tử
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69
    được sử dụng để kiểm tra xem một đối tượng của lớp con có phải là một thể hiện của lớp cha hay không.

    // Ví dụ sử dụng instanceof trong kế thừa

    class DongVat { DongVat {

    }

    class Cho extends DongVat { Cho extends DongVat {

    }

    class Main { Main {

    public static void main(String[] args){ static void main(String[] args){

    Cho cho = new Cho();  cho = new Cho();

    System.out.println("cho là thể hiện của Cho: "+ (cho instanceof Cho));.out.println("cho là thể hiện của Cho: "+ (cho instanceof Cho));

    System.out.println("cho là thể hiện của DongVat: "+ (cho instanceof DongVat));.out.println("cho là thể hiện của DongVat: "+ (cho instanceof DongVat));

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    ten là thể hiện của String: true tuoi là thể hiện của Integer: true  
    cho là thể hiện của DongVat: true
     

    Trong ví dụ trên, chúng ta đã tạo một tên đối tượng //37 của

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 và đối tượng //39 của loại "Hello Word"74.

    Sau đó, chúng tôi đã sử dụng toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 để kiểm tra xem //37 có thuộc kiểu
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 hay không và //39 có thuộc loại "Hello Word"74 hay không.

    Chương IV. Phần 8.1. Sử dụng toán tử instanceof trong kế thừa

    Trong trường hợp kế thừa, toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 được sử dụng để kiểm tra xem một đối tượng của lớp con có phải là một thể hiện của lớp cha hay không.

    // Ví dụ sử dụng instanceof trong kế thừa

    class DongVat { DongVat {

    }

    class Cho { Cho {

    }

    class Meo { Meo {

    }  
     

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cho = new Cho();  cho = new Cho();

    DongVat dv = new DongVat(); dv = new DongVat();

    Meo meo = new Meo(); meo = new Meo();

    System.out.println("ten là thể hiện của String: "+ (ten instanceof String)); .out.println("cho là thể hiện của Object: "+ (cho instanceof Object));

    System.out.println("tuoi là thể hiện của Integer: "+ (tuoi instanceof Integer));.out.println("dv là thể hiện của Object: "+ (dv instanceof Object));

    }.out.println("meo là thể hiện của Object: "+ (meo instanceof Object));

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    ten là thể hiện của String: true tuoi là thể hiện của Integer: true  
    dv là thể hiện của Object: true
    meo là thể hiện của Object: true
     

    Trong ví dụ trên, chúng ta đã tạo một tên đối tượng //37 của

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 và đối tượng //39 của loại "Hello Word"74.

    Sau đó, chúng tôi đã sử dụng toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 để kiểm tra xem //37 có thuộc kiểu
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    15 hay không và //39 có thuộc loại "Hello Word"74 hay không.

    Chương IV. Phần 8.1. Sử dụng toán tử instanceof trong kế thừa

    Trong trường hợp kế thừa, toán tử
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 được sử dụng để kiểm tra xem một đối tượng của lớp con có phải là một thể hiện của lớp cha hay không.

    // Ví dụ sử dụng instanceof trong kế thừa

    }upcasting.

    Cho cho = new Cho();

    System.out.println("cho là thể hiện của Cho: "+ (cho instanceof Cho));

    class DongVat { DongVat {

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("cho là thể hiện của DongVat: "+ (cho instanceof DongVat));.out.println("Tôi là động vật.");

    }

    }

    Cho cho = new Cho();

    System.out.println("cho là thể hiện của Cho: "+ (cho instanceof Cho)); Cho extends DongVat {

    }

    Cho cho = new Cho();

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cho = new Cho(); cho = new Cho();

    DongVat dv = cho; dv = cho;

    dv.hienThiThongTin();.hienThiThongTin();

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ trên, chúng ta đã tạo một đối tượng //47 của class //48.

    Chúng ta đã sử dụng đối tượng cho đó để tạo một đối tượng //60 của class //49 với tính năng upcasting.upcasting.

    Code thực thi mà không có bất kỳ vấn đề. gì.

    Điều này là do upcasting được tự động thực hiện bởi trình biên dịch Java.

    Downcasting thì ngược lại với Upcasting. thì ngược lại với Upcasting.

    Trong trường hợp downcasting, một đối tượng của lớp cha được coi là một đối tượng của lớp con.

    Chúng ta phải hướng dẫn rõ ràng trình biên dịch để thực hiện downcasting trong Java.hướng dẫn rõ ràng trình biên dịch để thực hiện downcasting trong Java.

    // Ví dụ downcasting trong Java

    class DongVat { DongVat {

    }

    class Meo extends DongVat { Meo extends DongVat {

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Tôi là một con mèo.");.out.println("Tôi là một con mèo.");

    }

    }

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    System.out.println("Tôi là một con mèo."); meo1 = new Meo();

    DongVat dv = meo1;      // Upcasting dv = meo1;      // Upcasting

    Meo meo2 = (Meo)dv;    // Downcasting meo2 = (Meo)dv;    // Downcasting

    meo2.hienThiThongTin();.hienThiThongTin();

    }

    Meo meo1 = new Meo();
     

    }  

    Khi chúng ta chạy chương trình, chúng tôi sẽ nhận được ngoại lệ //62.

    Tại sao lại thế nhỉ?

    Ở đây, chúng ta đã tạo ra một đối tượng //60 của class cha //49.

    Sau đó chúng ta đã cố gắng ép đối tượng //60 đến đối tượng //66 của lớp con //67.

    Điều này đã gây ra vấn đề.

    Đó là bởi vì đối tượng //60 của lớp cha //49 cũng có thể tham chiếu đến các lớp con khác dẫn tới sự mơ hồ.

    Mà mơ hồ là không thể được chấp nhận trong Java.

    Để giải quyết vấn đề này, chúng ta có thể sử dụng toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69. Đây là cách thực hiện:

    class DongVat { DongVat {

    }

    class Meo extends DongVat { Meo extends DongVat {

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Tôi là một con mèo.");.out.println("Tôi là một con mèo.");

    }

    }

    class Main { Main {

    System.out.println("Tôi là một con mèo."); static void main(String[] args) {

    Meo meo1 = new Meo(); meo1 = new Meo();

    DongVat dv = meo1;    // Upcasting dv = meo1;    // Upcasting

    }

    if (dv instanceof Meo){ (dv instanceof Meo){

    Meo meo2 = (Meo)dv;    // Downcasting meo2 = (Meo)dv;    // Downcasting

    meo2.hienThiThongTin();.hienThiThongTin();

    }

    }

    Meo meo1 = new Meo();
     

    }  

    Khi chúng ta chạy chương trình, chúng tôi sẽ nhận được ngoại lệ //62.

    Tại sao lại thế nhỉ?

    Ở đây, chúng ta đã tạo ra một đối tượng //60 của class cha //49.

    Sau đó chúng ta đã cố gắng ép đối tượng //60 đến đối tượng //66 của lớp con //67.instanceof cũng được sử dụng để kiểm tra xem một đối tượng của một class cũng là một thể hiện của interface mà từ đó class khai triển hay không.

    Điều này đã gây ra vấn đề.

    Đó là bởi vì đối tượng //60 của lớp cha //49 cũng có thể tham chiếu đến các lớp con khác dẫn tới sự mơ hồ.

    interface IDongVat { IDongVat {

    }

     Meo implements IDongVat {

    }

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Meo meo = new Meo(); meo = new Meo();

    System.out.println("Tôi là một con mèo.");.out.println("meo là thể hiện của IDongVat: "+(meo instanceof IDongVat));

    }

    Meo meo1 = new Meo();
     

    }  

    Khi chúng ta chạy chương trình, chúng tôi sẽ nhận được ngoại lệ //62.
     

    Tại sao lại thế nhỉ?

    Ở đây, chúng ta đã tạo ra một đối tượng //60 của class cha //49.

    Sau đó chúng ta đã cố gắng ép đối tượng //60 đến đối tượng //66 của lớp con //67.

    Điều này đã gây ra vấn đề.

    Đó là bởi vì đối tượng //60 của lớp cha //49 cũng có thể tham chiếu đến các lớp con khác dẫn tới sự mơ hồ.

    Mà mơ hồ là không thể được chấp nhận trong Java.

    Để giải quyết vấn đề này, chúng ta có thể sử dụng toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69. Đây là cách thực hiện:

    // Ví dụ sửa lỗi Downcasting bằng instanceof

    public static void main(String[] args) {

    class DongVat { DongVat {

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ trên, chúng ta đã sử dụng toán tử

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    69 để kiểm tra xem đối tượng //60 có phải là một thể hiện của class //67 hay không.

    }

     Cho extends DongVat {

    System.out.println("Tôi là một con mèo.");

    Meo meo1 = new Meo();
     

    }  kế thừa từ một class.

    Khi chúng ta chạy chương trình, chúng tôi sẽ nhận được ngoại lệ //62.

    Tại sao lại thế nhỉ?superclass (class cha hoặc class cơ sở) và //48 là subclass (class con hoặc class dẫn xuất).

    Class con kế thừa các trường và phương thức của class cha.

    Ảnh minh họa kế thừa trong Java

    V. Phần 1.1. Mối quan hệ IS-A trong Java.

    Kế thừa là một mối quan hệ IS-A. Chúng ta chỉ sử dụng kế thừa nếu giữa hai class có mối quan hệ IS-A.

    Đây là một số ví dụ:

    • Xe ô tô là một phương tiện
    • Quả cam là một loại hoa quả
    • Bác sĩ đa khoa là một bác sĩ
    • Con chó là một động vật

    Một ví dụ khác về kế thừa trong Java:

    public void an() { void an() {

    System.out.println("Đang ăn...");.out.println("Đang ăn...");

    }

    public void ngu() { void ngu() {

    System.out.println("Đang ngủ...");.out.println("Đang ngủ...");

    }

    System.out.println("Đang ngủ...");

    class Cho extends DongVat { Cho extends DongVat {

    } void sua() {

    public void sua() { .out.println("Gâu gâu gâu");

    }

    System.out.println("Đang ngủ...");

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.an();.an();

    }.ngu();

    cauVang.sua();.sua();

    }

    System.out.println("Đang ngủ...");
     

    }

    public void sua() {
    Đang ngủ...
    Gâu gâu gâu
     

    System.out.println("Gâu gâu gâu");

    cauVang.ngu();

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Đang ăn... Đang ngủ... Gâu gâu gâu  

    • Ở đây, chúng ta đã thực hiện kế thừa class //48 từ superclass là //49.
    • Class //48 lúc này sẽ kế thừa cả các phương thức //91 và //92 từ class //49.

    Do đó, các đối tượng của lớp Cho có thể truy cập vào các thành viên của cả class //48 và //49.

    Chương V. Phần 5.2. Từ khóa protected trong kế thừa

    • Chúng ta đã được học về từ khóa private và public trong phần trước:
    • Thành viên "Hello, World!"52 chỉ có thể truy cập bên trong class
    • Thành viên
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      1 có thể được truy cập từ bất cứ đâu

    Ngoài ra, bạn cũng có thể khai báo các phương thức và các trường là HelloWorld.java54.

    protected String giong; String giong;

    private String mauSac; String mauSac;

    Thành viên pretected có thể được truy cập: void an() {

    System.out.println("Đang ăn...");.out.println("Đang ăn...");

    }

    public void ngu() { void ngu() {

    System.out.println("Đang ngủ...");.out.println("Đang ngủ...");

    }

    public String getMauSac(){ String getMauSac(){

    return mauSac; mauSac;

    }

    System.out.println("Đang ngủ..."); void setMauSac(String mau){

    mauSac = mau;

    }

    System.out.println("Đang ngủ...");

    class Cho extends DongVat { Cho extends DongVat {

    public void thongTin(String m){ void thongTin(String m){

    }.out.println("Giống chó: " + giong);

    public void sua() { .out.println("Màu sắc: " + m);

    }

    public void sua() { void sua() {

    public void sua() { .out.println("Gâu gâu gâu");

    }

    System.out.println("Đang ngủ...");

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    } cauVang = new Cho();

    cauVang.an();.an();

    cauVang.ngu();.ngu();

    cauVang.sua();.sua();

    public void sua() { .giong = "Chó cỏ";

    System.out.println("Gâu gâu gâu");.setMauSac("Vàng");

    cauVang.thongTin(cauVang.getMauSac()); .thongTin(cauVang.getMauSac()); 

    }

    System.out.println("Đang ngủ...");
     

    }

    public void sua() {
    Đang ngủ...
    Gâu gâu gâu
    Giống chó: Chó cỏ
    Màu sắc: Vàng
     

    System.out.println("Gâu gâu gâu");

    cauVang.ngu();

    }  .giong = "Chó cỏ";
     

    Khi chạy chương trình, kết quả nhận được là:

    Đang ăn... Đang ngủ... Gâu gâu gâu  

    Ở đây, chúng ta đã thực hiện kế thừa class //48 từ superclass là //49.

    Class //48 lúc này sẽ kế thừa cả các phương thức //91 và //92 từ class //49.

    Do đó, các đối tượng của lớp Cho có thể truy cập vào các thành viên của cả class //48 và //49.

    Chương V. Phần 5.2. Từ khóa protected trong kế thừa

    Chúng ta đã được học về từ khóa private và public trong phần trước:

    Thành viên "Hello, World!"52 chỉ có thể truy cập bên trong class

    Thành viên

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1 có thể được truy cập từ bất cứ đâu

    class DongVat { DongVat {

    Ngoài ra, bạn cũng có thể khai báo các phương thức và các trường là HelloWorld.java54. String giong = "Động vật";

    public void an() { void an() {

    System.out.println("Đang ăn...");.out.println("Đang ăn...");

    System.out.println("Đang ngủ...");

    public void ngu() { void ngu() {

    }.out.println("Đang ngủ...");

    }

    System.out.println("Đang ngủ...");

    class Cho extends DongVat { Cho extends DongVat {

    @OverrideOverride

    public void an() { void an() {

    }.out.println("Đang ăn cơm...");

    }

    public void sua() { void sua() {

    System.out.println("Đang ngủ...");.out.println("Gâu gâu gâu");

    }

    System.out.println("Đang ngủ...");

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.an();.an();

    cauVang.ngu();.ngu();

    cauVang.sua();.sua();

    }

    System.out.println("Đang ngủ...");
     

    }

    public void sua() {
    Đang ngủ...
    Gâu gâu gâu
     

    System.out.println("Gâu gâu gâu");

    cauVang.ngu();

    }  

    Đây được gọi là ghi đè phương thức (Method Overriding)ghi đè phương thức (Method Overriding)

    Lưu ý!

    > Trong chương trình trên, chúng tôi đã sử dụng HelloWorld11 để báo cho trình biên dịch rằng chúng ta đang ghi đè một phương thức.

    > Nó không bắt buộc. Nhưng khuyến khích sử dụng để tăng khả năng đọc của chương trình.

    Nếu chúng ta cần gọi phương thức //91 của class //49 từ các class con của nó, chúng ta sử dụng từ khóa HelloWorld14.HelloWorld14.

    // Ví dụ sử dụng từ khóa super trong Java

    class DongVat { DongVat {

    public DongVat() { DongVat() {

    System.out.println("Tôi là động vật");.out.println("Tôi là động vật");

    }

    public void an() {  void an() {

    System.out.println("Đang ăn...");.out.println("Đang ăn...");

    }

    public void an() {

    class Cho extends DongVat { Cho extends DongVat {

    public Cho(){ Cho(){

    super();();

    System.out.println("Đang ăn...");.out.println("Tôi là một chú chó");

    }

    @OverrideOverride

    public void an() {  void an() {

    super.an();.an();

    System.out.println("Đang ăn...");.out.println("Tôi đang ăn cơm");

    }

    public void sua() { void sua() {

    public void an() { .out.println("Gâu gâu gâu");

    }

    public void an() {

    class Main { Main {

    System.out.println("Đang ăn..."); static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.an();.an();

    cauVang.sua();.sua();

    }

    public void an() {
     

    System.out.println("Đang ăn...");

    }
    Tôi là một chú chó
    Đang ăn...
    Tôi đang ăn cơm
    Gâu gâu gâu
     

    System.out.println("Tôi là một chú chó");

    System.out.println("Tôi đang ăn cơm");

    Lưu ý!

    System.out.println("Gâu gâu gâu");

    public static void main(String[] args) {

    }  

    • Khi chạy chương trình, kết quả nhận được là:: Class HelloWorld18 chỉ kế thừa từ class HelloWorld19
    • Tôi là động vật Tôi là một chú chó Đang ăn... Tôi đang ăn cơm Gâu gâu gâu  : Class HelloWorld18 kế thừa từ class HelloWorld19. Sau đó class HelloWorld22 kế thừa class HelloWorld18.
    • Ở đây, chúng ta đã sử dụng từ khóa HelloWorld14 để gọi đến constructor.: Class HelloWorld19 là cha của class HelloWorld18, HelloWorld22,
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      07,
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      09...
    • Ngoài ra, chúng ta đã gọi phương thức //91 của superclass DongVat bằng câu lệnh HelloWorld17.: Class HelloWorld22 kế thừa từ interface HelloWorld19 và HelloWorld18...
    • > Có sự khác biệt trong việc sử dụng từ khóa super trong khi gọi constructor và gọi phương thức.: Kết hợp của hai hay nhiều loại kế thừa

    Lưu ý!

    V. Phần 1.4. Các kiểu kế thừa

    Có 5 kiểu kế thừa trong Java:

    Kế thừa đơn: Class HelloWorld18 chỉ kế thừa từ class HelloWorld19

    • Kế thừa đa cấp: Class HelloWorld18 kế thừa từ class HelloWorld19. Sau đó class HelloWorld22 kế thừa class HelloWorld18.khả năng tái sử dụng code. Code có trong class cha không cần phải viết lại trong class con.
    • Kế thừa phân cấp: Class HelloWorld19 là cha của class HelloWorld18, HelloWorld22,
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      07,
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      09...đạt được tính đa hình trong runtime thông qua việc ghi đè phương thức. Chúng ta sẽ tìm hiểu thêm về tính đa hình trong các phần sau.

    Đa kế thừa: Class HelloWorld22 kế thừa từ interface HelloWorld19 và HelloWorld18...

    Kế thừa lai: Kết hợp của hai hay nhiều loại kế thừa

    > Java không hỗ trợ đa kế thừa và kế thừa lai thông qua các class. Tuy nhiên, chúng ta có thể đạt được đa kế thừa trong Java thông qua các interface.

    > Còn interface là gì thì chúng ta sẽ được học sau.

    Như bạn đã được học về kế thừa trong Java ở trên, chúng ta sử dụng kế thừa vì lý do sau:

    Lý do quan trọng nhất là khả năng tái sử dụng code. Code có trong class cha không cần phải viết lại trong class con.

    Đây được gọi là ghi đè phương thức (Method Overriding)ghi đè phương thức (Method Overriding)

    Lý do tiếp nữa là để đạt được tính đa hình trong runtime thông qua việc ghi đè phương thức. Chúng ta sẽ tìm hiểu thêm về tính đa hình trong các phần sau.

    class DongVat { DongVat {

    public void hienThiThongTin() { void hienThiThongTin() {

    Chương V. Phần 2. Ghi đè phương thức trong Java..out.println("Tôi là Động vật");

    }

    public void an() {

    System.out.println("Đang ăn..."); Cho extends DongVat {

    @overrideoverride

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Đang ăn...");.out.println("Tôi là một chú chó");

    }

    public void an() {

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    System.out.println("Đang ăn..."); cauVang = new Cho();

    cauVang.hienThiThongTin();.hienThiThongTin();

    }

    public void an() {
     

    System.out.println("Đang ăn...");

    }

    System.out.println("Tôi là một chú chó");

    System.out.println("Tôi đang ăn cơm");

    System.out.println("Gâu gâu gâu");

    Lưu ý!

    public static void main(String[] args) {

    }  

    Khi chạy chương trình, kết quả nhận được là:


    Tôi là động vật Tôi là một chú chó Đang ăn... Tôi đang ăn cơm Gâu gâu gâu  

    Ở đây, chúng ta đã sử dụng từ khóa HelloWorld14 để gọi đến constructor.

    Trong Java, muốn ghi đè phương thức phải tuân theo 3 quy tắc sau:

    • Cả class cha và class con phải có cùng tên phương thức, cùng một kiểu trả về và cùng danh sách tham số.
    • Không thể ghi đè phương thức 
      if (BieuThucDieuKien) {
          // Các câu lệnh ...
      }
      2 và HelloWorld.java38.
    • Chúng ta phải luôn ghi đè lên phương thức trừu tượng của class cha (Bạn sẽ được học trong phần phương thức trừu tượng).

    Chương V. Phần 2.2. Cách sử dụng từ khóa super trong ghi đè phương thức

    Có một câu hỏi phổ biến trong khi ghi đè phương thức.

    Liệu chúng ta có thể gọi phương thức đã bị ghi đè không?

    Câu trả lời là: Có! Chúng ta có thể.

    Để truy cập phương thức đã bị ghi đè. Chúng ta cần sử dụng từ khóa super.

    // VD2: Gọi phương thức đã bị ghi đè

    class DongVat { DongVat {

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Tôi là Động vật");.out.println("Tôi là Động vật");

    }

    }

    class Cho extends DongVat { Cho extends DongVat {

    @overrideoverride

    public void hienThiThongTin() {  void hienThiThongTin() {

    super.hienThiThongTin();.hienThiThongTin();

    System.out.println("Tôi là một chú chó");.out.println("Tôi là một chú chó");

    }

    }

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    public void hienThiThongTin() {  cauVang = new Cho();

    cauVang.hienThiThongTin();.hienThiThongTin();

    }

    }
     

    public void hienThiThongTin() {

    System.out.println("Tôi là một chú chó");
    Tôi là một chú chó
     

    Cho cauVang = new Cho();

    }  

    Kết quả nhận được sau khi chạy chương trình là:

    Tôi là Động vật Tôi là một chú chó  

    Trong ví dụ trên, class //48 có phương thức HelloWorld32 của class cha //49.

    Khi chúng ta gọi phương thức HelloWorld32 qua đối tượng HelloWorld08 (được tạo từ class //48), phương thức của class //48 được gọi.

    Tuy nhiên,

    Bên trong phương thức đó chúng ta sử dụng HelloWorld53 có nghĩa là gọi đến phương thức HelloWorld32 cua class cha.

    Lưu ý!

    > Constructor trong Java không được kế thừa. Do đó, không thể ghi đè constructor.

    > Và chúng ta vẫn có thể gọi constructor của class cha từ class con bằng super() (Xem kỹ hơn ở phần sau)

    Chương V. Phần 2.3. Chỉ định mức độ truy cập trong ghi đè phương thức

    Các phương thức tương tự có trong cả class cha và class con có thể có mức độ truy cập khác nhau.

    Tuy nhiên, nó có giới hạn.

    Đối với phương thức trong class con, chúng ta chỉ có thể sử dụng mức độ truy cập có phạm vi lớn hơn của phương thức trong class cha.

    class DongVat { DongVat {

    protected void hienThiThongTin() { void hienThiThongTin() {

    Ví dụ,.out.println("Tôi là Động vật");

    }

    }

    class Cho extends DongVat { Cho extends DongVat {

    @overrideoverride

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Tôi là một chú chó");.out.println("Tôi là một chú chó");

    }

    }

    class Main { Main {

    public void hienThiThongTin() {  static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.hienThiThongTin();.hienThiThongTin();

    }

    }
     

    public void hienThiThongTin() {

    System.out.println("Tôi là một chú chó");

    Cho cauVang = new Cho();

    }  từ khóa super trong Java thông qua các ví dụ cụ thể.

    Kết quả nhận được sau khi chạy chương trình là:

    Tôi là Động vật Tôi là một chú chó  

    Trong ví dụ trên, class //48 có phương thức HelloWorld32 của class cha //49.

    • Khi chúng ta gọi phương thức HelloWorld32 qua đối tượng HelloWorld08 (được tạo từ class //48), phương thức của class //48 được gọi.
    • Tuy nhiên,
    • Bên trong phương thức đó chúng ta sử dụng HelloWorld53 có nghĩa là gọi đến phương thức HelloWorld32 cua class cha.

    Lưu ý!

    > Constructor trong Java không được kế thừa. Do đó, không thể ghi đè constructor.

    > Và chúng ta vẫn có thể gọi constructor của class cha từ class con bằng super() (Xem kỹ hơn ở phần sau)

    Chương V. Phần 2.3. Chỉ định mức độ truy cập trong ghi đè phương thức

    public void hienThiThongTin(){ void hienThiThongTin(){

    Ví dụ,.out.println("Tôi là Động vật");

    }

    }

    class Cho extends DongVat { Cho extends DongVat {

    // Ghi đè phương thức của class cha

    @OverrideOverride

    public void hienThiThongTin(){ void hienThiThongTin(){

    System.out.println("Tôi là một chú chó");.out.println("Tôi là một chú chó");

    }

    public void thongBao(){  void thongBao(){

    hienThiThongTin();();

    }

    public void thongBao(){

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.thongBao();.thongBao();

    }

    public void thongBao(){
     

    }

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ này, bằng cách tạo một đối tượng HelloWorld08 của lớp //48, chúng ta có thể gọi phương thức "Hello, World!"77 của nó để thực hiện câu lệnh HelloWorld32.

    HelloWorld32 được định nghĩa trong cả hai class, nên phương thức của class con //48 sẽ ghi đè lên phương thức của class cha //49.

    Do đó, phương thức HelloWorld32 của class con được gọi.

    Vậy,

    Nếu bạn vẫn cứ muốn gọi phương thức đã bị ghi đè của class cha thì sao?

    Điều này hoàn toàn có thể được.

    public void hienThiThongTin(){ void hienThiThongTin(){

    Lúc này, chúng ta cần sử dụng HelloWorld53 nếu bạn cần gọi phương thức HelloWorld32 của class cha..out.println("Tôi là Động vật");

    }

    public void thongBao(){

    } Cho extends DongVat {

    // Ghi đè phương thức của class cha

    @OverrideOverride

    public void hienThiThongTin(){ void hienThiThongTin(){

    System.out.println("Tôi là một chú chó");.out.println("Tôi là một chú chó");

    }

    public void thongBao(){ void thongBao(){

    public void thongBao(){

    }();

    }  

    super.hienThiThongTin();.hienThiThongTin();

    }

    public void thongBao(){

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    }.thongBao();

    }

    public void thongBao(){
     

    }

    }  
    Tôi là Động vật
     

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ này, bằng cách tạo một đối tượng HelloWorld08 của lớp //48, chúng ta có thể gọi phương thức "Hello, World!"77 của nó để thực hiện câu lệnh HelloWorld32.

    HelloWorld32 được định nghĩa trong cả hai class, nên phương thức của class con //48 sẽ ghi đè lên phương thức của class cha //49.

    Do đó, phương thức HelloWorld32 của class con được gọi. String giong ="Động vật";

    public void thongBao(){

    class Cho extends DongVat { Cho extends DongVat {

    } String giong = "Chó cỏ";

    public void inGiongCho() { void inGiongCho() {

    }  .out.println("Tôi là " + giong);

    Khi chạy chương trình, kết quả nhận được là:.out.println("Tôi là " + super.giong);

    }

    public void thongBao(){

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    }.inGiongCho();

    }

    public void thongBao(){
     

    }

    }  
    Tôi là Động vật
     

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ này, bằng cách tạo một đối tượng HelloWorld08 của lớp //48, chúng ta có thể gọi phương thức "Hello, World!"77 của nó để thực hiện câu lệnh HelloWorld32.

    HelloWorld32 được định nghĩa trong cả hai class, nên phương thức của class con //48 sẽ ghi đè lên phương thức của class cha //49.

    Do đó, phương thức HelloWorld32 của class con được gọi.

    • Vậy,
    • Nếu bạn vẫn cứ muốn gọi phương thức đã bị ghi đè của class cha thì sao?

    Điều này hoàn toàn có thể được.

    Lúc này, chúng ta cần sử dụng HelloWorld53 nếu bạn cần gọi phương thức HelloWorld32 của class cha.

    // Phương thức bị ghi đè

    System.out.println("Tôi là Động vật");

    class Cho extends DongVat {

    // Gọi phương thức của class con

    hienThiThongTin();

    // Gọi phương thức của class cha

    DongVat() {() {

    cauVang.thongBao(); .out.println("Tôi là Động vật");

    }

    public void thongBao(){

    class Cho extends DongVat { Cho extends DongVat {

    hienThiThongTin();

    // Gọi phương thức của class cha

    Cho() {() {

    cauVang.thongBao();

    super();();

    Tôi là một chú chó Tôi là Động vật  .out.println("Tôi là một chú chó");

    }

    public void thongBao(){

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    }

    public void thongBao(){
     

    }

    }  
    Tôi là một chú chó
     

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ này, bằng cách tạo một đối tượng HelloWorld08 của lớp //48, chúng ta có thể gọi phương thức "Hello, World!"77 của nó để thực hiện câu lệnh HelloWorld32.

    Do đó, chúng tôi nhận được kết quả HelloWorld89 đầu tiên.

    Tuy nhiên, không bắt buộc sử dụng HelloWorld84.

    Ngay cả khi HelloWorld84 không được sử dụng trong constructor của class con, trình biên dịch sẽ gọi constructor mặc định của class cha.

    Vậy,

    Khi nào cần phải gọi rõ ràng?

    Câu trả lời là khi bạn muốn gọi constructor có đối số của class cha từ trong constructor của class con.

    Và HelloWorld84 đại diện cho constructor có đối số phải là câu lệnh đầu tiên trong phần thân của constructor của class con, nếu không, chúng ta sẽ gặp lỗi biên dịch.

    // Constructor mặc định không đối số

    DongVat() { () {

    System.out.println("Tôi là Động vật");.out.println("Tôi là Động vật");

    }

    // Constructor có đối số

    DongVat(String giong) {(String giong) {

    System.out.println("Giống: " + giong);.out.println("Giống: " + giong);

    }

    // Constructor có đối số

    class Cho extends DongVat { Cho extends DongVat {

    System.out.println("Giống: " + giong);

    Dog() {() {

    }

    // Constructor mặc định

    // Gọi constructor có đối số("Chó");

    // của class cha.out.println("Tôi là một chú chó");

    }

    // Constructor có đối số

    class Main { Main {

    System.out.println("Giống: " + giong); static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    }

    // Constructor có đối số
     

    System.out.println("Giống: " + giong);

    }
    Tôi là một chú chó
     

    // Constructor mặc định

    // Gọi constructor có đối số

    // của class cha

    super("Chó");

    System.out.println("Tôi là một chú chó");

    public static void main(String[] args) { trừu tượng trong Java.

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Giống: Chó Tôi là một chú chó  

    Trình biên dịch có thể tự động gọi constructor không đối số. Tuy nhiên, nó không thể gọi các constructor có đối số. là một class không thể khởi tạo. Có nghĩa là ta không thể tạo đối tượng từ class trừu tượng.

    Nếu cần gọi một constructor có đối số trong constructor của class con, chúng ta cần phải gọi rõ ràng.HelloWorld.java36 để định nghĩa class trừu tượng.

    Lưu ý!

    abstract class DongVat { class DongVat {

    > Trong ví dụ trên, chúng ta gọi một rõ ràng super("Chó"). Và trình biên dịch đã không gọi constructor mặc định của class cha.

    Chương V. Phần 4. Class trừu tượng (Abstract Class) và Phương thức trừu tượng (Abstract Method)

    // Constructor có đối số
     

    System.out.println("Giống: " + giong);

    } Cho = new DongVat();
     

    // Constructor mặc định

    // Gọi constructor có đối số
     

    // của class cha

    super("Chó");

    System.out.println("Tôi là một chú chó");

    public static void main(String[] args) {

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Giống: Chó Tôi là một chú chó  

    Trình biên dịch có thể tự động gọi constructor không đối số. Tuy nhiên, nó không thể gọi các constructor có đối số.

    Nếu cần gọi một constructor có đối số trong constructor của class con, chúng ta cần phải gọi rõ ràng.

    Lưu ý!

    > Trong ví dụ trên, chúng ta gọi một rõ ràng super("Chó"). Và trình biên dịch đã không gọi constructor mặc định của class cha.

    Chương V. Phần 4. Class trừu tượng (Abstract Class) và Phương thức trừu tượng (Abstract Method)

    Trong phần này, chúng ta sẽ học nhanh về trừu tượng trong Java.

    public void hienThiThongTin(){ void hienThiThongTin(){

    System.out.println("Tôi là Động vật");.out.println("Tôi là Động vật");

    }

    // Constructor có đối số

    System.out.println("Giống: " + giong); void diTe();

    // Constructor có đối số
     

    System.out.println("Giống: " + giong);

    }

    // Constructor mặc định

    public void hienThiThongTin(){ void hienThiThongTin(){

    System.out.println("Tôi là Động vật");.out.println("Tôi là Động vật");

    }

    // Constructor có đối số

    class Cho extends DongVat{ Cho extends DongVat{

    // Constructor có đối số

    class Main{ Main{

    public static void main(String[] args){ static void main(String[] args){

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.hienThiThongTin();.hienThiThongTin();

    }

    // Constructor có đối số
     

    System.out.println("Giống: " + giong);

    }

    // Constructor mặc định

    // Gọi constructor có đối số

    Sau đó chúng ta sử dụng đối tượng HelloWorld08 được tạo từ class //48 để truy cập vào phương thức HelloWorld32 của class //49.

    Như bạn thấy kết quả, chúng ta đã thành công.

    Chương V. Phần 4.5. Ghi đè phương thức trừu tượng

    Trong Java, bắt buộc phải ghi đè lên phương thức trừu tượng của class cha khi thực hiện kế thừa.

    Lưu ý!

    > Nếu các class con cũng được khai báo là trừu tượng, thì không bắt buộc phải ghi đè lên phương thức trừu tượng của class cha.

    // Ghi đè phương thức trừu tượng

    abstract class DongVat { class DongVat {

    abstract void diTe(); void diTe();

    public void an() { void an() {

    System.out.println("Tôi đang ăn...");.out.println("Tôi đang ăn...");

    }

    }

    class Cho extends DongVat { Cho extends DongVat {

    @overrideoverride

    public void diTe() { void diTe() {

    System.out.println("Xồ xồ xồ...");.out.println("Xồ xồ xồ...");

    }

    }

    class Main { Main {

    System.out.println("Xồ xồ xồ..."); static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.diTe();.diTe();

    cauVang.an();.an();

    }

    }
     

    System.out.println("Xồ xồ xồ...");

    public static void main(String[] args) {
    Tôi đang ăn...
     

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Xồ xồ xồ... Tôi đang ăn...  

    Bạn có thể thấy, chúng ta đã thực hiện ghi đè phương thức HelloWorld94 của class trừu tượng //49.truy cập vào constructor của một class trừu tượng bằng cách sử dụng từ khóa super.

    Khi đó, trong class con //48 chúng ta có thể khai triển cụ thể phương thức này.

    Chương V. Phần 4.6. Truy cập constructor của class trừu tượng.

    abstract class DongVat { class DongVat {

    DongVat() {() {

    Tương tự như trong class thông thường, chúng ta truy cập vào constructor của một class trừu tượng bằng cách sử dụng từ khóa super.

    }

    }

    class Cho extends DongVat { Cho extends DongVat {

    Cho() {() {

    super();();

    System.out.println("Xồ xồ xồ...");

    }

    }
     

    System.out.println("Xồ xồ xồ...");

    Lưu ý!

    > Nếu các class con cũng được khai báo là trừu tượng, thì không bắt buộc phải ghi đè lên phương thức trừu tượng của class cha.

    // Ghi đè phương thức trừu tượng

    System.out.println("Tôi đang ăn...");

    }

    }

    System.out.println("Xồ xồ xồ...");

    public static void main(String[] args) {

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Xồ xồ xồ... Tôi đang ăn...  

    Bạn có thể thấy, chúng ta đã thực hiện ghi đè phương thức HelloWorld94 của class trừu tượng //49.

    Khi đó, trong class con //48 chúng ta có thể khai triển cụ thể phương thức này.

    abstract class DongVat { class DongVat {

    abstract void diTe(); void diTe();

    }

    class Cho extends DongVat { Cho extends DongVat {

    System.out.println("Xồ xồ xồ..."); void diTe() {

    System.out.println("Xồ xồ xồ...");.out.println("Xồ xồ xồ...");

    }

    }

    class Meo extends DongVat { Meo extends DongVat {

    public void diTe() { void diTe() {

    System.out.println("Xồ xồ xồ...");.out.println("Xì xì xì...");

    }

    }

    class Main { Main {

    System.out.println("Xồ xồ xồ..."); static void main(String[] args) {

    Cho cauVang = new Cho(); cauVang = new Cho();

    cauVang.diTe();.diTe();

    Meo quangThuong = new Meo(); quangThuong = new Meo();

    quangThuong.diTe();.diTe();

    }

    }
     

    System.out.println("Xồ xồ xồ...");

    public static void main(String[] args) {

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Xồ xồ xồ... Tôi đang ăn...  HelloWorld94 trong //49 mà nó có thể đúng cho tất cả các class con.

    Bạn có thể thấy, chúng ta đã thực hiện ghi đè phương thức HelloWorld94 của class trừu tượng //49.

    Khi đó, trong class con //48 chúng ta có thể khai triển cụ thể phương thức này.

    Chương V. Phần 4.6. Truy cập constructor của class trừu tượng.

    Tương tự như trong class thông thường, chúng ta truy cập vào constructor của một class trừu tượng bằng cách sử dụng từ khóa super.trừu tượng trong lập trình Java:

    • Ví dụ:
    • // Truy cập constructor của class trừu tượng
    • ….
    • ...
    • Ở đây, chúng ta đã sử dụng HelloWorld84 bên trong constructor của class con //48 để truy cập vào constructor của class cha //49.
    • Một class con phải ghi đè lên tất cả các phương thức của một lớp trừu tượng. Tuy nhiên, nếu các lớp con cũng khai báo là abstract, nó không bắt buộc phải ghi đè lên phương thức trừu tượng.abstract, nó không bắt buộc phải ghi đè lên phương thức trừu tượng.
    • Chúng ta có thể truy cập vào các thuộc tính / phương thức static của một class trừu tượng bằng cách sử dụng tham chiếu của class trừu tượng, ví dụ: main25

    Chương V. Phần 5. Học sử dụng Interface trong Java

    Trong phần này, chúng ta sẽ tìm hiểu về interface trong Java. Chúng ta sẽ học cách khai triển các interface và hiểu được khi nào nên sử dụng interface qua các ví dụ.interface trong Java. Chúng ta sẽ học cách khai triển các interface và hiểu được khi nào nên sử dụng interface qua các ví dụ.

    Trong Java, interface là một tập hợp mà tập hợp các đặc tả mà các class khác sẽ khai triển.interface là một tập hợp mà tập hợp các đặc tả mà các class khác sẽ khai triển.

    Ví dụ:

    // Ví dụ interface trong Java

    interface HinhDaGiac { HinhDaGiac {

    public void tinhDienTich(); void tinhDienTich();

    }  
     

    Chúng ta đã sử dụng từ khóa main26 để khai báo một interface. Do đó, main27 là một interface.main26 để khai báo một interface. Do đó, main27 là một interface.

    Phương thức tinhDienTich() được khai báo trong interface (chưa có khai triển cụ thể).

    Tất cả các class sử dụng interface này phải khai triển phương thức main28.

    Một interface có thể bao gồm các phương thức trừu tượng và hằng số. Ví dụ:

    public static final String mauSac = "Xanh";  static final String mauSac = "Xanh";

    public void tinhDienTich(); void tinhDienTich();

    }  
     

    Chúng ta đã sử dụng từ khóa main26 để khai báo một interface. Do đó, main27 là một interface.

    Phương thức tinhDienTich() được khai báo trong interface (chưa có khai triển cụ thể).

    Tất cả các class sử dụng interface này phải khai triển phương thức main28.

    Một interface có thể bao gồm các phương thức trừu tượng và hằng số. Ví dụ:

    String mauSac = "Xanh"; mauSac = "Xanh";

    void tinhDienTich(); tinhDienTich();

    }  
     

    Chúng ta đã sử dụng từ khóa main26 để khai báo một interface. Do đó, main27 là một interface.

    Phương thức tinhDienTich() được khai báo trong interface (chưa có khai triển cụ thể).

    Tất cả các class sử dụng interface này phải khai triển phương thức main28.

    Một interface có thể bao gồm các phương thức trừu tượng và hằng số. Ví dụ:

    public static final String mauSac = "Xanh";

    interface HinhDaGiac { HinhDaGiac {

    void tinhDienTich(int chieuDai, int chieuRong); tinhDienTich(int chieuDaiint chieuRong);

    Ở trong ví dụ trên, chúng ta tạo một interface là main27.

    Trong interface này có chứa hằng số mauSac, phương thức trừu tượng main28 HinhChuNhat implements HinhDaGiac {

    public void tinhDienTich(int chieuDai, int chieuRong) { void tinhDienTich(int chieuDaiint chieuRong) {

    Tuy nhiên, tất cả các phương thức trong interface được ngầm định là 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1, và các trường được ngầm định là hằng số main32.out.println("Diện tích của hình chữ nhật là: " + (chieuDai * chieuRong));

    Do đó, ví dụ trên có thể viết lại thành như thế này:

    Ở trong ví dụ trên, chúng ta tạo một interface là main27.

    class Main { Main {

    Trong interface này có chứa hằng số mauSac, phương thức trừu tượng main28 static void main(String[] args) {

    HinhChuNhat h2 = new HinhDaGiac(){ h2 = new HinhDaGiac(){

    h2.tinhDienTich(5, 6);tinhDienTich(56);

    Do đó, ví dụ trên có thể viết lại thành như thế này:

    }  
     

    Chúng ta đã sử dụng từ khóa main26 để khai báo một interface. Do đó, main27 là một interface.

    Phương thức tinhDienTich() được khai báo trong interface (chưa có khai triển cụ thể).
     

    Tất cả các class sử dụng interface này phải khai triển phương thức main28.

    Một interface có thể bao gồm các phương thức trừu tượng và hằng số. Ví dụ:

    public static final String mauSac = "Xanh";

    Ở trong ví dụ trên, chúng ta tạo một interface là main27.

    Trong interface này có chứa hằng số mauSac, phương thức trừu tượng main28

    Tuy nhiên, tất cả các phương thức trong interface được ngầm định là 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    1, và các trường được ngầm định là hằng số main32

    Do đó, ví dụ trên có thể viết lại thành như thế này:

    Chương V. Phần 5.1. Từ khóa implements trong Interface

    Giống như các class trừu tượng, chúng ta không thể tạo các đối tượng trực tiếp từ interface.

    Tuy nhiên, chúng ta có thể khai triển các interface trong các class khác.

    Trong Java, chúng ta sử dụng từ khóa main33 để thực hiện các interface. Ví dụ:trừu tượng hóa trong Java.

    // Ví dụ khai triển interface trong Java

    }

    class HinhChuNhat implements HinhDaGiac { interface cũng được sử dụng để đạt đa kế thừa trong Java.

    System.out.println("Diện tích của hình chữ nhật là: " + (chieuDai * chieuRong));

    }

    public static void main(String[] args) {

    Khi chạy chương trình, kết quả nhận được là:một class kế thừa từ nhiều interface.

    Diện tích của hình chữ nhật là: 30  

    Trong ví dụ trên, chúng ta đã tạo ta interface là main27. Interface này có chứa phương thức trừu tượng là main28

    interface DuongThang { DuongThang {

    ...

    }

    interface HinhDaGiac { HinhDaGiac {

    ...

    }

    class HinhChuNhat implements DuongThang, HinhDaGiac{ HinhChuNhat implements DuongThangHinhDaGiac{

    ...

    }  
     

    Ở đây, main36 đang kế thừa từ 2 interface đó là main49 và main27.

    Lúc này, main36 phải cung cấp khai triển cụ thể cho tất cả các phương thức của 2 interface này.

    Chương V. Phần 5.3. Static Method và Private Method trong interface

    Trong bản phát hành Java 8, các interface đã có thể bao gồm các phương thức static.Java 8, các interface đã có thể bao gồm các phương thức static.

    Tương tự như một class, chúng ta có thể truy cập các phương thức static của một interface bằng cách sử dụng các tham chiếu của nó.

    Ví dụ:

    HinhDaGiac.staticMethod();  staticMethod();
     

    Ngoài ra, các interface cũng hỗ trợ các phương thức private từ phiên bản Java 9.Java 9.

    Thế nên, bây giờ bạn có thể sử dụng các phương thức private và phương thức static trong các interface.phương thức private và phương thức static trong các interface.

    Lưu ý!

    > Vì bạn không thể khởi tạo interface, các phương thức private được sử dụng làm phương thức cung cấp hỗ trợ cho các phương thức khác trong interface.

    Chương V. Phần 5.4. Phương thức mặc định trong interface

    Trước đó, tất cả các phương thức trong interface đều trừu tượng.

    Nhưng với bản phát hành Java 8, các phương thức có khai triển cụ thể (phương thức mặc định) đã được giới thiệu trong interface.phương thức mặc định) đã được giới thiệu trong interface.

    Để khai báo các phương thức mặc định bên trong các interface, chúng ta sẽ cần sử dụng từ khóa "Hello Word"65. Ví dụ:

    // Ví dụ phương thức default trong interface

    public default tinhChuVi(){ default tinhChuVi(){

    // Viết code như bình thường trong này

    }  
     

    Ở đây, main36 đang kế thừa từ 2 interface đó là main49 và main27.

    Lúc này, main36 phải cung cấp khai triển cụ thể cho tất cả các phương thức của 2 interface này.

    Chương V. Phần 5.3. Static Method và Private Method trong interface

    Trong bản phát hành Java 8, các interface đã có thể bao gồm các phương thức static.

    Tương tự như một class, chúng ta có thể truy cập các phương thức static của một interface bằng cách sử dụng các tham chiếu của nó.

    Ví dụ:

    HinhDaGiac.staticMethod();  

    Ngoài ra, các interface cũng hỗ trợ các phương thức private từ phiên bản Java 9.phương thức mặc định. Các phương thức mặc định được kế thừa như các phương thức thông thường.

    Thế nên, bây giờ bạn có thể sử dụng các phương thức private và phương thức static trong các interface.

    void tinhDienTich(); tinhDienTich();

    Lưu ý! void soCanh() {

    > Vì bạn không thể khởi tạo interface, các phương thức private được sử dụng làm phương thức cung cấp hỗ trợ cho các phương thức khác trong interface..out.println("Số cạnh của hình đa giác.");

    Chương V. Phần 5.4. Phương thức mặc định trong interface

    }

    class HinhChuNhat implements HinhDaGiac { HinhChuNhat implements HinhDaGiac {

    public void tinhDienTich() { void tinhDienTich() {

    int chieuDai = 5; chieuDai = 5;

    Trước đó, tất cả các phương thức trong interface đều trừu tượng. chieuRong = 6;

    int dienTich = chieuDai * chieuRong; dienTich = chieuDai * chieuRong;

    Nhưng với bản phát hành Java 8, các phương thức có khai triển cụ thể (phương thức mặc định) đã được giới thiệu trong interface..out.println("Diện tích của hình chữ nhật là: " + dienTich);

    Chương V. Phần 5.4. Phương thức mặc định trong interface

    public void soCanh() { void soCanh() {

    Trước đó, tất cả các phương thức trong interface đều trừu tượng..out.println("Hình có 4 cạnh");

    Chương V. Phần 5.4. Phương thức mặc định trong interface

    }

    Trước đó, tất cả các phương thức trong interface đều trừu tượng. HinhVuong implements HinhDaGiac {

    public void tinhDienTich() { void tinhDienTich() {

    int doDaiCanh = 5; doDaiCanh = 5;

    int dienTich = doDaiCanh * doDaiCanh; dienTich = doDaiCanh * doDaiCanh;

    Nhưng với bản phát hành Java 8, các phương thức có khai triển cụ thể (phương thức mặc định) đã được giới thiệu trong interface..out.println("Diện tích của hình vuông là: " + dienTich);

    Chương V. Phần 5.4. Phương thức mặc định trong interface

    }

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    HinhChuNhat hcn = new HinhChuNhat(); hcn = new HinhChuNhat();

    hcn.tinhDienTich();.tinhDienTich();

    hcn.soCanh();.soCanh();

    HinhVuong hv = new HinhVuong(); hv = new HinhVuong();

    Trước đó, tất cả các phương thức trong interface đều trừu tượng..tinhDienTich();

    Chương V. Phần 5.4. Phương thức mặc định trong interface

    }  
     

    Ở đây, main36 đang kế thừa từ 2 interface đó là main49 và main27.

    Lúc này, main36 phải cung cấp khai triển cụ thể cho tất cả các phương thức của 2 interface này.
    Hình có 4 cạnh
    Diện tích của hình vuông là: 25
     

    Chương V. Phần 5.3. Static Method và Private Method trong interface

    Trong bản phát hành Java 8, các interface đã có thể bao gồm các phương thức static.

    Tương tự như một class, chúng ta có thể truy cập các phương thức static của một interface bằng cách sử dụng các tham chiếu của nó.

    Ví dụ:

    HinhDaGiac.staticMethod();  

    Ngoài ra, các interface cũng hỗ trợ các phương thức private từ phiên bản Java 9.

    Thế nên, bây giờ bạn có thể sử dụng các phương thức private và phương thức static trong các interface.

    Lưu ý!

    > Vì bạn không thể khởi tạo interface, các phương thức private được sử dụng làm phương thức cung cấp hỗ trợ cho các phương thức khác trong interface.

    Chương V. Phần 5.4. Phương thức mặc định trong interface

    Ở đây mình sử dụng công thức Heron Formulal để tính tam giác có 3 cạnh lần lượt là a, b, c.Heron Formulal để tính tam giác có 3 cạnh lần lượt là a, b, c.

    Và để sử dụng căn bậc 2 thì sẽ phải import thêm package Math (có sẵn trong Java):package Math (có sẵn trong Java):

    // import package Math để sử dụng căn bậc 2 (sqrt)

    import java.lang.Math; java.lang.Math;

    interface  HinhDaGiac {  HinhDaGiac {

    void tinhDienTich();  tinhDienTich();

    // Tính chu vi của một đa giác

    default void tinhChuVi(int... doDaiCanh) { void tinhChuVi(int... doDaiCanh) {

    int chuVi = 0; chuVi = 0;

    for (int canh: doDaiCanh) { (int canh: doDaiCanh) {

    chuVi += canh;

    }

    System.out.println("Chu vi: " + chuVi); .out.println("Chu vi: " + chuVi);

    }

    System.out.println("Chu vi: " + chuVi);

    class TamGiac implements HinhDaGiac { TamGiac implements HinhDaGiac {

    private int a, b, c; int abc;

    } double pdienTich// p là 1/2 chu vi tam giác

    private double p, dienTich; // p là 1/2 chu vi tam giác

    TamGiac(int a, int b, int c) {(int aint bint c) {

    this.a = a;.a = a;

    this.b = b;.b = b;

    this.c = c;.c = c;

    p = 0;0;

    }

    System.out.println("Chu vi: " + chuVi);

    } void tinhDienTich() {

    p = (double) (a + b + c)/2;double) (a + b + c)/2;

    dienTich = Math.sqrt(p*(p-a)*(p-b)*(p-c));Math.sqrt(p*(p-a)*(p-b)*(p-c));

    private double p, dienTich; // p là 1/2 chu vi tam giác.out.println("Diện tích: " + dienTich);

    }

    System.out.println("Chu vi: " + chuVi);

    class Main { Main {

    } static void main(String[] args) {

        TamGiac tg = new TamGiac(4, 5, 6);TamGiac tg = new TamGiac(456);

    private double p, dienTich; // p là 1/2 chu vi tam giác

    tg.tinhDienTich();.tinhDienTich();

    // Constructor khởi tạo các cạnh của tam giác

        tg.tinhChuVi(4, 5, 6);tg.tinhChuVi(456);

    }

    System.out.println("Chu vi: " + chuVi);
     

    }

    private double p, dienTich; // p là 1/2 chu vi tam giác
    Chu vi: 15
     

    // Constructor khởi tạo các cạnh của tam giác

    // Tính diện tích tam giác bất kỳ

    public void tinhDienTich() {

    System.out.println("Diện tích: " + dienTich);

    public static void main(String[] args) {

    // Gọi phương thức tính diện tích của TamGiac

    // Gọi phương thức của HinhDaGiac

    interface DuongThang { DuongThang {

    }  

    Kết quả khi chạy chương trình là:

    System.out.println("Chu vi: " + chuVi);

    } HinhDaGiac extends DuongThang {

    private double p, dienTich; // p là 1/2 chu vi tam giác

    // Constructor khởi tạo các cạnh của tam giác

    System.out.println("Chu vi: " + chuVi);
     

    }

    private double p, dienTich; // p là 1/2 chu vi tam giác

    // Constructor khởi tạo các cạnh của tam giác

    // Gọi phương thức tính diện tích của TamGiac

    // Gọi phương thức của HinhDaGiac

    interface A { A {

    }  

    System.out.println("Chu vi: " + chuVi);

    interface B { B {

    }  

    System.out.println("Chu vi: " + chuVi);

    Interface C extends A, B { C extends A, B {

    }  

    System.out.println("Chu vi: " + chuVi);
     

    }interface trong Java. Cũng không có gì khó hiểu đúng không?

    private double p, dienTich; // p là 1/2 chu vi tam giác

    // Constructor khởi tạo các cạnh của tam giáctính đa hình trong lập trình Java, các loại đa hình khác nhau và cách triển khai chúng trong Java..

    // Tính diện tích tam giác bất kỳ

    public void tinhDienTich() {

    System.out.println("Diện tích: " + dienTich);

    public static void main(String[] args) {

    int b = 2; b = 2;

    // Gọi phương thức tính diện tích của TamGiac tong = a + b; // Kết quả tổng bằng 3
     

    // Gọi phương thức của HinhDaGiac

    String ten = "NIIT "; ten = "NIIT ";

    }   chucNang = "Dạy lập trình";

    Kết quả khi chạy chương trình là:// Kết quả: NIIT Dạy lâp trình
     

    Diện tích: 9.921567416492215 Chu vi: 15  

    • Trong chương trình trên, chúng ta đã tạo ra interface là main36, nó chứa phương thức trừu tượng main28 và phương thức mặc định main68
    • Đa hình trong Compiler-time

    Chương V. Phần 6.1. Đa hình trong Run-time

    Trong Java, có thể đạt được tính đa hình trong Run-time (thời gian chạy) thông qua ghi đè phương thức.đa hình trong Run-time (thời gian chạy) thông qua ghi đè phương thức.

    Giả sử có phương thức tương tự được tạo ra trong class cha và class con của nó.

    Trong trường hợp này, phương thức sẽ được gọi phụ thuộc vào đối tượng được sử dụng để gọi phương thức, ví dụ:

    public abstract void tiengKeu(); abstract void tiengKeu();

    }

    class Chuot extends DongVat { Chuot extends DongVat {

    @OverrideOverride

    public void tiengKeu() { void tiengKeu() {

    System.out.println("Chít chít chít..."); .out.println("Chít chít chít...");

    }

    }

    class Meo extends DongVat { Meo extends DongVat {

    @OverrideOverride

    public void tiengKeu() { void tiengKeu() {

    System.out.println("Meo meo meo...");.out.println("Meo meo meo...");

    }

    }

    class Main { Main {

    System.out.println("Chít chít chít...");  static void main(String[] args) {

    Chuot  c = new Chuot();  c = new Chuot();

    c.tiengKeu();.tiengKeu();

    Meo m = new Meo(); m = new Meo();

    m.tiengKeu();.tiengKeu();

    }

    public static void main(String[] args) {
     

    }  

    Khi chạy chương trình, kết quả nhận được là:
    Meo meo meo...
     

    Chít chít chít... Meo meo meo...  

    Lưu ý!

    > Để hiểu cách ghi đè phương thức hoạt động, bạn vui lòng đọc lại Chương V Phần 2.

    Ở ví dụ trên, phương thức tiengKeu() được triển khai khác nhau trong class khác nhau.

    • Khi chạy chương trình:
    • Câu lệnh main79 sẽ gọi đến phương thức của class main80. Vì Hello, World!4 là đối tượng được tạo từ class main80.

    Câu lệnh main83 sẽ gọi đến phương thức của class //67. Vì m là đối tượng được tạo từ class //67.đa hình trong Run-time.

    Phương thức sẽ được gọi được xác định trong quá trình thực hiện chương trình. Do đó, ghi đè phương thức là đa hình trong Run-time.

    Chương V. Phần 6.2. Đa hình trong Compile-timeđa hình trong Compile-time (thời gian biên dịch) có thể đạt được thông qua nạp chồng phương thức và nạp chồng toán tử trong Java.

    Tính đa hình trong Compile-time (thời gian biên dịch) có thể đạt được thông qua nạp chồng phương thức và nạp chồng toán tử trong Java.

    void chucNang(int a) {...} chucNang(int a) {...}

    float chucNang(double a) {...} chucNang(double a) {...}

    Trong Java, chúng ta tạo ra các phương thức có cùng tên nhưng khác đối số, như thế này: chucNang(int a, float b) {...}
     

    float chucNang(int a, float b) {...}  

    Đây được gọi là nạp chồng phương thức trong lập trình Java.nạp chồng phương thức trong Java để bạn hiểu về tính đa hình trong Compile - time:

    public void inKyTu(){ void inKyTu(){

    for(int i = 0; i (int i = 0; i < 10; i++) {

    Hãy lấy một ví dụ thực tế về nạp chồng phương thức trong Java để bạn hiểu về tính đa hình trong Compile - time:.out.print("*");

    }

    }

    public void inKyTu(char kyTu) { void inKyTu(char kyTu) {

    for(int i = 0; i (int i = 0; i < 10; i++) {

    System.out.print(kyTu);.out.print(kyTu);

    }

    }

    }

    class Main { Main {

    System.out.println("Chít chít chít...");  static void main(String[] args) {

    KyTu i = new KyTu(); i = new KyTu();

    i.inKyTu();.inKyTu();

    }.out.println("\n");

    i.inKyTu('i');.inKyTu('i');

    }

    public static void main(String[] args) {
     

    }  

    Khi chạy chương trình, kết quả nhận được là:

    • Chít chít chít... Meo meo meo...  
    • Lưu ý!

    > Để hiểu cách ghi đè phương thức hoạt động, bạn vui lòng đọc lại Chương V Phần 2.

    • Ở ví dụ trên, phương thức tiengKeu() được triển khai khác nhau trong class khác nhau.
    • Khi chạy chương trình:
    • Câu lệnh main79 sẽ gọi đến phương thức của class main80. Vì Hello, World!4 là đối tượng được tạo từ class main80.Run-time trong khi nạp chồng phương thức được thực hiện tại Compile-time.

    Câu lệnh main83 sẽ gọi đến phương thức của class //67. Vì m là đối tượng được tạo từ class //67.

    • Phương thức sẽ được gọi được xác định trong quá trình thực hiện chương trình. Do đó, ghi đè phương thức là đa hình trong Run-time.
    • Chương V. Phần 6.2. Đa hình trong Compile-time

    Tính đa hình trong Compile-time (thời gian biên dịch) có thể đạt được thông qua nạp chồng phương thức và nạp chồng toán tử trong Java.

    Trong Java, chúng ta tạo ra các phương thức có cùng tên nhưng khác đối số, như thế này:

    float chucNang(int a, float b) {...}  

    Đây được gọi là nạp chồng phương thức trong lập trình Java.

    Hãy lấy một ví dụ thực tế về nạp chồng phương thức trong Java để bạn hiểu về tính đa hình trong Compile - time:

    System.out.print("*");

    System.out.println("\n");

    Trong ví dụ trên, phương thức main86 bị nạp chồng.

    Thậm chí có thể sử dụng nó để in ra nhiều giá trị cùng một lúc.

    Chương V. Phần 6.4. Biến đa hình trong Java

    Trong Java, các biến đối tượng (biến thể hiện) biểu thị hành vi của các biến đa hình.biến đối tượng (biến thể hiện) biểu thị hành vi của các biến đa hình.

    Đó là bởi vì các biến đối tượng của một class có thể tham chiếu đến các đối tượng của class cũng như các đối tượng của các class con của nó. Ví dụ:

    // Ví dụ biến đa hình trong Java

    class DongVat { DongVat {

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Tôi là động vật"); .out.println("Tôi là động vật");

    }

    }

    class Meo extends DongVat { Meo extends DongVat {

    @OverrideOverride

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Tôi là một con mèo");.out.println("Tôi là một con mèo");

    }

    }

    class Main { Main {

    System.out.println("Tôi là một con mèo"); static void main(String[] args) {

    public static void main(String[] args) {

    DongVat dv; dv;

    // Khai báo biến dv của class DongVat

    dv = new DongVat();new DongVat();

    dv.hienThiThongTin();.hienThiThongTin();

    // Tạo đối tượng của class DongVat

    dv = new Meo();new Meo();

    // Tạo đối tượng của class Meo.hienThiThongTin();

    }

    }
     

    System.out.println("Tôi là một con mèo");

    public static void main(String[] args) { biến đa hình.

    // Khai báo biến dv của class DongVat

    • // Tạo đối tượng của class DongVat
    • // Tạo đối tượng của class Meo

    dv.hienThiThongTin(); upcasting trong Java. Hãy xem lại Chương IV. Phần 8.3 để hiểu rõ hơn nhé.

    }  

    Khi chạy chương trình, kết quả nhận được là:đóng gói (encapsulation) và ẩn dữ liệu (data hiding) trong Java với sự trợ giúp của các ví dụ.

    Trong ví dụ trên, chúng ta đã tạo một biến đối tượng //60 của class //49. Ở đây, //60 là một biến đa hình.

    Đó là vì:

    Trong câu lệnh main03, //60 là đối tượng tạo từ class //49.

    Trong câu lệnh main06, //60 là đối tượng tạo từ class //67.đóng gói là một quá trình gói code tương tự lại cùng một chỗ.

    Đây là một ví dụ về upcasting trong Java. Hãy xem lại Chương IV. Phần 8.3 để hiểu rõ hơn nhé.

    Chương V. Phần 7. Tính đóng gói trong Java.

    int chieuDai; chieuDai;

    int chieuRong; chieuRong;

    public void tinhDienTich() {} void tinhDienTich() {}

    }
     

    • System.out.println("Tôi là một con mèo");
    • public static void main(String[] args) {

    // Khai báo biến dv của class DongVat

    // Tạo đối tượng của class DongVat (data hiding) là một cách để hạn chế quyền truy cập của các thành viên dữ liệu của chúng ta bằng cách ẩn các chi tiết triển khai.

    // Tạo đối tượng của class Meo

    dv.hienThiThongTin();

    }  

    • Khi chạy chương trình, kết quả nhận được là:
    • Trong ví dụ trên, chúng ta đã tạo một biến đối tượng //60 của class //49. Ở đây, //60 là một biến đa hình.: chỉ hiển thị bên trong class
    • Đó là vì:: hiển thị bên trong package và subclass của nó
    • Trong câu lệnh main03, //60 là đối tượng tạo từ class //49.: hiển thị bên trong package

    Trong câu lệnh main06, //60 là đối tượng tạo từ class //67.

    class GaiXinh { GaiXinh {

    private int tuoi; int tuoi;

    public int getTuoi() { int getTuoi() {

    return tuoi; tuoi;

    }

    public void setTuoi(int tuoi) { void setTuoi(int tuoi) {

    this.tuoi = tuoi;.tuoi = tuoi;

    }

    }

    System.out.println("Tôi là một con mèo"); Main {

    public static void main(String[] args) { static void main(String[] args) {

    GaiXinh quynhKool = new GaiXinh(); quynhKool = new GaiXinh();

    quynhKool.setTuoi(26);.setTuoi(26);

    public static void main(String[] args) { .out.println("Quỳnh Kool " + quynhKool.getTuoi() + " tuổi");

    }

    }
     

    System.out.println("Tôi là một con mèo");

    public static void main(String[] args) {

    // Khai báo biến dv của class DongVat

    // Tạo đối tượng của class DongVat

    // Tạo đối tượng của class Meo

    dv.hienThiThongTin();

    }  ẩn dữ liệu.

    Khi chạy chương trình, kết quả nhận được là:

    class ConGai { ConGai {

    Trong ví dụ trên, chúng ta đã tạo một biến đối tượng //60 của class //49. Ở đây, //60 là một biến đa hình. String ngheNghiep;

    protected void thongBao() { void thongBao() {

    System.out.println("Tôi là " + ngheNghiep);.out.println("Tôi là " + ngheNghiep);

    }

    }

    class GaiXinh extends ConGai { GaiXinh extends ConGai {

    public static void main(String[] args) { static void main(String[] args) {

    GaiXinh quynhKool = new GaiXinh();  quynhKool = new GaiXinh();

    quynhKool.ngheNghiep = "Diễn viên";.ngheNghiep = "Diễn viên";

    quynhKool.thongBao();.thongBao();

    }

    }
     

    GaiXinh quynhKool = new GaiXinh();

    quynhKool.ngheNghiep = "Diễn viên";

    }  

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ trên, chúng ta đã tạo ra một class main28 bao gồm một biến main29 và một phương thức "Hello, World!"77 đều được khai báo là HelloWorld.java54.đóng gói dữ liệu giúp chúng ta kết hợp các trường và phương thức liên quan với nhau, điều này làm cho code của chúng ta sạch hơn và dễ đọc hơn.

    Sau đó, chúng ta đã truy cập các thành viên này từ class main32 (là subclass của class main28)

    Chương V. Phần 7.3. Tạo sao cần đóng gói dữ liệu trong lập trình Java

    Trong Java, đóng gói dữ liệu giúp chúng ta kết hợp các trường và phương thức liên quan với nhau, điều này làm cho code của chúng ta sạch hơn và dễ đọc hơn.

    Nó cũng giúp kiểm soát việc sửa đổi các trường dữ liệu của chúng ta sau này.

    private int tuoi; int tuoi;

    public void setTuoi(int tuoi) { void setTuoi(int tuoi) {

    if (tuoi >= 0) { (tuoi >= 0) {

    this.tuoi = tuoi;.tuoi = tuoi;

    }

    }

    }
     

    GaiXinh quynhKool = new GaiXinh(); getter và setter cung cấp quyền truy cập chỉ đọc hoặc chỉ ghi vào các trường trong class của chúng ta.

    Nó cũng giúp kiểm soát việc sửa đổi các trường dữ liệu của chúng ta sau này.

    Hãy xem xét một tình huống mà chúng ta muốn trường //39 trong một class không âm.(); // Truy cập chỉ đọc

    Ở đây chúng ta có thể đặt //39 là "Hello, World!"52 và có thể áp dụng logic bên trong phương thức main23.(); // Truy cập chỉ ghi
     

    Ví dụ:

    Các phương thức getter và setter cung cấp quyền truy cập chỉ đọc hoặc chỉ ghi vào các trường trong class của chúng ta.

    getTuoi(); // Truy cập chỉ đọc

    setTuoi(); // Truy cập chỉ ghi  

    Nó giúp tách các thành phần của một hệ thống. với Ẩn dữ liệu có giống nhau không?

    Các thành phần tách rời này có thể được phát triển, thử nghiệm và gỡ lỗi độc lập và đồng thời.

    Và, mọi thay đổi trong một thành phần cụ thể không có bất kỳ ảnh hưởng nào đến các thành phần khác.

    Vậy.

    Đóng gói dữ liệu với Ẩn dữ liệu có giống nhau không?

    Mọi người thường coi việc đóng gói là ẩn dữ liệu, nhưng điều đó không hoàn toàn đúng.

    Đóng gói đề cập đến việc kết hợp các trường và phương thức liên quan lại với nhau. Điều này cho phép chúng ta đạt được khả năng ẩn dữ liệu.

    Bạn có thể coi việc ẩn dữ liệu nằm trong việc đóng gói.

    Như vậy là qua chương V này bạn đã được học về các đặc điểm chính trong lập trình hướng đối tượng.class lồng nhau và class bên trong thông qua các ví dụ minh họa.

    Ở chương tiếp theo chúng ta sẽ được học về class lồng nhau, Static class, Anonymous class, enum, ...Nested class).

    CHƯƠNG VI. TỰ HỌC LẬP TRÌNH JAVA HƯỚNG ĐỐI TƯỢNG (Part 3) OuterClass {

    Chương VI. Phần 1. Nested class và Inner class trong Java

    class NestedClass { NestedClass {

    Chương VI. Phần 1. Nested class và Inner class trong Java

    }

    }
     

    GaiXinh quynhKool = new GaiXinh(); nested class trong Java:

    • quynhKool.ngheNghiep = "Diễn viên";
    • }  

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ trên, chúng ta đã tạo ra một class main28 bao gồm một biến main29 và một phương thức "Hello, World!"77 đều được khai báo là HelloWorld.java54.

    Sau đó, chúng ta đã truy cập các thành viên này từ class main32 (là subclass của class main28) là một class trong một class khác, trong đó class có quyền truy cập vào các thành viên của class bên ngoài.

    Chương V. Phần 7.3. Tạo sao cần đóng gói dữ liệu trong lập trình Javainner class (class bên trong).

    Trong Java, đóng gói dữ liệu giúp chúng ta kết hợp các trường và phương thức liên quan với nhau, điều này làm cho code của chúng ta sạch hơn và dễ đọc hơn.

    Nó cũng giúp kiểm soát việc sửa đổi các trường dữ liệu của chúng ta sau này.

    class LapTop { LapTop {

    double gia; gia;

    class CPU{ CPU{

    String nhaSanXuat; nhaSanXuat;

    String loaiChip; loaiChip;

    int getTheHeCPU(){ getTheHeCPU(){

    return 10; 10;

    }

    }

    Hãy xem xét một tình huống mà chúng ta muốn trường //39 trong một class không âm. class RAM{

    String nhaSanXuat; nhaSanXuat;

    String loaiRAM; loaiRAM;

    int getBoNhoRAM(){ getBoNhoRAM(){

    return 16; 16;

    }

    }

    }

    public class Main { class Main {

    public static void main(String[] args) { static void main(String[] args) {

    Ở đây chúng ta có thể đặt //39 là "Hello, World!"52 và có thể áp dụng logic bên trong phương thức main23. hp = new LapTop();

    LapTop.CPU cpu = hp.new CPU();.CPU cpu = hp.new CPU();

    LapTop.RAM ram = hp.new RAM();.RAM ram = hp.new RAM();

    Ví dụ:.out.println("CPU thế hệ: " + cpu.getTheHeCPU() + "TH");

    Các phương thức getter và setter cung cấp quyền truy cập chỉ đọc hoặc chỉ ghi vào các trường trong class của chúng ta..out.println("Bộ nhớ RAM: " + ram.getBoNhoRAM() + "GB");

    }

    }
     

    GaiXinh quynhKool = new GaiXinh();

    quynhKool.ngheNghiep = "Diễn viên";
    Bộ nhớ RAM: 16GB
     

    }  

    Trong class HelloWorld.java51, đối tượng của main38 được tạo trước tiên.

    Và để tạo ra đối tượng của main39, chúng ta sử dụng toán tử main46.

    LapTop.CPU cpu = hp.new CPU();  .CPU cpu = hp.new CPU();
     

    Tiếp theo đây là vấn đề quan trọng.

    Chúng ta đã có class bên ngoài (outer class) và class bên trong (inner class).

    Vậy, làm thế nào để truy cập thành viên của class bên ngoài từ class bên trong?

    Hãy cùng làm một ví dụ:

    private String tenXe; String tenXe;

    private String loaiXe; String loaiXe;

    public Oto(String tenXe, String loaiXe) { Oto(String tenXeString loaiXe) {

    this.tenXe = tenXe;.tenXe = tenXe;

    this.loaiXe = loaiXe; .loaiXe = loaiXe;

    }

    private String getTenXe() { String getTenXe() {

    return this.tenXe; this.tenXe;

    }

    class DongCo { DongCo {

    double loaiDongCo; loaiDongCo;

    void setDongCo() { setDongCo() {

    //Truy cập thuộc tính loaiXe của Oto

    if(Oto.this.loaiXe.equals("N20")){ (Oto.this.loaiXe.equals("N20")){

    // Gọi phương thức getTenXe của Oto

    if(Oto.this.getTenXe().equals("Vinfast")) {(Oto.this.getTenXe().equals("Vinfast")) {

    this.loaiDongCo = 3.0;.loaiDongCo = 3.0;

    } else {else {

    this.loaiDongCo = 2.0;.loaiDongCo = 2.0;

    }

    }else{else{

    //Truy cập thuộc tính loaiXe của Oto.loaiDongCo = 2.0;

    }

    }

    double getLoaiDongCo(){ getLoaiDongCo(){

    return this.loaiDongCo; this.loaiDongCo;

    }

    }

    //Truy cập thuộc tính loaiXe của Oto

    public class Main { class Main {

    public static void main(String[] args) { static void main(String[] args) {

    if(Oto.this.loaiXe.equals("N20")){  luxSA = new Oto("Vinfast""N20");

    Oto.DongCo dongCo1 = luxSA.new DongCo();.DongCo dongCo1 = luxSA.new DongCo();

    dongCo1.setDongCo();.setDongCo();

    // Gọi phương thức getTenXe của Oto.out.println("Động cơ Lux SA là: " + dongCo1.getLoaiDongCo());

    this.loaiDongCo = 2.0;  x5 = new Oto("BMW""N20");

    Oto.DongCo dongCo2 = x5.new DongCo();.DongCo dongCo2 = x5.new DongCo();

    dongCo2.setDongCo();.setDongCo();

    }.out.println("Động cơ BMW X5 là: " + dongCo2.getLoaiDongCo());

    }

    //Truy cập thuộc tính loaiXe của Oto
     

    if(Oto.this.loaiXe.equals("N20")){

    // Gọi phương thức getTenXe của Oto

    this.loaiDongCo = 2.0; .this.loaiXe.equals("N20")
     

    }

    Oto luxSA = new Oto("Vinfast", "N20");

    System.out.println("Động cơ Lux SA là: " + dongCo1.getLoaiDongCo());

    Oto x5 = new Oto("BMW", "N20");

    System.out.println("Động cơ BMW X5 là: " + dongCo2.getLoaiDongCo());

    }  .this.getTenXe().equals("Vinfast")
     

    Khi chạy chương trình, kết quả nhận được là:

    Trong ví dụ bên trên, bên trong class DongCo (class bên trong class Oto), chúng ta đã sử dụng từ khóa HelloWorld.java80 để có quyền truy cập vào biến thành viên main48 của class Oto (class bên ngoài) như:

    Oto.this.loaiXe.equals("N20")  static nested class.

    Điều này là có thể, mặc dù biến main48 là "Hello, World!"52 trong class main51.

    Bởi vì "Hello, World!"52 hiển thị bên trong cùng class (class main51 chứa class main54)

    Bạn cũng có thể nhìn thấy chúng ta đã sử dụng main55 để truy cập thành viên của class main51

    Nếu bạn chỉ sử dụng HelloWorld.java80 thay vì main55, nó sẽ truy cập thành viên của class main54.

    Tương tự, chúng ta cũng gọi thành công phương thức main60 của class main51.

    Oto.this.getTenXe().equals("Vinfast")  .InnerClass obj = new OuterClass.InnerClass();
     

    Mặc dù phương thức main60 cũng là phương thức "Hello, World!"52 của class main51.

    String model; model;

    public LapTop(String model) { LapTop(String model) {

    this.model = model;.model = model;

    }

    static class USB{ class USB{

    int usb3 = 2; usb3 = 2;

    int usbC = 1; usbC = 1;

    //Truy cập thuộc tính loaiXe của Oto getSoCongUSB(){

    return usb3 + usbC; usb3 + usbC;

    }

    }

    //Truy cập thuộc tính loaiXe của Oto

    public class Main { class Main {

    public static void main(String[] args) { static void main(String[] args) {

    LapTop.USB usb = new LapTop.USB();.USB usb = new LapTop.USB();

    if(Oto.this.loaiXe.equals("N20")){ .out.println("Tổng số cổng USB: " + usb.getSoCongUSB());

    }

    //Truy cập thuộc tính loaiXe của Oto
     

    if(Oto.this.loaiXe.equals("N20")){

    // Gọi phương thức getTenXe của Oto

    this.loaiDongCo = 2.0;

    }.USB usb = new LapTop.USB();
     

    Oto luxSA = new Oto("Vinfast", "N20");

    String model; model;

    public LapTop(String model) { LapTop(String model) {

    this.model = model;.model = model;

    }

    static class USB{ class USB{

    int usb3 = 2;  usb3 = 2;

    int usbC = 1; usbC = 1;

    int getSoCongUSB(){ getSoCongUSB(){

    if (LapTop.this.model.equals("2020")) { (LapTop.this.model.equals("2020")) {

    return 4; 4;

    } else {else {

    return usb3 + usbC; usb3 + usbC;

    }

    }

    }

    }

    public class Main {  class Main {

    public static void main(String[] args) { static void main(String[] args) {

    LapTop.USB usb = new LapTop.USB();.USB usb = new LapTop.USB();

    System.out.println("Tổng số cổng USB: " + usb.getSoCongUSB());.out.println("Tổng số cổng USB: " + usb.getSoCongUSB());

    }

    }  
     

    Khi chúng ta chạy chương trình trên, nó sẽ báo lỗi:

    error: non-static variable this cannot be referenced from a static context  : non-static variable this cannot be referenced from a static context
     

    Điều này là do, không tồn tại tham chiếu nào của class main38 được lưu trữ trong main71

    Chương VI. Phần 1.3. Những điểm cần nhớ về nested class trong Java

    • ​Java coi class bên trong (inner class) như một thành viên thông thường của một class. Chúng giống như các phương thức và các biến được khai báo bên trong một class.
    • Vì, class bên trong là thành viên của class bên ngoài, bạn có thể áp dụng bất kỳ công cụ sửa đổi truy cập nào như "Hello, World!"52, HelloWorld.java54 cho class bên trong của bạn, (Điều này không thể có trong các class thông thường).
    • Vì class bên trong là thành viên kèm theo của class bên ngoài, nên bạn có thể sử dụng ký hiệu "Hello, World!"63 để truy cập class bên trong và các thành viên của nó.
    • Sử dụng class lồng nhau sẽ làm cho code của bạn dễ đọc hơn và đóng gói code tốt hơn.class lồng nhau sẽ làm cho code của bạn dễ đọc hơn và đóng gói code tốt hơn.
    • Các class lồng nhau không phải static (inner class) có quyền truy cập vào các thành viên khác của class bên ngoài, ngay cả khi chúng được khai báo là "Hello, World!"52.

    Chương VI. Phần 2. Nested Static class trong Java.

    Tiếp tục với chủ đề Nested class, phần này bạn sẽ được học về Nested Static class qua các ví dụ.Nested class, phần này bạn sẽ được học về Nested Static class qua các ví dụ.

    Sau phần này bạn cũng sẽ hiểu được sự khác nhau của static class khác với inner class.

    Như đã học trong phần trên, trong Java, chúng ta có thể có một class bên trong một class khác.

    Các class như thế được gọi là các class lồng nhau. Trong Java, các lớp lồng nhau có hai loại:

    • Nessted non-static class (Hay còn gọi là Inner class)
    • Nested static class

    Nếu bạn chưa hiểu rõ về inner class thì hãy xem lại phần trước nhé.

    Trong phần này, chúng ta sẽ học về các Static class lồng nhau.

    Chương VI. Phần 2.1. Cú pháp Nested Static class

    Chúng ta sử dụng từ khóa static để làm cho class lồng nhau của chúng ta thành Nested Static Class.

    Lưu ý!

    > Trong Java, chỉ Nested class mới được phép là static.

    Giống như các class thông thường, các static class lồng nhau có thể bao gồm cả các trường và phương thức static và non-static.static và non-static.

    Ví dụ:

    static class DongVatCoVu { class DongVatCoVu {

    // các thành viên static và non-static của DongVatCoVu

    }

    // Thành viên của DongVat

    }  
     

    Khi chúng ta chạy chương trình trên, nó sẽ báo lỗi:Static Nested Class được liên kết với class bên ngoài.

    error: non-static variable this cannot be referenced from a static context  

    Điều này là do, không tồn tại tham chiếu nào của class main38 được lưu trữ trong main71, chúng ta không cần các đối tượng của class bên ngoài.

    Chương VI. Phần 1.3. Những điểm cần nhớ về nested class trong Java

    // inner class

    class BoSat { BoSat {

    ​Java coi class bên trong (inner class) như một thành viên thông thường của một class. Chúng giống như các phương thức và các biến được khai báo bên trong một class. void hienThiThongTin() {

    Vì, class bên trong là thành viên của class bên ngoài, bạn có thể áp dụng bất kỳ công cụ sửa đổi truy cập nào như "Hello, World!"52, HelloWorld.java54 cho class bên trong của bạn, (Điều này không thể có trong các class thông thường)..out.println("Loài bò sát");

    }

    }

    // static class

    static class DongVatCoVu { class DongVatCoVu {

    public void hienThiThongTin() { void hienThiThongTin() {

    Vì class bên trong là thành viên kèm theo của class bên ngoài, nên bạn có thể sử dụng ký hiệu "Hello, World!"63 để truy cập class bên trong và các thành viên của nó..out.println("Động vật có vú");

    }

    }

    }

    public class Main {  Main {

    public static void main(String[] args) { static void main(String[] args) {

    System.out.println("Tổng số cổng USB: " + usb.getSoCongUSB());

    DongVat dongVat = new DongVat(); dongVat = new DongVat();

    }  

    Khi chúng ta chạy chương trình trên, nó sẽ báo lỗi:.BoSat ran = dongVat.new BoSat();

    ran.hienThiThongTin();.hienThiThongTin();

    error: non-static variable this cannot be referenced from a static context  

    DongVat.DongVatCoVu cauVang = new DongVat.DongVatCoVu();.DongVatCoVu cauVang = new DongVat.DongVatCoVu();

    cauVang.hienThiThongTin();.hienThiThongTin();

    }

    }  
     

    Khi chúng ta chạy chương trình trên, nó sẽ báo lỗi:

    error: non-static variable this cannot be referenced from a static context  
    Động vật có vú

    Điều này là do, không tồn tại tham chiếu nào của class main38 được lưu trữ trong main71

    Chương VI. Phần 1.3. Những điểm cần nhớ về nested class trong Java

    ​Java coi class bên trong (inner class) như một thành viên thông thường của một class. Chúng giống như các phương thức và các biến được khai báo bên trong một class..BoSat ran = dongVat.new BoSat();
     

    Vì, class bên trong là thành viên của class bên ngoài, bạn có thể áp dụng bất kỳ công cụ sửa đổi truy cập nào như "Hello, World!"52, HelloWorld.java54 cho class bên trong của bạn, (Điều này không thể có trong các class thông thường).

    DongVat.DongVatCoVu cauVang = new DongVat.DongVatCoVu();  .DongVatCoVu cauVang = new DongVat.DongVatCoVu();
     

    Chương VI. Phần 2.2. Cách truy cập thành viên của class bên ngoài thông qua static nested class.

    Trong Java, các Static Nested Class được liên kết với class bên ngoài.

    Đây là lý do tại sao các

    Static Nested Class chỉ có thể truy cập các thành viên static (biến static và phương thức static) của class bên ngoài. chỉ có thể truy cập các thành viên static (biến static và phương thức static) của class bên ngoài.

    Hãy xem những gì sẽ xảy ra nếu chúng ta cố gắng truy cập các biến và phương thức non-static của class bên ngoài.

    static class DongVatCoVu { class DongVatCoVu {

    public void hienThiThongTin() {  void hienThiThongTin() {

    System.out.println("Động vật có vú");.out.println("Động vật có vú");

    }

    }

    class BoSat { BoSat {

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Loài bò sát");.out.println("Loài bò sát");

    }

    }

    public void an() { void an() {

    System.out.println("Loài bò sát");.out.println("Đang ăn...");

    }

    System.out.println("Loài bò sát");

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    DongVat dongVat = new DongVat(); dongVat = new DongVat();

    DongVat.BoSat ran = dongVat.new BoSat();.BoSat ran = dongVat.new BoSat();

    System.out.println("Đang ăn..."); .hienThiThongTin();

    DongVat.DongVatCoVu cauVang = new DongVat.DongVatCoVu();.DongVatCoVu cauVang = new DongVat.DongVatCoVu();

    cauVang.hienThiThongTin();.hienThiThongTin();

    cauVang.an();.an();

    }

    System.out.println("Loài bò sát");
     

    System.out.println("Đang ăn...");

    }

    dongVat.an();

    ran.hienThiThongTin();

    }  :   method an()

    Khi chạy chương trình, chúng ta nhận được thông báo:: variable cauVang of type DongVatCoVu

    1 error error

    Main.java:27: error: cannot find symbol
     

    ^

    symbol:   method an()

    location: variable cauVang of type DongVatCoVu

    compiler exit status 1  

    Trong ví dụ trên, chúng ta đã tạo một phương thức nont-static là //91 bên trong class //49.

    Bây giờ, nếu chúng ta cố gắng truy cập //91 bằng cách sử dụng đối tượng HelloWorld08, trình biên dịch sẽ hiển thị một lỗi.

    Đó là bởi vì HelloWorld08 là một đối tượng của một static class nên chúng ta không thể truy cập các phương thức non-static thông qua HelloWorld08. static void hienThiThongTin() {

    Chương VI. Phần 2.3. Static Top-Level Class trong Java.out.println("Động vật nào đó...");

    }

    System.out.println("Loài bò sát");

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    DongVat.hienThiThongTin();.hienThiThongTin();

    }

    System.out.println("Loài bò sát");
     

    System.out.println("Đang ăn..."); : modifier static not allowed here

    }

    ran.hienThiThongTin();

    }  

    Main.java:27: error: cannot find symbol
     

    ^

    symbol:   method an()

    location: variable cauVang of type DongVatCoVuClass ẩn danh (hay gọi là Anonymous Class) trong Java thông qua các vị dụ thực tế.

    compiler exit status 1  

    Trong ví dụ trên, chúng ta đã tạo một phương thức nont-static là //91 bên trong class //49.không cần đặt tên cho nó.

    Bây giờ, nếu chúng ta cố gắng truy cập //91 bằng cách sử dụng đối tượng HelloWorld08, trình biên dịch sẽ hiển thị một lỗi.Nested class không có tên được gọi là Anonymous Class.

    Đó là bởi vì HelloWorld08 là một đối tượng của một static class nên chúng ta không thể truy cập các phương thức non-static thông qua HelloWorld08.

    Chương VI. Phần 2.3. Static Top-Level Class trong Java

    Như đã đề cập ở trên, chỉ các class được lồng bên trong mới có thể là 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    2. Chúng ta không thể viết class cao nhất là 
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    2.

    Hãy ví dụ nếu chúng ta cố gắng tạo một class cao nhất là static.

    class ClassBenNgoai { ClassBenNgoai {

    public static void hienThiThongTin() {

    doiTuong = new Type(danhSachThamSo) {new Type(danhSachThamSo) {

    System.out.println("Động vật nào đó...");

    Main.java:1: error: modifier static not allowed here

    System.out.println("Loài bò sát");
     

    • System.out.println("Đang ăn...");
    • }

    ran.hienThiThongTin();

    }  

    Khi chạy chương trình, chúng ta nhận được thông báo:

    "Hello Word"22

    Main.java:27: error: cannot find symbol

    ^

    symbol:   method an()

    public void hienThiThongTin() { void hienThiThongTin() {

    location: variable cauVang of type DongVatCoVu.out.println("Hình đa giác");

    }

    System.out.println("Loài bò sát");

    class VDAnonymousClass { VDAnonymousClass {

    System.out.println("Đang ăn...");  void taoClass() {

    }

    HinhDaGiac h2 = new HinhDaGiac() { h2 = new HinhDaGiac() {

    ran.hienThiThongTin();

    public void hienThiThongTin() { void hienThiThongTin() {

    }  .out.println("Bên trong Anonymous Class");

    }

    System.out.println("Loài bò sát");

    h2.hienThiThongTin();.hienThiThongTin();

    }

    System.out.println("Loài bò sát");

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    VDAnonymousClass vd = new VDAnonymousClass(); vd = new VDAnonymousClass();

    vd.taoClass();.taoClass();

    }

    }  
     

    Khi chạy chương trình, kết quả là:

    Bên trong Anonymous Class  
     

    Trong ví dụ trên, chúng ta đã tạo ra một class main27. Nó có một phương thức là HelloWorld32.

    Sau đó, chúng ta đã tạo một Anonymous Class kế thừa class main27 và ghi đè phương thức HelloWorld32.

    Khi chúng ta chạy chương trình, một đối tượng 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    000 của Anonymous Class được tạo ra. Sau đó, đối tượng này gọi đến phương thức HelloWorld32 của Anonymous Class.

    Ví dụ thứ hai, Anonymous Class kế thừa một interface.

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Hình đa giác");.out.println("Hình đa giác");

    }

    }

    class VDAnonymousClass { VDAnonymousClass {

    public void taoClass() { void taoClass() {

    // Tạo Anonymous Class kế thừa interface

    HinhDaGiac h2 = new HinhDaGiac() { h2 = new HinhDaGiac() {

    // Ghi đè phương thức

    public void hienThiThongTin() { void hienThiThongTin() {

    System.out.println("Bên trong Anonymous Class");.out.println("Bên trong Anonymous Class");

    }

    };

    h2.hienThiThongTin();.hienThiThongTin();

    }

    }

    // Tạo Anonymous Class kế thừa interface Main {

    public static void main(String[] args) { static void main(String[] args) {

    VDAnonymousClass vd = new VDAnonymousClass(); vd = new VDAnonymousClass();

    vd.taoClass();.taoClass();

    }

    }  
     

    Khi chạy chương trình, kết quả là:

    Bên trong Anonymous Class  
     

    Trong ví dụ trên, chúng ta đã tạo ra một class main27. Nó có một phương thức là HelloWorld32.

    Sau đó, chúng ta đã tạo một Anonymous Class kế thừa class main27 và ghi đè phương thức HelloWorld32.

    Khi chúng ta chạy chương trình, một đối tượng 
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    000 của Anonymous Class được tạo ra. Sau đó, đối tượng này gọi đến phương thức HelloWorld32 của Anonymous Class.

    Ví dụ thứ hai, Anonymous Class kế thừa một interface.

    System.out.println("Hình đa giác");new classA() {

    } void hienThiThongTin() {

    // Tạo Anonymous Class kế thừa interface.out.println("Ghi đè phương thức hienThiThongTin().");

    }

    // Ghi đè phương thức
     

    System.out.println("Bên trong Anonymous Class");

    }; giúp chúng ta viết code súc tích hơn.

    class Main {

    Khi chạy chương trình, kết quả nhận được là:Singleton Design pattern và cách áp dụng nó trong Java với sự trợ giúp của các ví dụ.

    Trong ví dụ trên, chúng ta đã tạo một Anonymous Class kế thừa một interface. là một mẫu thiết kế (Design pattern) chứ không phải là một tính năng dành riêng cho Java. Nó đảm bảo rằng chỉ có một đối tượng được tạo ra từ một class nào đó.

    Và cách hoạt động của nó cũng tương tự như ở ví dụ Anonymous Class kế thừa class vậy.

    Chương VI. Phần 3.2. Ưu điểm của Anonymous Class

    Trong các Anonymous Class, các đối tượng được tạo bất cứ khi nào cần thiết. Ví dụ:Singleton trong Java:

    • doiTuong = new classA() {
    • public void hienThiThongTin() {
    • System.out.println("Ghi đè phương thức hienThiThongTin().");

    };  

    Trong ví dụ này, một đối tượng của Anonymous Class đã được tạo tự động khi chúng ta cần ghi đè phương thức HelloWorld32 trong

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    003.

    private static ViDuSingleton doiTuongSingle; static ViDuSingleton doiTuongSingle;

    Anonymous Class giúp chúng ta viết code súc tích hơn. ViDuSingleton() {

    Chương VI. Phần 4. Java Singleton

    }

    public static ViDuSingleton getDoiTuong() { static ViDuSingleton getDoiTuong() {

    Trong phần này, chúng ta sẽ học về Singleton Design pattern và cách áp dụng nó trong Java với sự trợ giúp của các ví dụ.

    Singleton là một mẫu thiết kế (Design pattern) chứ không phải là một tính năng dành riêng cho Java. Nó đảm bảo rằng chỉ có một đối tượng được tạo ra từ một class nào đó.

    }

    }  
     

    • Khi chạy chương trình, kết quả là:
    • Bên trong Anonymous Class  
    • Trong ví dụ trên, chúng ta đã tạo ra một class main27. Nó có một phương thức là HelloWorld32.

    Sau đó, chúng ta đã tạo một Anonymous Class kế thừa class main27 và ghi đè phương thức HelloWorld32.

    Khi chúng ta chạy chương trình, một đối tượng 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    000 của Anonymous Class được tạo ra. Sau đó, đối tượng này gọi đến phương thức HelloWorld32 của Anonymous Class. có thể được sử dụng trong khi làm việc với cơ sở dữ liệu.

    Ví dụ thứ hai, Anonymous Class kế thừa một interface.

    System.out.println("Hình đa giác");

    private static Database dbObject; static Database dbObject;

    private Database() {       Database() {      

    }

    } static Database getInstance() {

    // Tạo Anonymous Class kế thừa interface

    if(dbObject == null) {(dbObject == null) {

    dbObject = new Database();new Database();

    }

    // Trả về đối tượng singleton

    return dbObject; dbObject;

    }

    public void getConnection() { void getConnection() {

    System.out.println("Bạn đã kết nối tới cơ sở dữ liệu."); .out.println("Bạn đã kết nối tới cơ sở dữ liệu.");

    }

    }

    class Main { Main {

    public static void main(String[] args) { static void main(String[] args) {

    Database db1; db1;

    // Tham chiếu đến đối tượng của Database

    db1 = Database.getInstance();Database.getInstance();

    db1.getConnection();.getConnection();

    }

    }  
     

    Khi chạy chương trình, kết quả nhận được là:

    Bạn đã kết nối tới cơ sở dữ liệu.  
     

    Trong ví dụ trên:

    Chúng ta đã tạo ra một class singleton là 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    010.

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    011 là một trường của class. Nó tham chiếu đến đối tượng của class
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    010.

    private constructor 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    013 ngăn chặn việc tạo đối tượng bên ngoài class.

    Phương thức static 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    014 trả về thể hiện của class với bên ngoài.

    Trong class HelloWorld.java51, chúng ta có biến 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    016. Chúng ta đang gọi 
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    014 bằng 
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    016 để lấy đối tượng duy nhất của 
    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    010.

    Vì 

    if (BieuThucDieuKien) {
        // Các câu lệnh ...
    }
    010 chỉ có thể có một đối tượng, tất cả các máy khách có thể truy cập cơ sở dữ liệu thông qua một kết nối duy nhất.

    Điều quan trọng cần lưu ý là:

    > Chỉ có một vài tình huống (như đăng nhập) là sử dụng singleton. Kết nối cơ sở dữ liệu thường không nên sử dụng singleton.

    Và nếu bạn không biết chắc chắc nên sử dụng Java Singleton hay không thì tốt nhất bạn không nên sử dụng.

    > NOTE: Nếu bạn là người mới, hãy chú ý học thật tốt, hiểu cặn kẽ một ngôn ngữ (Không lên học lan man). Bởi vì bản chất lập trình là giống nhau, ngôn ngữ chỉ là công cụ. Học tốt một ngôn ngữ thì chuyển đổi hay nâng cấp ngôn ngữ khác cũng dễ dàng hơn.NOTE: Nếu bạn là người mới, hãy chú ý học thật tốt, hiểu cặn kẽ một ngôn ngữ (Không lên học lan man). Bởi vì bản chất lập trình là giống nhau, ngôn ngữ chỉ là công cụ. Học tốt một ngôn ngữ thì chuyển đổi hay nâng cấp ngôn ngữ khác cũng dễ dàng hơn.

    > Đăng ký HỌC LẬP TRÌNH (Full Stack) ngay nếu bạn thực sự nghiêm túc với nghề lập trình.HỌC LẬP TRÌNH (Full Stack) ngay nếu bạn thực sự nghiêm túc với nghề lập trình.

    Còn tiếp...

    ---

    HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI

    Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!

    Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội

    SĐT: 02435574074 - 0968051561

    Email:

    Fanpage: https://facebook.com/NIIT.ICT/

    #niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python