Tổng Hợp Từ A - Z Kiến Thức Java Cơ Bản

Bài viết đã được cập nhật vào: 14/02/2021

Mục lục bài viết

  • 1. Java là gì?
  • 2. Lập trình hướng đối tượng là gì?
  • 3. Bốn tính chất cơ bản của ngôn ngữ lập trình Java:
    • 1. Tính đóng gói (Encapsulation).
    • 2. Tính đa hình (Polymorphism).
    • 3. Tính trừu tưởng (Abstraction).
    • 4 Tính kế thừa (Inheritance).
  • 4. Đối tượng là gì?
  • 5. Lớp (Class) là gì?
  • 6. Các loại access modifier trong java?
  • 7. Nested Class là gì?
  • 8. Biến là gì?
  • 9. Exception là gì?
    • Sự khác nhau giữa “Checked Exceptions” và “Unchecked Exceptions” trong Java?
  • 10. Các kiểu dữ liệu nguyên thuỷ trong Java?
  • 11. Ép kiểu trong Java?
  • 12. Toán tử instanceof trong java?
  • 13. Nạp chồng (Overloading) và Ghi đè (Overriding) là gì?
  • 14. Sự khác nhau giữa == và Equals?
    • Toán từ [==]:
    • Toán tử [Equals]:
  • 15. Interface là gi?
  • 16. Abstracts là gì?
  • 17. Sự khác nhau giữa interface và abstracts class?
  • 18. Thuật toán: Một số thuật toán cơ bản trong Java
  • 19. Các Collection trong Java?
    • Set Interface
    • List Interface
    • Queue Interface
    • Map Interface
  • 10. Quan hệ kế thừa trong Java.

1. Java là gì?

Java là một ngôn ngữ lập trình cao cấp được công bố trên toàn thế giới vào năm 1995. Java là một ngôn ngữ chạy đa nên tảng như Windows, MacOS…

Write once, run anywhere

2. Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng là một kỹ thuật lập trình tạo ra các đối tượng trong code. Trừu tượng hóa các đối tượng thực tế trong cuộc sống. Hay con gọi theo cách khác là kỹ thuật lập trình mà tất cả các logic, yêu cầu thực tế đều được xây dựng xoay quanh các đối tượng.

3. Bốn tính chất cơ bản của ngôn ngữ lập trình Java:

Đây là 4 tính chất góp phần tạo nên khái niệm lập trình hướng đối tượng, chúng có thể tồn tại trong các ngôn ngữ tuân theo hướng đối tượng, đặc biệt đối với những ngôn ngữ thuần hướng đối tượng như C++, Java, C#, Ruby,… sẽ có đủ 4 tính chất này.

Nếu bạn đã chọn các ngôn ngữ thuần hướng đối tượng gắn liền với sự nghiệp lập trình, thì bắt buộc bạn phải nhớ và hiểu các tính chất này, khi bạn hiểu mới có thể đi lên cao trong phát triển phần mềm đồng thời hiểu sâu trong kĩ thuật.

1. Tính đóng gói (Encapsulation).

Đóng gói là sự che giấu dữ liệu riêng bên trong mỗi đối tượng của lớp được khai báo và chỉ được truy xuất thông qua hệ thống các phương thức có sẵn của lớp.

Tính đóng gói dùng để bảo vệ dữ liệu, ngăn ngừa việc truy cập và gán giá trị trực tiếp cho thuộc tính bên trong đối tượng, nhằm bảo vệ tính chính xác của giá trị thuộc tính.

2. Tính đa hình (Polymorphism).

Trong từng trường hợp, hoàn cảnh khác nhau thì đối tượng có hình thái khác nhau tùy thuộc vào từng ngữ cảnh.

3. Tính trừu tưởng (Abstraction).

Tính trừu tượng trong Java là tính chất không thể hiện cụ thể mà chỉ nêu tên vấn đề.

