Array – Mảng trong Java

Trong Java, một mảng (array) là một tập hợp các phần tử có cùng kiểu dữ liệu. Nếu kiểu dữ liệu là kiểu nguyên thủy thì các phần tử có địa chỉ liên tiếp nhau trên bộ nhớ (memory). Nếu kiểu dữ liệu là dạng đối tượng của lớp, thì các đối tượng thực tế được lưu trữ trên bộ nhớ heap. Mảng có số phần tử cố định và bạn không thể thay đổi kích thước của nó.

Tiếp tục đọc

#array-data-structure, #data-structures, #java

[Java 8] Static và Default Methods trong Interfaces

Từ phiên bản Java 8 đã bổ sung một số tính năng mới như lambda expressions, functional interfaces, method references, streams, Optional, static và default methods trong interfaces.

1. Default Method trong Interface

Như đã biết, những phương thức thông thường trong interface mặc định sẽ có 2 đặc điểm là public abstract. Và với default methods thì vừa giống, vừa khác các phương thức thông thường:

  • Giống: Có modifier là public, và khi viết thì không cần khai báo rõ modifier.
  • Khác: Default methods được khai báo với từ khóa default ở đầu và có thân hàm.
Tiếp tục đọc

#java, #java-8

[Java] Cơ chế Upcasting và Downcasting trong Java

UpcastingDowncasting trong java là cơ chế được sử dụng để chuyển kiểu đối với kiểu dữ liệu tham chiếu.

Đọc thêm: Casting với kiểu dữ liệu primitive

Có hai loại chuyển kiểu với kiểu dữ liệu tham chiếu:

  • Upcasting
  • Downcasting
Tiếp tục đọc

#java

[Java] Ép kiểu trong Java (Type casting)

Ép kiểu là việc gán giá trị của một biến có kiểu dữ liệu này sang biến khác có kiểu dữ liệu khác. Ví dụ:

float fNum = 8.6f;
int iNum = (int)fNum  + 1;

Trong ví dụ trên, giá trị fNum được đổi thành giá trị số nguyên 8. Sau đó, nó được cộng với 1 và kết quả là 9 được lưu vào iNum.

Trong Java, có hai loại ép kiểu dữ liệu:

  • Nới rộng (widening)
  • Thu hẹp (narrowwing)
Tiếp tục đọc

#java

[Java] Danh sách các liên kết tham khảo

1. Official documentations

Java Platform, Standard Edition Documentation

https://docs.oracle.com/en/java/javase/index.html

Java Language and Virtual Machine Specifications

https://docs.oracle.com/javase/specs/index.html

#java

[Java] Wrapper Classes trong Java

Như cái tên có thể thấy, wrapper classes are objects encapsulating primitive Java types.

Với mỗi kiểu dữ liệu primitive sẽ có một kiểu wrapper tương ứng.

  • boolean, byte, short, char, int, long, float, double 
  • Boolean, Byte, Short, Character, Integer, Long, Float, Double

Tất cả các kiểu dữ liệu này đã được định nghĩa trong gói java.lang, vì thế ta không cần phải import chúng khi sử dụng.

Tiếp tục đọc

#java

[Java] Bộ nhớ Stack và Heap trong Java

Khi chạy chương trình Java, JVM sẽ yêu cầu hệ điều hành cấp cho một không gian bộ nhớ trong RAM để dùng cho việc chạy chương trình. JVM sẽ chia bộ nhớ được cấp phát này thành 2 phần: HeapStack

1. Java Heap Memory

Bộ nhớ Heap trong Java được dùng để cấp phát bộ nhớ cho các đối tượng, các lớp JRE lúc thực thi. Bất cứ khi nào, chúng ta tạo đối tượng, nó sẽ được tạo trong bộ nhớ Heap.

Với những đối tượng không còn được tham chiếu nữa thì trình thu thập rác (Garbage Collection) sẽ giải phóng bộ nhớ mà các đối tượng đó sử dụng.

Đối tượng được tạo trong bộ nhớ Heap có phạm vị truy cập toàn cục, tức là chúng ta có thể truy cập đối tượng đó ở bất kỳ đâu trong ứng dụng.

Tiếp tục đọc

#java

[Java] Từ khóa static trong Java

Từ khóa static trong Java được dùng trong việc quản lý bộ nhớ.

Từ khóa static thuộc về class chứ không thuộc về objects ( instance of the class )

Chúng ta có thể áp dụng từ khóa static với variables, methods, blocks and nested class

Q: Tại sao cần sử dụng từ khóa static?

A: Như đã biết khi chúng ta tạo một class và muốn sử dụng một biến hoặc phương thức được khai báo trong class là điều không thể. Vì Java là một OOP language có nghĩa là chúng ta cần phải có một đối tượng để truy cập vào biến và phương thức trong và ngoài class và khi ta đã khởi tạo object thì biến và phương thức là của riêng object đó chứ không phải của class. Vậy khi đó đặt ra câu hỏi là khi cần một biến hoặc phương thức mà chúng chỉ thuộc về class, được dùng chung cho tất cả các đối tượng được tạo ra và tiết kiệm bộ nhớ thì phải làm thế nào? Câu trả lời là dùng từ khóa static 😉

1. Java static variable

Tiếp tục đọc

#java

[Java] Phương thức khởi tạo (Constructor) trong Java

1. Khái niệm

Constructor trong Java là một kiểu phương thức đặc biệt mà được sử dụng để khởi tạo đối tượng.

Nó xây dựng giá trị, cung cấp dữ liệu cho đối tượng, đó là lý do nó được gọi là Constructor.

Đặc điểm:

  • Constructor có tên giống hệt tên của lớp và được gọi bằng cách dùng từ khóa new
  • Các constructor không có giá trị trả về, và có thể có tham số hoặc không có tham số.
  • Nếu một lớp không có constructor thì java sẽ cung cấp cho lớp một constructor mặc định (default constructor). Những thuộc tính của lớp sẽ được khởi tạo bởi các giá trị mặc định (số là 0, kiểu boolean là false, kiểu đối tượng là null, …)
  • Một lớp có thể có nhiều hơn một constructor. Giống như các phương thức khác, phương thức khởi tạo lớp có thể bị nạp chồng (overload).

Tiếp tục đọc

#java

[Java] Overloading và Overriding trong Java

1. Nạp chồng phương thức (Overloading method)

Khi yêu cầu 3 con vật cùng một yêu cầu “speak”, 3 con vật trả lại 3 kết quả khác nhau!

Theo Java Language Specification mô tả thì:

If two methods of a class (whether both declared in the same class, or both inherited by a class, or one declared and one inherited) have the same name but signatures that are not override-equivalent, then the method name is said to be overloaded.

Overloading thuộc về một trong 4 tính chất của lập trình hướng đối tượng trong Java. Và đây là tính polymorphism (đa hình).

Tiếp tục đọc

#java