Đoạn trích bài giảng với người cố vấn trong khóa học của Đại học Codegym. Đăng ký cho khóa học đầy đủ.
"Xin chào, Amigo! Tôi nghe nói bạn đã nắm vững các phương pháp?"
"Xin chào, Rishi. Vâng, tôi đã vượt qua mánh khóe của giáo viên đó. Tôi sẽ nói rằng nó không tệ lắm, nhưng bạn sẽ nói với tôi, 'Không, không! Bạn chưa tìm ra bất cứ điều gì. '"
"Rõ ràng là bạn đã dành quá nhiều thời gian để trò chuyện với một số giáo viên, có thể là với Diego. Dù sao thì... Tôi vẫn hy vọng bạn hiểu đủ về các phương pháp. Rốt cuộc, hôm nay tôi sẽ dạy cho bạn một số từ kỳ diệu giúp mô tả các phương pháp ' các lĩnh vực ảnh hưởng."
"Nghe có vẻ hấp dẫn."
"Trên thực tế, tất cả đều đơn giản. Trước mỗi phương pháp, các lập trình viên có thể chỉ định cái gọi là công cụ sửa đổi truy cập. Chúng bao gồm các từ khóa sau: public
, protected
, private
.
"Các công cụ sửa đổi quyền truy cập này cho phép bạn hạn chế quyền truy cập của các lớp khác vào một phương thức.
"Ví dụ: nếu bạn viết private
từ khóa trước một khai báo phương thức, thì phương thức đó chỉ có thể được gọi từ cùng một lớp mà nó được khai báo. Từ khóa public
cho phép truy cập vào phương thức được đánh dấu từ bất kỳ phương thức nào của bất kỳ lớp nào.
Có tổng cộng 3 công cụ sửa đổi như vậy, nhưng có 4 loại quyền truy cập vào một phương thức. Điều này là do việc không có công cụ sửa đổi truy cập cũng có ý nghĩa gì đó. Đây là một bảng hoàn chỉnh:
Truy cập từ... | ||||
---|---|---|---|---|
sửa đổi | Bất kỳ lớp nào | lớp con | gói của nó | lớp học của nó |
public |
Đúng | Đúng | Đúng | Đúng |
protected |
KHÔNG | Đúng | Đúng | Đúng |
không có công cụ sửa đổi | KHÔNG | KHÔNG | Đúng | Đúng |
private |
KHÔNG | KHÔNG | KHÔNG | Đúng |
"Và đây là giải thích đầy đủ về các công cụ sửa đổi quyền truy cập:
1. public
sửa đổi
Một phương thức (hoặc biến hoặc lớp) được đánh dấu bằng công public
cụ sửa đổi có thể được truy cập từ bất kỳ đâu trong chương trình . Đây là mức độ mở cao nhất — không có giới hạn nào.
2. private
sửa đổi
Một phương thức (hoặc biến hoặc lớp) được đánh dấu bằng công private
cụ sửa đổi chỉ có thể được truy cập từ cùng một lớp nơi nó được khai báo . Đối với tất cả các lớp khác, phương thức (hoặc biến) được đánh dấu là vô hình. Nó như thể nó không tồn tại. Đây là mức hạn chế cao nhất—chỉ dành cho lớp của chính nó.
3. Không có công cụ sửa đổi (công cụ sửa đổi mặc định)
Nếu một phương thức (hoặc biến) không được đánh dấu bằng bất kỳ công cụ sửa đổi nào, thì nó được coi là có 'công cụ sửa đổi mặc định'. Các biến hoặc phương thức với công cụ sửa đổi đó (tức là không có gì cả) hiển thị cho tất cả các lớp trong gói mà chúng được khai báo . Và chỉ với họ. Công cụ sửa đổi này đôi khi cũng được gọi là package-private
, gợi ý rằng quyền truy cập vào các biến và phương thức được mở cho toàn bộ gói chứa lớp của chúng.
4. protected
sửa đổi
Nếu một phương thức được đánh dấu bằng công protected
cụ sửa đổi, thì nó có thể được truy cập từ cùng một lớp, cùng một gói và hậu duệ (các lớp kế thừa lớp mà phương thức được khai báo). Chúng tôi sẽ phân tích chủ đề này chi tiết hơn trong nhiệm vụ Java Core."
"Thật thú vị, nhưng tôi không chắc liệu mình có thể ngay lập tức đặt những công cụ sửa đổi này vào đúng vị trí hay không.
"Bạn sẽ đạt được điều đó dần dần. Không cần phải lo lắng trước thời hạn. Cho đến khi bạn kết thúc nhiệm vụ Cú pháp Java, bạn có thể sử dụng công cụ sửa đổi public
trên tất cả các phương thức của mình (cũng như các lớp và biến thể hiện). Bạn sẽ cần các công cụ sửa đổi khác khi chúng tôi bắt đầu tích cực học OOP."
"Bạn có thể giải thích chi tiết hơn tại sao cần có công cụ sửa đổi truy cập không?"
"Chúng trở nên cần thiết cho các dự án lớn được viết bởi hàng chục và hàng trăm lập trình viên cùng một lúc.
"Đôi khi có những tình huống khi một lập trình viên muốn chia một phương thức quá lớn thành nhiều phần và chuyển một phần mã thành các phương thức trợ giúp. Nhưng đồng thời, người đó không muốn các lập trình viên khác gọi các phương thức trợ giúp này, bởi vì mã tương ứng có thể không hoạt động chính xác."
"Vì vậy, họ đã nghĩ ra những công cụ sửa đổi quyền truy cập này. Nếu bạn đánh dấu một phương thức trợ giúp bằng từ private , thì không mã nào khác ngoài lớp của bạn có thể thấy phương thức trợ giúp của bạn."
"Tôi nghĩ rằng tôi hiểu."
static
từ khóa
"Có một từ khóa thú vị khác. Đó là static
. Không ngạc nhiên, nó làm cho các phương thức trở nên tĩnh."
"Điều đó nghĩa là gì?"
"Tôi sẽ nói với bạn nhiều hơn về nó sau. Đừng lo lắng. Bây giờ, chỉ cần cố gắng ghi nhớ một vài thông tin về các phương thức tĩnh.
Sự thật 1. Một phương thức tĩnh không gắn liền với bất kỳ đối tượng nào, mà thay vào đó thuộc về lớp mà nó được khai báo. Để gọi một phương thức tĩnh, bạn cần viết:
ClassName.MethodName()
Ví dụ về các phương thức tĩnh:
Tên lớp | Tên phương thức tĩnh | |
---|---|---|
Thread.sleep() |
Thread |
sleep() |
Math.abs() |
Math |
abs() |
Arrays.sort() |
Arrays |
sort() |
Tên lớp trước tên của một phương thức tĩnh có thể được bỏ qua nếu bạn gọi phương thức tĩnh từ bên trong lớp của nó. Đây là lý do tại sao bạn không cần viết Solution
trước tên của từng phương thức tĩnh được gọi.
Sự thật 2. Một phương thức tĩnh không thể truy cập các phương thức không tĩnh của lớp riêng của nó. Một phương thức tĩnh chỉ có thể truy cập các phương thức tĩnh. Do đó, chúng tôi khai báo tất cả các phương thức mà chúng tôi muốn gọi từ main
phương thức tĩnh."
"Tại sao vậy?"
"Bạn sẽ tự trả lời câu hỏi này khi bắt đầu học OOP và hiểu cách hoạt động của các phương thức tĩnh. Cho đến lúc đó, hãy tin tôi.
throws
từ khóa
"Có một từ khóa khác mà bạn có thể đã thấy trong khai báo phương thức - throws
từ khóa. Không giống như từ khóa bổ trợ truy cập và static
từ khóa, từ khóa này được đặt sau các tham số của phương thức:
public static Type name(parameters) throws Exception
{
method body
}
"Và điều đó có nghĩa là gì?"
"Một lần nữa tôi phải nói với bạn rằng bạn sẽ biết mục đích thực sự của nó sau này, khi chúng ta nghiên cứu các ngoại lệ (ở Cấp độ 15).
Nhưng khi chạm vào nó một cách hời hợt, chúng ta có thể nói rằng một phương thức được đánh dấu bằng throws
từ khóa có thể đưa ra lỗi (ngoại lệ), nghĩa là các thể hiện của Exception
lớp (và các lớp kế thừa nó). Nếu một số loại lỗi khác nhau có thể xảy ra trong một lớp, thì bạn cần liệt kê từng lỗi được phân tách bằng dấu phẩy."
"Nghe có vẻ bí ẩn và khó hiểu! Tôi sẽ phải đợi đến Cấp 14."
phương pháp chính
"Bây giờ chúng ta hãy xem xét kỹ hơn về phương thức chính. Bạn đã hiểu rằng dòng mà một phương thức được khai báo, chứa tất cả các phần bổ trợ, sẽ ảnh hưởng đến cách phương thức này được gọi từ các lớp và phương thức khác. Ngoài ra, nó còn ảnh hưởng đến kiểu của kết quả phương thức sẽ trả về và cho biết những lỗi nào có thể xảy ra khi nó chạy.
"Một dòng như vậy được gọi là khai báo phương thức và có định dạng chung sau:
access modifier static Type name(parameters) throws exceptions
Ở đâu access modifiers
được thay thế bằng public
, protected
, private
hoặc không có gì cả;
nếu phương thức là tĩnh, thì static
từ khóa sẽ xuất hiện (không có đối với các phương thức không tĩnh)
Type
là loại giá trị trả về ( void
nếu không có kết quả)
"Bây giờ bạn đã hiểu rõ hơn về ý nghĩa của tất cả những từ này trong phần khai báo của phương main
thức:
public static void main(String[] args) throws Exception
"Chà, bây giờ tôi nhận ra rằng main()
có thể truy cập vào phương thức từ bất kỳ lớp nào, như được biểu thị bằng public
từ khóa. Phương thức này là tĩnh, vì vậy nó có thể được gọi rõ ràng là Solution.main()
."
"Phương thức trả về kết quả gì main()
?"
"Không có gì cả! Loại kết quả là void
. Nó giống như một loại trống, một trình giữ chỗ."
"Những gì main()
có trong ngoặc đơn của nó?"
"Hmm... Hóa ra phương main
thức này nhận các đối số (!). Chúng được truyền vào dưới dạng một chuỗi các chuỗi."
"Đúng vậy. Và tên tham số args
gợi ý 'đối số' cho tâm trí chúng ta. Khi chương trình bắt đầu, bạn có thể truyền cho nó các đối số — một mảng các chuỗi. Chúng sẽ được chứa trong mảng args
trong main()
phương thức."
"Ồ! Tôi đã thắc mắc về điều này khi nhìn thấy nó lần đầu tiên, nhưng sau đó tôi đã quen với nó và bắt đầu viết danh sách tham số mà không cần suy nghĩ."
"Tất cả chúng ta đều đã ở đó. Cuối cùng, các lỗi chưa được xử lý như Exception
(hoặc hậu duệ của nó) có thể xảy ra trong main()
phương thức. Chúng ta biết điều này nhờ vào một throws Exception
phần của phần khai báo."
"Cảm ơn, Rishi. Tôi không hiểu mọi thứ, nhưng điều này thật thú vị."
"Không có chi. Dần dần anh sẽ hiểu được tất cả những điểm tế nhị này, tôi chắc vậy."
GO TO FULL VERSION