JavaRush /Blog Java /Random-VI /Các phương thức trong Java
articles
Mức độ

Các phương thức trong Java

Xuất bản trong nhóm
Các phương thức trong Java - 1Trong Java, một ứng dụng bao gồm các lớp. Các lớp lần lượt bao gồm các biến. Chúng chịu trách nhiệm lưu trữ dữ liệu và các phương thức chịu trách nhiệm về hành vi của lớp: nói cách khác, logic mà nó có thể cung cấp (ví dụ: xử lý một số dữ liệu, gọi các phương thức khác, v.v.). Chúng ta có thể nói về những thành phần như biến số từ lâu, nhưng đó không phải là lý do tại sao chúng ta tập hợp ngày hôm nay. Tốt hơn nên nói về một thành phần như vậy của lớp như một phương thức. Các phương thức trong Java - 2Một phương thức là một khối mã được đặt tên được khai báo trong một lớp. Nó chứa một chuỗi hành động (hướng dẫn) hoàn chỉnh nhất định nhằm giải quyết một vấn đề riêng biệt, có thể được sử dụng lại. Nói cách khác, một phương thức là một hàm: thứ mà lớp của bạn có thể thực hiện. Các ngôn ngữ khác cũng có chức năng. Chỉ trong Java, chúng là thành viên của các lớp và theo thuật ngữ OOP, chúng được gọi là các phương thức. Nhưng trước khi tiếp tục, hãy xem một ví dụ nhỏ:
public String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
  return resultSentence;
}
Không có gì phức tạp ở đây: một phương thức Java có nhiệm vụ tạo ra một chuỗi lời chào có tên mà chúng ta truyền cho nó. Ví dụ như - Hello world! My name is Bobby Hãy hiểu cách xây dựng một phương thức một cách chính xác bằng cách xem xét từng từ khóa trong phần khai báo phương thức (từ trái sang phải). Từ khóa đầu tiên của chúng tôi là public, và nó biểu thị một công cụ sửa đổi quyền truy cập:

Công cụ sửa đổi quyền truy cập

Chúng chỉ ra phạm vi hiển thị được phép đối với các thành viên trong lớp, nghĩa là hạn chế về những nơi mà một biến hoặc phương thức được phép sử dụng. Các phương thức trong Java - 3Các công cụ sửa đổi truy cập sau đây được sử dụng trong Java:
  • công khai : công khai. Các phương thức hoặc trường có công cụ sửa đổi này là công khai, hiển thị với các lớp khác (hay đúng hơn là các phương thức và trường của chúng) từ gói hiện tại và từ các gói bên ngoài. Đây là mức truy cập rộng nhất được biết đến;

  • protected : các phương thức hoặc biến có công cụ sửa đổi này có thể được truy cập từ bất kỳ đâu trong lớp hoặc gói hiện tại hoặc trong các lớp kế thừa cái này, cũng như các phương thức hoặc trường, ngay cả khi chúng nằm trong các gói khác

    protected String constructHelloSentence(String name) {...}
  • Công cụ sửa đổi mặc định. Nếu trường lớp hoặc phương thức không có công cụ sửa đổi thì công cụ sửa đổi mặc định sẽ được áp dụng. Trong trường hợp này, các trường hoặc phương thức được hiển thị cho tất cả các lớp trong gói hiện tại (như protected nhưng không hiển thị khi kế thừa).

    String constructHelloSentence(String name) {...}
  • riêng tư : trái ngược với công cụ sửa đổi công khai . Một phương thức hoặc biến có công cụ sửa đổi như vậy chỉ có sẵn trong lớp mà nó được khai báo.

    private String constructHelloSentence(String name) {...}
Tiếp theo chúng ta có Stringchữ ký phương thức (dòng đầu tiên của phương thức mô tả các thuộc tính của nó).

Giá trị trả về

Giá trị trả về là dữ liệu (một số kết quả của việc thực thi phương thức) xuất hiện sau lệnh gọi. Mỗi phương thức đều có một giá trị trả về. Hay không?

Phương thức giá trị trả về