Đó là một quá trình che giấu các hoạt động bên trong và chỉ hiển thị những tính năng thiết yếu của đối tượng tới người dùng.

Ví dụ: một người sử dụng điện thoại để gửi tin nhắn thì anh ta sẽ nhập nội dung tin nhắn, thông tin người nhận và ấn nút gửi. Khi anh ta bắt đầu gửi tin thì anh ấy không biết những gì diễn ra bên trong quá trình gửi mà chỉ biết được là kết quả của tin nhắn đã được gửi đến người nhận thành công hay chưa. Vì vậy trong ví dụ này, quá trình gửi tin nhắn đã được ẩn đi và chỉ hiển thị những chức năng mà người dùng cần đó là chức năng nhập nội dung tin nhắn, thông tin người nhận, kết quả gửi tin nhắn thành công hay thất bại. Đó chính là tính trừu tượng.

Ưu điểm khi sử dụng tính trừu tượng để lập trình:

Tính trừu tượng cho phép các lập trình viên loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình, cải thiện khả năng bảo trì của hệ thống. Tính trừu tượng giúp chúng ta tập trung vào những cốt lõi cần thiết của đối tượng thay vì quan tâm đến cách nó thực hiện. Tính trừu tượng cung cấp nhiều tính năng mở rộng khi sử dụng kết hợp với tính đa hình và kế thừa trong lập trình hướng đối tượng.Java trừu tượng hóa thông qua các lớp trừu tượng (Abstract class) và các giao diện (Interface).

4 Tính kế thừa (Inheritance).

Là sự liên quan giữa hai class với nhau, trong đó có class cha (superclass) và class con (subclass). Khi kế thừa class con được hưởng tất cả các phương thức và thuộc tính của class cha.

4. Đối tượng là gì?

– Đối tượng là một thực thể có trạng trái và hành vi cụ thể. – Trong java, đối tượng là thể hiện của một lớp (Class).

5. Lớp (Class) là gì?

Lớp là một mẫu hoặc một thiết kế để tạo ra 1 đối tượng (Object).

– Lớp trong Java có thể chứa các Biến dữ liệu, Constructor, phương thức, abstract, và cũng có thể chứ lớp khác để mô tả chi tiết thuộc tính và hành vi của một đối tượng nào đó.

6. Các loại access modifier trong java?

Default: chỉ truy cập được bởi các lớp trong cùng một package.

Public: Truy cập được ở mọi nơi.

Protected: chỉ truy cập được bởi các lớp trong cùng một package.

Private: Chỉ gọi được khi ở trong cùng 1 lớp.

7. Nested Class là gì?

Nested class được phân chia thành 2 loại:

  • Static nested classes: là class được khai báo dạng static bên trong một class khác.
  • Non-static nested classes: bao gồm Inner classes, Local classes và Anonymous Classes.
    • Inner Classes: là khai bao một class không phải dạng static bên trong một class khác.
    • Local Classes: là khai báo một class bên trong một method khác.
    • Anonymous Classes: là class giống như Inner classes và Local classes, nó được khai bao bên trong class hoặc method mà không có tên cụ thể.

– Sử dụng inner class để gộp các lớp lại một cách hợp lý để dễ dàng quản lý và bảo trì.

8. Biến là gì?

Biến được tạo ra cùng với lớp trong qua trình lập trình để mô tả thuộc tính của đối tượng.

– Biến có 2 loại: Biến cục bộ và biến toàn cục.

  • Biến cục bộ: là biến được khởi tạo bên trong các phương thức. và sẽ bị huỷ khi phương thức bị huỷ.
  • Biến toàn cục (Instant): là biến nằm bên trong một lớp và bên ngoài mọi phương thức.
  • Biến static: biến static được khai báo trong một class với từ khóa “static“, phía bên ngoài các phương thức, constructor và block.

9. Exception là gì?

Một ngoại lệ (Exception) trong Java là một vấn đề phát sinh trong quá trình thực thi chương trình. Khi xảy ra ngoại lệ, luồng xử lý (flow) bị gián đoạn, chương trình/ứng dụng dừng bất thường. Nó là một đối tượng được ném ra tại Runtime.

