NỘI DUNG BÀI HỌC
✳️ Phương thức là gì?
✳️ Ví dụ về khai báo phương thức
✳️ Gọi phương thức đã khai báo
✳️ Thuộc tính là gì?
Thuộc tính hay còn gọi là field. Các thuộc tính là của lớp chứ không phải của phương thức, và nó sẽ giúp tạo ra các trạng thái, hay các đặc điểm của các đối tượng được tạo ra từ lớp này.
Để khai báo một thuộc tính thì chúng ta có cú pháp sau.
[khả_năng_truy_cập] kiểu_thuộc_tính tên_thuộc_tính [= giá_trị_ban_đầu];
Ngoại trừ khả_năng_truy_cập sẽ được nói đến ở bài học sau (vì thành phần này nằm trong cặp ngoặc vuông, có nghĩa là có khai báo nó hay không thì cũng sẽ không bị hệ thống báo lỗi, do đó hôm nay mình sẽ chưa nói đến nó). Thì các thành phần còn lại bạn khai báo hoàn toàn giống với cách khai báo một biến (hay hằng).
Nên thường nhiều bạn hiểu lầm giữa Biến và Thuộc tính. Yeah nhưng hiểu lầm cũng không sao vì nó cũng có bản chất gần như nhau nếu không có phạm vi truy cập.
Ví dụ về Thuộc tính và Biến:
public class HinhTron {
/**
* Demo sự giống nhau giữa Thuộc tính và Biến
* nếu như không có thành phần khả_năng_truy_cập
*/
// Thuộc tính
final float PI = 3.14f;
float r;
float cv;
float dt;
void tinhChuVi() {
// Biến
float banKinh = 10;
cv = 2 * PI * banKinh;
}
}
Biến thì thường được sử dụng cục bộ bên trong phương thức, trong khi thuộc tính được sử dụng toàn cục. Từ đó cho thấy Thuộc tính giống như Biến toàn cục.
public class HinhTron {
/**
* Demo cách sử dụng toàn cục của thuộc tính,
* và cách sử dụng cục bộ của biến
*/
// Thuộc tính
final float PI = 3.14f;
float r;
float cv;
float dt;
void tinhChuVi() {
// Biến banKinh định nghĩa ở đây chỉ được sử dụng
// cục bộ trong phương thức này
float banKinh = 10;
cv = 2 * PI * banKinh;
}
void tinhDienTich() {
// r là thuộc tính của lớp, được sử dụng thoải mái
// trong các phương thức
r = 10;
// Dĩ nhiên dt và PI cũng là thuộc tính toàn cục
dt = PI * r * r;
}
}
✅ Phương thức trong Java
Các phương thức (method) định nghĩa ứng xử của lớp. Một phương thức là một tập hợp các khối lệnh (code) để thi hành một chức năng nào đó. Ví dụ như System.out.println() đã biết, là một phương thức. Bạn có thể định nghĩa phương thức riêng của bạn, thi hành với một nhiệm vụ cụ thể nào đó
Tóm tắt cú pháp
Hàm không có kết quả trả về
<modifier> void methodName(Danh sách các tham số) {
// code
}
Hàm có kết quả trả về
<modifier> returnType methodName(Danh sách các tham số) {
// code
return <giá trị gì đó> //giống kiểu returnType
}
Hãy xem ví dụ sau:
class MyClass {
static void sayHello() {
System.out.println("Hello World!");
}
public static void main(String[] args) {
sayHello();
}
}
Xuất ra:
Hello World!
Trong ví dụ trên, đã định nghĩa một phương thức sayHello(), phương thức đó được hàm main() gọi để in ra lời chào mừng. Như vậy để gọi phương thức để thi hành code chỉ cần viết tên phương thức và truyền các tham số nếu cần thiết. Một phương thức có thể gọi bao nhiêu lần là tùy mục đích.
Phần khai báo phương thức tên bạn thấy ngoài tên phương thức là sayHello
và code của phương thức trong khối {...}
thì bạn còn thấy:
static
từ khóa này trước tên phương thức cho biết phương thức được gọi mà không cần thiết phải tạo đối tượng của phương thức, ngoài từ khóa này còn có các từ khóa nhưpublic
,protected
,private
sẽ tìm hiểu kỹ ở phần Phamj vi truy cập bài 2.void
cho biết phương thức này khi kết thúc không trả về dữ liệu gì, nếu sau này phương thức cần trả về dữ liệu thì thay bằngvoid
bằng kiểu dữ liệu trả về nhưint
,String
...
🔆 Tham số của phương thức
Bạn có thể tạo phương thức chấp nhận các tham số truyền vào. Tham số được mô tả trong dấu cặp ngoặc ()
, các tham số mô tả bởi kiểu dữ liệu và tên tham số, nhiều tham số thì cách nhau bởi dấu phảy ,
Ví dụ phương thức sau có tên welcome, có một tham số kiểu String có tên là name
class MyClass {
static void welcome(String name) {
System.out.println("Xin chào " + name);
}
public static void main(String[] args) {
welcome("Triều");
welcome("Như");
welcome("Mẫn");
}
}
In ra:
Xin chào Triều
Xin chào Như
Xin chào Mẫn
🔆 Giá trị trả về của phương thức
Một phương thức có thể có giá trị trả về, sử dụng từ khóa return trong thân phương thức để kết thúc và trả về giá trị, hãy xem phương thức sau:
// Phương thức sum trả về kiểu int, là tổng của hai tham số
static int sum(int a, int b) {
// phương thức kết thúc khi gặp return
return a + b;
}
Chú ý trong định nghĩa phương thức, kiểu trả về phải được định nghĩa trước tên phương thức, như trên đó là kiểu int
.
Giờ là ví dụ sử dụng phương thức trên
class MyClass {
static int sum(int a, int b) {
return a+ b;
}
public static void main(String[] args) {
// giá trị trả về của sum lưu vào biến x
int x = sum(2, 5);
System.out.println(x);
}
}
Kết quả in ra:
7
Bạn thấy, giá trị trả về của phương thức đã được gán vào biến x.
Khi phương thức bạn xây dựng mà không có giá trị trả về thì cần phải khai báo với từ khóa void.
// trả về giá trị kiểu int, số 5
static int returnFive() {
return 5;
}
// phương thức có tham số, nhưng không có giá trị trả về
static void sayHelloTo(String name) {
System.out.println("Hello " + name);
}
🔆 Phương thức static trong Java
Nếu bạn áp dụng từ khóa static với bất cứ phương thức nào, thì phương thức đó được gọi là phương thức static.
- Một phương thức static thuộc lớp chứ không phải đối tượng của lớp (lấy tên lớp gọi trực tiếp thay vì khởi tạo đối tượng class chấm gọi).
- Một phương thức static gọi mà không cần tạo một instance của một lớp.
- Phương thức static có thể truy cập biến static và có thể thay đổi giá trị của nó.
Ví dụ về phương thức static trong Java
public class Student2 {
int rollno;
String name;
static String college = "Bưu Chính Viễn Thông";
static void change() {
// Thay đổi thuộc tính static (thuộc tính chung của tất cả các đối tượng)
college = "Đại Học Công Nghệ";
}
Student2(int r, String n) {
rollno = r;
name = n;
}
void display() {
System.out.println(rollno + " - " + name + " - " + college);
}
public static void main(String args[]) {
Student2.change();
Student2 s1 = new Student2(111, "Thông");
Student2 s2 = new Student2(222, "Minh");
Student2 s3 = new Student2(333, "Anh");
s1.display();
s2.display();
s3.display();
}
}
Kết quả:
111 - Thông - Đại Học Công Nghệ
222 - Minh - Đại Học Công Nghệ
333 - Anh - Đại Học Công Nghệ
Sự hạn chế của phương thức static
Có hai hạn chế chính đối với phương thức static. Đó là:
- Phương thức static không thể sử dụng biến non-static hoặc gọi trực tiếp phương thức non-static.
- Từ khóa this và super không thể được sử dụng trong ngữ cảnh static.
Ví dụ:
Kết quả:
Compile Time Error