1. returnTuyên bố

Bạn nghĩ rằng bạn đã học tất cả về các phương thức Java? Bất cứ điều gì bạn nghĩ rằng bạn biết, bạn vẫn chưa biết một nửa của nó.

Hãy bắt đầu với một cái gì đó đơn giản. Ví dụ, Java có một câu lệnh return cho phép bạn kết thúc ngay lập tức phương thức gọi nó. Đây là tuyên bố:

return;

Thật đơn giản: từ đơn độc returntheo sau bởi dấu chấm phẩy. Ngay sau khi chương trình thực thi câu lệnh này, phương thức hiện tại sẽ thoát ngay lập tức và cuộc gọi vẫn tiếp tục.

Nếu returnđược gọi trong mainphương thức, thì mainphương thức đó sẽ ngay lập tức kết thúc và cùng với nó là toàn bộ chương trình.

Ví dụ:

class Solution
{
   public static void fill(int[] data, int from, int to, int value)
   {


     if (from < 0 || to > data.length)
       return;

     for (int i = from; i < to; i++)
     {
       data[i] = value;
     }
   }

   public static void main(String[] args)
   {
     int[] months = {1, 2, 3, 4, 5, 6, 7, 8 ,9, 10, 11, 12};
     fill(months, 2, 10, 8);
   }
}


Phương fill thức điền vào một phần của mảng đã truyền với value.
Phần của mảng được lấp đầy được xác định bởi các chỉ số from và to.
Nếu from nhỏ hơn 0hoặc nếu to lớn hơn độ dài của mảng thì phương thức kết thúc ngay lập tức.

Chương trình trên có một fillphương thức điền vào mảng được truyền cho nó bằng value. Nó không lấp đầy toàn bộ mảng, chỉ phần được chỉ định bởi các chỉ số fromto.

Khi bắt đầu phương fill thức, các giá trị đã truyền được kiểm tra để đảm bảo rằng chúng hợp lệ. Nếu fromnhỏ hơn 0 hoặc nếu to lớn hơn độ dài của mảng, thì fillphương thức kết thúc ngay lập tức (thực thi một returncâu lệnh).

Tuyên bố này returnrất hữu ích: thực tế mọi phương thức trong Java đều có một phương thức và đây là lý do tại sao.



2. Phương pháp có kết quả,void

Hãy nhớ rằng chúng ta đã từng phát hiện ra rằng có những câu lệnh và có những biểu thức . Một biểu thức, không giống như một câu lệnh, có một giá trị có thể được sử dụng ở đâu đó.

Và, trong Java, các phương thức có thể có giá trị . Và đây là một tin rất tốt: các phương thức không chỉ có thể làm điều gì đó dựa trên các tham số đầu vào, mà còn, chẳng hạn, để đánh giá điều gì đó và trả về kết quả của phép tính .

Nhân tiện, bạn đã gặp phải các phương pháp như vậy:

double delta = Math.abs(d1 - d2);
Phương thức này abs()trả về một giá trị gấp đôi
Scanner console = new Scanner(System.in);
int x = console.nextInt();

Phương nextInt()thức trả về mộtint
String str = "Hello";
String s2 = str.toUpperCase();

Phương toUpperCase()thức trả về mộtString
int[] data = {1, 4, 5, 6, 7, 8, 11};
int[] array = Arrays.copyOf(data, 4);

Phương copyOf()thức trả về mộtint[]

Mỗi phương thức chỉ có thể trả về một giá trị của một loại được xác định trước. Kiểu trả về được xác định khi phương thức được khai báo:

public static Type name(parameters)
{
  method body
}

Đâu name là tên của phương thức, parameters là danh sách các tham số của phương thức và type là kiểu kết quả mà phương thức trả về.

Đối với các phương thức không trả về gì, có một loại trình giữ chỗ đặc biệt: void.

Bạn đang viết phương thức của riêng mình và không muốn trả lại bất kỳ thứ gì cho phương thức gọi? Chỉ cần khai báo kiểu của phương thức là voidvà vấn đề đã được giải quyết. Ngoài ra còn có rất nhiều phương pháp như thế này trong Java.


3. Trả về kết quả

Chúng ta mới tìm hiểu cách khai báo một phương thức trả về kết quả của một phép tính, nhưng làm thế nào để kết quả này trong chính phương thức đó?

Tuyên returnbố giúp chúng tôi ra khỏi đây một lần nữa. Truyền một kết quả từ một phương thức trông như thế này:

return value;

Where returnlà câu lệnh kết thúc phương thức ngay lập tức. Và value là giá trị mà phương thức trả về cho phương thức gọi khi nó thoát. Loại của valuephải khớp với loại typeđược chỉ định trong khai báo phương thức.

Ví dụ 1. Phương pháp tính tổng hai số nhỏ nhất:

int min(int a, int b)
{
   if (a < b)
     return a;
   else
     return b;
}
Phương thức trả về giá trị nhỏ nhất của hai số.

Nếu a < b
trả lại a
Nếu không
trả lạib

Ví dụ 2. Phương thức nhân đôi chuỗi được truyền cho nó nlần:

String multiple(String str, int times)
{
   String result = "";
   for (int i = 0; i < times; i++)
     result = result + " "+ str;
   return result;
}
Phương thức này nhận hai tham số — một chuỗi và số lần lặp lại chuỗi đó.
Một chuỗi trống được tạo cho kết quả trong tương lai.

Trong một vòng lặp với timescác lần lặp, một khoảng trắng và strchuỗi được thêm vào resultchuỗi.

Chuỗi resultđược trả về là kết quả của phương thức.

Ví dụ 3: Phương pháp tính tổng hai số lớn nhất bằng toán tử bậc ba:

int max(int a, int b)
{
   return (a > b ? a : b);
}
Phương thức trả về giá trị lớn nhất của hai số.

trả lại (nếu a > b, thì a, ngược lại b)