Giá trị này có thể là bất kỳ loại dữ liệu nào: biến thuộc loại đơn giản hoặc loại tham chiếu. Trong ví dụ này, chúng tôi chỉ ra rằng phương thức này phải trả về một đối tượng thuộc loại String, như chúng tôi nhớ, là một lớp mô tả một chuỗi. Điểm thứ hai ở đây là từ return. Nó có mối quan hệ trực tiếp với giá trị trả về: giá trị sau nó sẽ được gửi trở lại nơi phương thức được gọi và chính phương thức đó sẽ returnđóng lại. Từ này thường xuất hiện ở dòng cuối cùng của phương thức (trừ các phương thức có nhiều nhánh khác nhau như if, else...). Nếu bạn viết mã trên dòng tiếp theo sau return:
private String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  return resultSentence;
  System.out.println(resultSentence);
}
thì chúng ta sẽ nhận được những lời chửi rủa từ trình biên dịch, điều này không tốt lắm (trình biên dịch sẽ không khuyến nghị những điều vô nghĩa). Bạn cũng cần nhớ rằng kiểu dữ liệu sau сphải khớp với kiểu dữ liệu được khai báo trong chữ ký phương thức. returnĐọc thêm về ở đây .

trống rỗng

Nó được dùng để làm gì voidtrong Java? Không phải tất cả các phương thức đều có giá trị trả về. Một số không có gì hoặc không cần trả lại bất cứ thứ gì. Vậy phải làm gì? Sau đó, trong chữ ký phương thức, chúng tôi viết void. Phương thức của chúng ta sẽ trông như thế nào nếu không có giá trị trả về?
protected void constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
}
Bạn có thể nhận thấy rằng cùng với giá trị trả về, từ returnSo it is đã biến mất, bởi vì phương thức của chúng ta sẽ không trả về bất cứ thứ gì. Tuy nhiên, nó có thể được đặt ở đây, nhưng không có ý nghĩa gì, chỉ return; ở dòng cuối cùng. Điều này nói chung là vô ích, vì vậy voidnó là tùy chọn trong các phương thức với. Tuy nhiên, nó có thể được sử dụng hữu ích trong voidcác phương thức, chẳng hạn như nhánh hoặc vòng lặp, nơi bạn muốn thoát khỏi phương thức đó ngay lập tức. Tiếp theo trong phần khai báo phương thức, chúng ta có constructHelloSentence.

Tên phương thức

constructHelloSentence - tên của phương pháp, một đặc điểm khác biệt để chúng ta có thể phân biệt phương pháp này hay phương pháp khác. Và theo đó, hãy gọi phương thức này hoặc phương thức khác. Các phương thức trong Java - 4Tên phương thức phải bắt đầu bằng một chữ cái nhỏ, nhưng cũng sử dụng cách viết hoa lạc đà (CamelCase, trường hợp lạc đà): tức là. Mỗi từ tiếp theo trong tên liền kề với từ trước đó và được viết bằng chữ in hoa. Tên phương thức nên mô tả phương thức đó (nhận xét tốt nhất là đặt tên phù hợp). Để làm điều này, hãy sử dụng các động từ hoặc kết hợp với các động từ: getCat, delete, createCar, v.v. Trong một lớp, tên phương thức phải là duy nhất (không tính việc nạp chồng phương thức, điều này chúng ta sẽ nói đến sau). Hãy nhìn sâu hơn vào phương pháp chúng tôi đang phân tích và xem ( String name)

Tham số phương pháp

Các phương thức có thể (hoặc có thể không) có một số dữ liệu nhất định đến từ bên ngoài, cụ thể là từ nơi phương thức được gọi. Trong trường hợp của chúng tôi, chúng tôi thấy rằng một đối tượng loại Stringcó tên xuất hiện namevà trong tương lai chúng tôi sử dụng biến này trong phương thức của mình. Bạn có thể sử dụng số lượng tham số không giới hạn trong một phương thức, nhưng không nên sử dụng nhiều hơn 7 tham số. Khi chúng ta không biết chính xác số phần tử, nhưng tất cả các phần tử này đều cần thiết cho cùng một mục đích và sẽ có cùng loại (ví dụ: String), dấu chấm lửng được sử dụng:
public void constructHelloSentence(String...name) {
 ...
}
Sự hấp dẫn đối với từng yếu tố sẽ như thế này: name[0] Nó có gợi cho bạn điều gì không? Đúng vậy, mảng! Sẽ không có gì thay đổi nếu chúng ta viết:
protected void constructHelloSentence(String[] name) {
 ...
}
Quyền truy cập vào các phần tử cũng sẽ có dạng: name[1] Và một điều nữa. Đối số của phương thức có thể là cuối cùng :
public String constructHelloSentence(final String name) {
  ...
}
Điều này có nghĩa là tham chiếu tên được liên kết với một đối tượng cụ thể Stringvà không thể bị ghi đè. finalBạn có thể đọc về cách làm việc với các biến tham chiếu và sự tương tác của chúng với các từ dành riêng trong tài liệu “ Các kiểu dữ liệu tham chiếu trong Java ”.

