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 đọcCategory Archives: Java Core
Java Core
[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.
[Java] Cơ chế Upcasting và Downcasting trong Java
Upcasting và Downcasting 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
[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)
[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
[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.
[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: Heap và Stack
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.
[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
[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).
[Java] Overloading và Overriding trong Java
1. Nạp chồng phương thức (Overloading method)
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