kaedah Java


Dalam bab sebelum ini kami sering menggunakan System.out.println(), jadi apakah itu?

println() ialah kaedah (Kaedah), dan Sistem ialah kelas sistem (Kelas), dan keluar ialah objek keluaran standard (Objek). Penggunaan ayat ini adalah untuk memanggil kaedah println() dalam objek keluaran standard keluar dalam Sistem kelas sistem.

Jadi apakah kaedahnya?

Kaedah Java ialah himpunan pernyataan yang bersama-sama melaksanakan fungsi.

  • Kaedah ialah gabungan tertib langkah untuk menyelesaikan jenis masalah

  • Kaedah terkandung dalam kelas atau objek

  • Kaedah dicipta dalam program dan dirujuk di tempat lain


Definisi kaedah

Secara amnya, mentakrifkan kaedah termasuk yang berikut Sintaks: Kaedah

修饰符 返回值类型 方法名 (参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}

mengandungi pengepala kaedah dan badan kaedah. Berikut ialah semua bahagian kaedah:

  • Pengubah suai: Pengubah suai , yang merupakan pilihan, memberitahu pengkompil cara memanggil kaedah. Mentakrifkan jenis akses untuk kaedah ini.

  • Jenis nilai pulangan: Kaedah mungkin mengembalikan nilai. returnValueType ialah jenis data bagi nilai pulangan kaedah. Sesetengah kaedah melaksanakan operasi yang diperlukan tetapi tidak mengembalikan nilai. Dalam kes ini, returnValueType ialah kata kunci void.

  • Nama kaedah: ialah nama sebenar kaedah. Nama kaedah dan senarai parameter bersama-sama membentuk tandatangan kaedah.

  • Jenis parameter: Parameter adalah seperti pemegang tempat. Apabila kaedah dipanggil, nilai dihantar ke parameter. Nilai ini dipanggil parameter atau pembolehubah sebenar. Senarai parameter merujuk kepada jenis parameter, susunan dan bilangan parameter kaedah. Parameter adalah pilihan dan kaedah tidak boleh mengandungi parameter.

  • Isi kaedah: Isi kaedah mengandungi pernyataan khusus yang mentakrifkan fungsi kaedah.

12-130Q1220955916.jpg

Contohnya:

public static int age(int birthday){...}

Terdapat berbilang parameter:

static float interest(float principal, int year){...}

Nota: Dalam beberapa bahasa lain kaedah merujuk kepada prosedur dan fungsi. Kaedah yang mengembalikan nilai pulangan bukan batal dipanggil fungsi; kaedah yang mengembalikan nilai pulangan kosong dipanggil prosedur.

Instance

Kaedah berikut mengandungi 2 parameter num1 dan num2, dan ia mengembalikan nilai maksimum kedua-dua parameter ini.

/** 返回两个整型变量数据的较大值 */
public static int max(int num1, int num2) {
   int result;
   if (num1 > num2)
      result = num1;
   else
      result = num2;

   return result; 
}

Panggilan Kaedah

Java menyokong dua cara untuk memanggil kaedah, pilih mengikut sama ada kaedah itu mengembalikan nilai.

Apabila atur cara memanggil kaedah, kawalan atur cara diberikan kepada kaedah yang dipanggil. Kawalan dikembalikan kepada program apabila penyataan pemulangan kaedah yang dipanggil dilaksanakan atau kurungan penutup badan kaedah dicapai.

Apabila kaedah mengembalikan nilai, panggilan kaedah biasanya dianggap sebagai nilai. Contohnya:

int larger = max(30, 40);

Jika nilai pulangan kaedah tidak sah, panggilan kaedah mestilah pernyataan. Sebagai contoh, kaedah println mengembalikan batal. Panggilan berikut ialah pernyataan:

System.out.println("Welcome to Java!");

Contoh

Contoh berikut menunjukkan cara mentakrifkan kaedah dan cara memanggilnya:

public class TestMax {
   /** 主方法 */
   public static void main(String[] args) {
      int i = 5;
      int j = 2;
      int k = max(i, j);
      System.out.println("The maximum between " + i +
                    " and " + j + " is " + k);
   }

   /** 返回两个整数变量较大的值 */
   public static int max(int num1, int num2) {
      int result;
      if (num1 > num2)
         result = num1;
      else
         result = num2;

      return result; 
   }
}

Hasil penyusunan dan larian contoh di atas adalah seperti berikut:

The maximum between 5 and 2 is 5

Program ini mengandungi kaedah utama dan kaedah maks. Kaedah Utama dipanggil oleh JVM Selain daripada itu, kaedah utama tidak berbeza dengan kaedah lain.

Tajuk kaedah utama tidak berubah Seperti yang ditunjukkan dalam contoh, ia mempunyai pengubah umum dan statik, mengembalikan nilai jenis kekosongan, nama kaedah adalah utama dan mengambil parameter jenis String[]. String[] menunjukkan bahawa parameter ialah tatasusunan rentetan.


kata kunci batal

Bahagian ini menerangkan cara mengisytiharkan dan memanggil kaedah batal.

Contoh berikut mengisytiharkan kaedah bernama printGrade dan memanggilnya untuk mencetak gred yang diberikan.

Contoh

public class TestVoidMethod {

   public static void main(String[] args) {
      printGrade(78.5);
   }

   public static void printGrade(double score) {
      if (score >= 90.0) {
         System.out.println('A');
      }
      else if (score >= 80.0) {
         System.out.println('B');
      }
      else if (score >= 70.0) {
         System.out.println('C');
      }
      else if (score >= 60.0) {
         System.out.println('D');
      }
      else {
         System.out.println('F');
      }
   }
}

Hasil penyusunan dan larian contoh di atas adalah seperti berikut:

C

Kaedah printGrade di sini ialah kaedah jenis void dan ia tidak mengembalikan nilai .

Panggilan kepada kaedah batal mestilah pernyataan. Oleh itu, ia dipanggil sebagai pernyataan pada baris ketiga kaedah utama. Sama seperti mana-mana pernyataan yang berakhir dengan koma bertitik.


Luluskan parameter mengikut nilai

Apabila memanggil kaedah, anda perlu menyediakan parameter dan anda mesti menyediakannya dalam susunan yang dinyatakan dalam senarai parameter.

Sebagai contoh, kaedah berikut mencetak mesej n kali berturut-turut:

public static void nPrintln(String message, int n) {
  for (int i = 0; i < n; i++)
    System.out.println(message);
}

Contoh

Contoh berikut menunjukkan kesan melalui nilai.

Program ini mencipta kaedah yang digunakan untuk menukar dua pembolehubah.

public class TestPassByValue {

   public static void main(String[] args) {
      int num1 = 1;
      int num2 = 2;

      System.out.println("Before swap method, num1 is " +
                          num1 + " and num2 is " + num2);

      // 调用swap方法
      swap(num1, num2);
      System.out.println("After swap method, num1 is " +
                         num1 + " and num2 is " + num2);
   }
   /** 交换两个变量的方法 */
   public static void swap(int n1, int n2) {
      System.out.println("\tInside the swap method");
      System.out.println("\t\tBefore swapping n1 is " + n1
                           + " n2 is " + n2);
      // 交换 n1 与 n2的值
      int temp = n1;
      n1 = n2;
      n2 = temp;

      System.out.println("\t\tAfter swapping n1 is " + n1
                           + " n2 is " + n2);
   }
}

Hasil penyusunan dan larian contoh di atas adalah seperti berikut:

Before swap method, num1 is 1 and num2 is 2
        Inside the swap method
                Before swapping n1 is 1 n2 is 2
                After swapping n1 is 2 n2 is 1
After swap method, num1 is 1 and num2 is 2

Lepasi dua parameter untuk memanggil kaedah swap. Menariknya, nilai parameter sebenar tidak berubah selepas kaedah dipanggil.


Melebihkan kaedah

Kaedah maksimum yang digunakan di atas hanya terpakai untuk data jenis int. Tetapi bagaimana jika anda ingin mendapatkan nilai maksimum dua jenis titik terapung data?

Penyelesaian adalah untuk mencipta kaedah lain dengan nama yang sama tetapi parameter yang berbeza, seperti yang ditunjukkan dalam kod berikut:

public static double max(double num1, double num2) {
  if (num1 > num2)
    return num1;
  else
    return num2;
}

Jika anda lulus parameter jenis int apabila memanggil kaedah maks, maka taip int Kaedah maks parameter akan dipanggil;

Jika parameter berganda dilalui, badan kaedah maks jenis berganda akan dipanggil, yang dipanggil kaedah terlebih muatan; Kedua-dua kaedah mempunyai nama yang sama tetapi senarai parameter yang berbeza.

Pengkompil Java menentukan kaedah yang harus dipanggil berdasarkan tandatangan kaedah.

Pembebanan kaedah boleh menjadikan program lebih jelas dan lebih mudah dibaca. Kaedah yang melaksanakan tugas yang berkait rapat harus menggunakan nama yang sama.

Kaedah terlebih muatan mesti mempunyai senarai parameter yang berbeza. Anda tidak boleh membebankan kaedah hanya berdasarkan pengubah suai atau jenis pulangan.

Skop pembolehubah

Skop pembolehubah ialah bahagian program di mana pembolehubah boleh dirujuk.

Pembolehubah yang ditakrifkan dalam kaedah dipanggil pembolehubah tempatan.

Skop pembolehubah tempatan bermula daripada pengisytiharannya dan berakhir pada penghujung blok yang mengandunginya.

Pembolehubah setempat mesti diisytiharkan sebelum ia boleh digunakan.

Skop parameter kaedah meliputi keseluruhan kaedah. Parameter sebenarnya adalah pembolehubah tempatan.

Pembolehubah yang diisytiharkan dalam bahagian permulaan bagi gelung for mempunyai skop sepanjang gelung.

Tetapi skop penggunaan pembolehubah yang diisytiharkan dalam badan gelung adalah dari pengisytiharannya ke penghujung badan gelung. Ia mengandungi pengisytiharan berubah-ubah seperti ini:

12-130Q1221013F0.jpg

Anda boleh mengisytiharkan pembolehubah tempatan dengan nama yang sama beberapa kali dalam kaedah, dalam blok tidak bersarang yang berbeza, tetapi anda tidak boleh mengisytiharkan pembolehubah tempatan dua kali dalam blok bersarang .

Menggunakan parameter baris arahan

Kadangkala anda ingin menghantar mesej kepada program sebelum menjalankannya. Ini dicapai dengan menghantar argumen baris arahan ke fungsi main().

Parameter baris arahan ialah maklumat serta-merta mengikut nama atur cara semasa melaksanakan atur cara.

Contoh

Atur cara berikut mencetak semua parameter baris arahan:

public class CommandLine {

   public static void main(String args[]){ 
      for(int i=0; i<args.length; i++){
         System.out.println("args[" + i + "]: " +
                                           args[i]);
      }
   }
}

Seperti yang ditunjukkan di bawah, jalankan program ini:

java CommandLine this is a command line 200 -100

Hasilnya adalah seperti berikut:

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

Kaedah pembina

Apabila objek dicipta, kaedah pembina digunakan untuk memulakan objek. Pembina mempunyai nama yang sama dengan kelas di dalamnya, tetapi pembina tidak mempunyai nilai pulangan.

Pembina biasanya digunakan untuk memberikan nilai awal kepada pembolehubah contoh kelas, atau untuk melaksanakan langkah lain yang diperlukan untuk mencipta objek lengkap.

Sama ada anda menyesuaikan pembina atau tidak, semua kelas mempunyai pembina, kerana Java secara automatik menyediakan pembina lalai, yang memulakan semua ahli kepada 0.

Setelah anda menentukan pembina anda sendiri, pembina lalai menjadi tidak sah.

Instance

Berikut ialah contoh penggunaan kaedah pembina:

// 一个简单的构造函数
class MyClass {
   int x;
   
   // 以下是构造函数
   MyClass() {
      x = 10;
   }
}

Anda boleh memanggil kaedah pembina untuk memulakan objek seperti ini:

public class ConsDemo {

   public static void main(String args[]) {
      MyClass t1 = new MyClass();
      MyClass t2 = new MyClass();
      System.out.println(t1.x + " " + t2.x);
   }
}

Selalunya Kadangkala pembina dengan parameter diperlukan.

Instance

Berikut ialah contoh penggunaan pembina:

// 一个简单的构造函数
class MyClass {
   int x;
   
   // 以下是构造函数
   MyClass(int i ) {
      x = i;
   }
}

Anda boleh memanggil pembina untuk memulakan objek seperti ini:

rreee

Run The keputusan adalah seperti berikut:

public class ConsDemo {

   public static void main(String args[]) {
      MyClass t1 = new MyClass( 10 );
      MyClass t2 = new MyClass( 20 );
      System.out.println(t1.x + " " + t2.x);
   }
}

Parameter pembolehubah

Bermula dari JDK 1.5, Java menyokong menghantar parameter pembolehubah jenis yang sama kepada kaedah.

Pengisytiharan parameter pembolehubah kaedah adalah seperti berikut:

10 20

Dalam pengisytiharan kaedah, tambahkan elipsis (...) selepas menyatakan jenis parameter.

Hanya satu parameter pembolehubah boleh ditentukan dalam kaedah dan ia mestilah parameter terakhir kaedah tersebut. Sebarang parameter biasa mesti diisytiharkan sebelum itu.

Instance

typeName... parameterName

Hasil penyusunan dan larian contoh di atas adalah seperti berikut:

public class VarargsDemo {

   public static void main(String args[]) {
      // 调用可变参数的方法
	  printMax(34, 3, 3, 2, 56.5);
      printMax(new double[]{1, 2, 3});
   }

   public static void printMax( double... numbers) {
   if (numbers.length == 0) {
      System.out.println("No argument passed");
      return;
   }

   double result = numbers[0];

   for (int i = 1; i <  numbers.length; i++)
      if (numbers[i] >  result)
      result = numbers[i];
      System.out.println("The max value is " + result);
   }
}

kaedah finalize()

Java membenarkan takrif kaedah sedemikian, yang Dipanggil sebelum objek dimusnahkan (kitar semula) oleh pemungut sampah, kaedah ini dipanggil finalize(), yang digunakan untuk mengosongkan objek kitar semula.

Sebagai contoh, anda boleh menggunakan finalize() untuk memastikan bahawa fail yang dibuka oleh objek ditutup.

Dalam kaedah finalize(), anda mesti menentukan operasi yang akan dilakukan apabila objek dimusnahkan. Format umum

finalize() ialah:

The max value is 56.5
The max value is 3.0

Kata kunci yang dilindungi ialah kelayakan, yang memastikan kaedah finalize() tidak akan dipanggil melalui kod di luar kelas.

Sudah tentu, kitar semula memori Java boleh dilengkapkan secara automatik oleh JVM. Jika anda menggunakannya secara manual, anda boleh menggunakan kaedah di atas.

Instance

protected void finalize()
{
   // 在这里终结代码
}

menjalankan kod di atas dan output adalah seperti berikut:

public class FinalizationDemo {  
    public static void main(String[] args) {  
        Cake c1 = new Cake(1);  
        Cake c2 = new Cake(2);  
        Cake c3 = new Cake(3);  
          
        c2 = c3 = null;  
        System.gc(); //调用Java垃圾收集器
    }  
}  
  
class Cake extends Object {  
    private int id;  
    public Cake(int id) {  
        this.id = id;  
        System.out.println("Cake Object " + id + "is created");  
    }  
      
    protected void finalize() throws java.lang.Throwable {  
        super.finalize();  
        System.out.println("Cake Object " + id + "is disposed");  
    }  
}