T%E1%BB%95ng h%E1%BB%A3p to%C3%A0n b%E1%BB%99 ki%E1%BA%BFn th%E1%BB%A9c c%C6%A1 b%E1%BA%A3n Java - Tổng hợp từ A - Z kiến thức Java cơ bản

Dựa vào tính chất các vấn đề, người ta chia ngoại lệ thành ba loại:

  1. Ngoại lệ được kiểm tra (Checked Exceptions).
  2. Ngoại lệ không được kiểm tra (Unchecked Exceptions).
  3. Lỗi (Error).

Sự khác nhau giữa “Checked Exceptions” và “Unchecked Exceptions” trong Java?

Checked Exceptions:

  • Là một ngoại lệ được kiểm tra và thông báo bởi trình biên dịch tại thời điểm biên dịch.
  • Checked Exceptions xảy ra tại thời gian biên dịch (Compile-time Exceptions).
  • Và Checked Exceptions là những Exceptions mà lập trình viên không thể lường trước.

Ví dụ: Bạn muốn mở một file để đọc nhưng tệp được chỉ định lại không tồn tại. Thì FileNotFoundExeption sẻ xảy ra và trình biên dịch sẽ thông báo tới lập trình viên nhằm xử lý ngoại lệ đó.

Unchecked Exceptions:

  • Là một ngoại lệ không được kiểm tra trong quá trình biên dịch.
  • Unchecked Exceptions xảy ra tại thời gian chạy (Runtime Exceptions).
  • Unchecked Exceptions là ngoại lệ có thể tránh được bởi lập trình viên.
  • Unchecked Exceptions kế thừa từ Runtime Exception.

Ví dụ: ArithmaticException, ArrayIndexOutOfBoundsException, NullPointerException,…chúng được kiểm tra tại Runtime.

10. Các kiểu dữ liệu nguyên thuỷ trong Java?

– Byte, Short, Int, Long, Char, Boolean, Float, Double.

image7 - Tổng hợp từ A - Z kiến thức Java cơ bản

11. Ép kiểu trong Java?

Ép kiểu Nới rộng (Widening): Là quá trình làm tròn số từ kiểu dữ liệu có kích thước nhỏ hơn sang kiểu có kích thước lớn hơn. Kiểu biến đổi này không làm mất thông tin. Ví dụ chuyển từ int sang float. Chuyển kiểu loại này có thế được thực hiện ngầm định bởi trình biên dịch.

widening type conversion - Tổng hợp từ A - Z kiến thức Java cơ bản

Ép kiểu Thu hẹp (Narrowwing): Là quá trình làm tròn số từ kiểu dữ liệu có kích thước lớn hơn sang kiểu có kích thước nhỏ hơn. Kiểu biến đổi này có thể làm mất thông tin như ví dụ ở trên. Chuyển kiểu loại này không thể thực hiện ngầm định bởi trình biên dịch, người dùng phải thực hiện chuyển kiểu tường minh.

corejava Type Casting in Java 16 splesson - Tổng hợp từ A - Z kiến thức Java cơ bản

12. Toán tử instanceof trong java?

Toán tử instanceof trong java được sử dụng để kiểm tra một đối tượng có phải là thể hiển của một kiểu dữ liệu cụ thể không (lớp, lớp con, interface).

instanceof trong java được gọi là toán tử so sánh kiểu vì nó so sánh thể hiện với kiểu dữ liệu. Nó trả về giá trị boolean là true hoặc false.

Chú ý: Nếu bạn dùng toán tử instanceof với bất kỳ biến nào mà có giá trị null, giá trị trả về sẽ là false.

13. Nạp chồng (Overloading) và Ghi đè (Overriding) là gì?

1. Nạp chồng (Overloading): Là 2 phương thức có cùng tên nhưng khác tham số sẽ trả về kết quả khác nhau.2. Ghi đè (Overriding): là lớp con cung cấp lại một cài đặt cụ thể cho một phương thức mà lớp cha đã cung cấp thì đó gọi là ghi đè phương thức. nó được thục hiện dựa trên 2 lớp có tính chất kế thừa.

14. Sự khác nhau giữa == và Equals?

Toán từ [==]:

Khi sử dụng == bộ xử lý sẽ so sánh xem 2 biến tham chiếu này có trỏ đến cùng 1 đối tượng (vùng nhớ) hay không.

Toán tử [Equals]:

Sử dụng Equals thì Bộ xử lý sẽ chỉ so sánh giá trị của 2 biến.

15. Interface là gi?

– Được xem như là một bản thiết kế, 1 khuôn mẫu của class, chứa các phương thức trừu tượng không có lệnh thực thi, cung cấp chức năng cho các class implement nó, các class implement chúng sẽ phải override lại các phương thức có trong interface, vì Java không cho phép đa kế thừa nên Interface là một giải pháp thay thế để có được tính đa kế thừa vì 1 class có thể implement nhiều interface.

Interface như là một bản thiết kế chức năng cho class, và các class implement chúng sẽ phải override những chức năng đó.

16. Abstracts là gì?

Abstract class là một class được khai báo với từ khoá abstract, nó chứa các phương thức trừu trượng hoặc các phương thức thường, abstract class không thể khởi tạo, chỉ có thế được kế thừa bởi các lớp con có sự tương quan, các lớp con kế thừa lớp cha sẽ phải override lại các phương thức trừu tượng ở trong lớp cha.

– Abstract class: là một class được khai báo với từ khoá abstract, Abstract class là một lớp cha chứa các biến và phương thức để mô tả thuộc tính và hành vi cho tất cả các class có cùng bản chất. (Tính năng, hành vi, kiểu, loài)

17. Sự khác nhau giữa interface và abstracts class?

S%E1%BB%B1 kh%C3%A1c nhau gi%E1%BB%AFa interface v%C3%A0 abstracts class - Tổng hợp từ A - Z kiến thức Java cơ bản

– Interface/Abstract – Đa kế thừa/Không đa kế thừa – Phương thức trừu tượng/ có thể có phương thức thường và trừu tượng – mặc định phương thức là public/ có thể là private, protected, hay public

18. Thuật toán: Một số thuật toán cơ bản trong Java

  1. Bubble sort.
  2. Quick sort.
  3. Simple selection sort.
  4. Heap sort.
  5. Simple insertion sort.
  6. Shell sort.
  7. Merge sort.
  8. Radix sort.

19. Các Collection trong Java?

Set Interface

Set (tập hợp) là kiểu dữ liệu mà bên trong nó mỗi phần tử chỉ xuất hiện duy nhất một lần (tương tự như tập hợp trong toán học vậy) và Set Interface cung cấp các phương thức để tương tác với set. Set Interface được kế thừa từ Collection Interface nên nó cũng có đầy đủ các phương thức của Collection Interface. Một số class thực thi Set Interface thường gặp:

  • TreeSet: là 1 class thực thi giao diện Set Interface, trong đó các phần tử trong set đã được sắp xếp.
  • HashSet: là 1 class implement Set Interface, mà các phần tử được lưu trữ dưới dạng bảng băm (hash table).
  • EnumSet: là 1 class dạng set như 2 class ở trên, tuy nhiên khác với 2 class trên là các phần tử trong set là các enum chứ không phải object.

List Interface

List (danh sách) là cấu trúc dữ liệu tuyến tính trong đó các phần tử được sắp xếp theo một thứ tự xác định. List Interface định nghĩa các phương thức để tương tác với list cũng như các phần tử bên trong list. Tương tự như Set Interface, List Interface cũng được kế thừa và có đầy đủ các phương thức của Collection Interface.

Một số class thực thi List Interface thường sử dụng:

  • ArrayList: là 1 class dạng list được implement dựa trên mảng có kích thước thay đổi được.
  • LinkedList: là một class dạng list hoạt động trên cơ sở của cấu trúc dữ liệu danh sách liên kết đôi (double-linked list)
  • Vector: là 1 class thực thi giao diện List Interface, có cách thực lưu trữ như mảng tuy nhiên có kích thước thay đổi được, khá là tương tự với ArrayList, tuy nhiên điểm khác biệt là Vector là synchronized, hay là đồng bộ, có thể hoạt động đa luồng mà không cần gọi synchronize một cách tường minh
  • Stack: cũng là 1 class dạng list, Stack có cách hoạt động dựa trên cơ sở của cấu trúc dữ liệu ngăn xếp (stack) với kiểu vào ra LIFO (last-in-first-out hay vào sau ra trước) nổi tiếng.

Queue Interface

Queue (hàng đợi) là kiểu dữ liệu nổi tiếng với kiểu vào ra FIFO (first-in-first-out hay vào trước ra trước), tuy nhiên với Queue Interface thì queue không chỉ còn dừng lại ở mức đơn giản như vậy mà nó cũng cấp cho bạn các phương thức để xây dựng các queue phức tạp hơn nhiều như priority queue (queue có ưu tiên), deque (queue 2 chiều), … Và cũng giống như 2 interface trước, Queue Interface cũng kế thừa và mang đầy đủ phương thức từ Collection Interface. Một số class về Queue thường sử dụng:

  • LinkedList: chính là LinkedList mình đã nói ở phần List
  • PriorityQueue: là 1 dạng queue mà trong đó các phần tử trong queue sẽ được sắp xếp.
  • ArrayDeque: là 1 dạng deque (queue 2 chiều) được implement dựa trên mảng

Map Interface

Map (đồ thị/ánh xạ) là kiểu dữ liệu cho phép ta quản lý dữ liệu theo dạng cặp key-value, trong đó key là duy nhất và tương ứng với 1 key là một giá trị value. Map Interface cung cấp cho ta các phương thức để tương tác với kiểu dữ liệu như vậy. Không giống như các interface ở trên, Map Interface không kế thừa từ Collection Interface mà đây là 1 interface độc lập với các phương thức của riêng mình. Dưới đây là một số class về Map cần chú ý:

  • TreeMap: là class thực thi giao diện Map Interface với dạng cây đỏ đen (Red-Black tree) trong đó các key đã được sắp xếp. Class này cho phép thời gian thêm, sửa, xóa và tìm kiếm 1 phần tử trong Map là tương đương nhau và đều là O(log(n))
  • HashMap: là class thực thi giao diện Map Interface với các key được lưu trữ dưới dạng bảng băm, cho phép tìm kiếm nhanh O(1).
  • EnumMap: cũng là 1 Map class nữa, tuy nhiên các key trong Map lại là các enum chứ không phải object như các dạng Map class ở trên.
  • WeakHashMap: tương tự như HashMap tuy nhiên có 1 điểm khác biệt đáng chú ý là các key trong Map chỉ là các Weak reference (hay Weak key), có nghĩa là khi phần tử sẽ bị xóa khi key được giải phóng hay không còn một biến nào tham chiếu đến key nữa.

10. Quan hệ kế thừa trong Java.

  • Has-A: là khi thành phần thuộc tính của lớp này có chứa đối tượng của lớp kia
  • Is-A: Khi bạn kế thừa từ một class hiện có, bạn có thể tái sử dụng phương thức và các trường của các class cha. Hơn nữa, bạn có thể thêm phương thức mới và trường vào class hiện tại. Loại kế thừa này đại diện cho mối quan hệ IS-A. Được biết đến như là một mối quan hệ giữa Cha – con.

Chúc các bạn có 1 giờ học vui vẻ!

5 / 5 ( 3 bình chọn )

Từ khóa » Các Thuật Toán Cơ Bản Trong Java