Phương thức gọi

Vì vậy, chúng ta đã sắp xếp xong việc tạo các phương thức, bây giờ hãy nói về việc sử dụng chúng. Làm cách nào để gọi một phương thức trong Java? Các phương thức trong Java - 5Mọi phương thức trong Java đều nằm trong một lớp. Để hiểu cách hoạt động của các phương thức gọi trong Java, chúng ta hãy tham gia một lớp:
public class StringConstructor {
  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
Vì phương thức của chúng tôi không phải là tĩnh (đây là một chủ đề thảo luận riêng nằm ngoài phạm vi của bài viết hôm nay), để gọi nó, trước tiên bạn phải tạo một đối tượng và sau đó gọi phương thức trên đó:
class Application{
  public static void main(String[] args) {
     StringConstructor stringConstructor = new StringConstructor();
     stringConstructor.constructHelloSentence("Den");
  }
}
Trong các đối số của phương thức của chúng tôi, chúng tôi đã chuyển chuỗi (tên) mà chúng tôi muốn thấy trong chuỗi kết quả được hiển thị trên màn hình:

Hello world! My name is Den
Cũng cần nhắc lại rằng các phương thức có thể được sử dụng lại bao nhiêu lần tùy ý - không có hạn chế nào.

cái này

Bạn thường có thể thấy từ khóa trong code this, như trong setters:
public void setValue(Long value) {
   this.value = value;
}
Và điều đó có nghĩa là gì? thistrong Java, đây là tham chiếu đến đối tượng hiện tại của lớp này. Ví dụ: nếu chúng ta tạo một đối tượng:
StringConstructor stringConstructor = new StringConstructor();
thì thisbên trong đối tượng stringConstructorsẽ có một liên kết đến cùng một đối tượng. thisđược sử dụng cả để tham chiếu đến một biến đối tượng (như trong setter ở trên) và để gọi một số phương thức. Chúng ta có thể viết lại lớp của mình một chút:
public class StringConstructor {

  public String constructHelloSentence(String name) {
     String resultSentence = this.getSentence()  + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  private String getSentence() {
     return "Hello world! My name is ";
  }
}
Thông qua thischúng ta gọi phương thức của đối tượng này để lấy chuỗi cần thiết. Tuy nhiên, theo quy luật, điều này hầu như không được sử dụng cho các phương thức, vì ngay cả khi không có nó thì vẫn có một tham chiếu đến phương thức của một đối tượng nhất định; nó chủ yếu được sử dụng cho một biến đối tượng.

Quá tải phương thức

Giả sử chúng ta cần một phương thức thực hiện cùng một logic, nhưng trong một Hello world! thay vào đó worldchúng tôi muốn chèn từ (chuỗi) của riêng mình. Nhưng chúng tôi đã có một phương pháp constructHelloSentence. Vì vậy, chúng ta có cần nghĩ ra một tên mới cho một phương thức về cơ bản thực hiện cùng chức năng không? Cho dù thế nào đi chăng nữa: tại thời điểm này, việc nạp chồng phương thức sẽ hỗ trợ chúng ta. Các phương thức trong Java - 7Nạp chồng phương thức là việc sử dụng cùng một tên phương thức nhiều lần khi khai báo nó trong một lớp. Từ quan điểm cú pháp ngôn ngữ, không thể có hai tên giống hệt nhau trong một không gian cục bộ nào đó. Nhưng cũng có thể khai báo các phương thức có cùng tên nhưng khác đối số. Nói cách khác, một lớp chứa tình trạng quá tải khi có hai hoặc nhiều phương thức có cùng tên nhưng dữ liệu đầu vào khác nhau:
public class Constructor {

  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  protected String constructHelloSentence(String firstName, String secondName) {
     String resultSentence = "Hello " + firstName + "! My name is " + secondName;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
Ở đây chúng ta thấy rằng các phương thức không nhất thiết phải chứa cùng một công cụ sửa đổi truy cập (cũng như kiểu trả về). Nếu một phương thức quá tải được gọi, thì từ một số phương thức được khai báo, trình biên dịch sẽ tự động xác định phương thức được yêu cầu dựa trên các tham số được chỉ định trong cuộc gọi.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION