CodeGym /Java Blog /Acak /Java kembali Kata Kunci
John Squirrels
Level 41
San Francisco

Java kembali Kata Kunci

Dipublikasikan di grup Acak
Seperti yang kita ketahui, bahasa Java merupakan bahasa pemrograman berorientasi objek. Dengan kata lain, konsep dasar, yaitu fondasi dari fondasi, adalah bahwa segala sesuatu adalah obyek. Objek dijelaskan menggunakan kelas. Kelas, pada gilirannya, menentukan keadaan dan perilaku. Misalnya, rekening bank mungkin memiliki keadaan berupa jumlah uang dalam rekening tersebut dan memiliki perilaku yang menambah dan mengurangi saldo rekening. Di Jawa, perilaku diimplementasikan melalui metode. Mempelajari cara mendefinisikan metode datang di awal studi Java Anda. Misalnya, di tutorial resmi Oracle, di bawah judul " Metode Mendefinisikan ". Ada dua hal penting yang perlu diperhatikan di sini:
  • Setiap metode memiliki tanda tangan. Tanda tangan terdiri dari nama metode dan parameter masukannya.
  • Jenis pengembalian harus ditentukan untuk metode. Anda mendeklarasikan tipe pengembalian metode dalam deklarasi metodenya.
Jenis pengembalian bukan bagian dari tanda tangan metode. Sekali lagi, ini adalah konsekuensi dari fakta bahwa Java adalah bahasa yang diketik dengan kuat dan kompiler ingin mengetahui jenis apa yang digunakan dan di mana, sebelumnya dan sebanyak mungkin. Sekali lagi, ini untuk menyelamatkan kita dari kesalahan. Pada dasarnya, itu semua untuk tujuan yang baik. Dan menurut saya hal ini sekali lagi menanamkan dalam diri kita budaya penanganan data. Jadi, jenis nilai pengembalian ditentukan untuk metode. Dan kata kunci return di Java digunakan untuk benar-benar melakukan pengembalian. Java kembali Kata Kunci - 1

Apa yang dilakukan return di Jawa

Kata kunci return adalah pernyataan alur kontrol, seperti yang dijelaskan dalam tutorial Oracle di sini . Anda juga dapat membaca tentang cara mengembalikan nilai di bagian " Mengembalikan Nilai dari Metode " dari tutorial resmi. Kompiler dengan hati-hati melacak apakah ia dapat memastikan bahwa nilai pengembalian metode cocok dengan jenis pengembalian yang ditentukan metode. Mari gunakan IDE Online Tutorialspoint untuk mempertimbangkan sebuah contoh. Mari kita lihat contoh purba:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
Seperti yang bisa kita lihat, metode main dijalankan di sini, yang merupakan titik masuk program. Baris kode dijalankan dari atas ke bawah. Metode utama kami tidak dapat mengembalikan nilai. Jika kami mencoba mengembalikan nilai di sana, kami akan mendapatkan kesalahan: "Error: Main method must return a value of type void" . Dengan demikian, metode ini hanya menampilkan ke layar. Sekarang mari kita pindahkan string literal ke metode terpisah untuk menghasilkan pesan:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println(getHelloMessage());
    }
    
    public static String getHelloMessage() {
        return "Hello World";
    }
    
}
Seperti yang dapat kita lihat, kita menggunakan kata kunci return untuk menunjukkan nilai kembalian, yang kemudian diteruskan ke metode println . Deklarasi metode getHelloMessage menunjukkan bahwa metode tersebut akan mengembalikan sebuah String . Hal ini memungkinkan kompiler untuk memeriksa apakah tindakan metode konsisten dengan bagaimana ia dideklarasikan. Secara alami, tipe pengembalian yang ditentukan dalam deklarasi metode bisa lebih luas daripada tipe nilai yang sebenarnya dikembalikan dalam kode, yaitu yang penting adalah konversi tipe dimungkinkan. Jika tidak, kami akan mendapatkan kesalahan pada waktu kompilasi: "Error: incompatible types" . Omong-omong, Anda mungkin memiliki pertanyaan: Mengapa dikembalikandianggap sebagai pernyataan aliran kontrol? Karena itu dapat mengganggu aliran top-down normal dari suatu program. Contoh:

public class HelloWorld {

    public static void main(String[] args) {
        if (args.length == 0) {
            return;
        }
        for (String arg : args) {
            System.out.println(arg);
        }
    }
    
}
Seperti yang Anda lihat dari contoh, kami menginterupsi metode utama dalam program Java jika dipanggil tanpa argumen. Penting untuk diingat bahwa jika Anda memiliki kode setelah pernyataan kembali , itu tidak akan dapat diakses. Kompiler pintar kami akan menyadarinya dan mencegah Anda menjalankan program semacam itu. Misalnya, kode ini tidak dapat dikompilasi:

public static void main(String[] args) {
        System.out.println("1");
        return;
// we use output method after return statement, which is incorrect 
        System.out.println("2");
 }
Ada satu peretasan kotor untuk menyiasatinya. Misalnya, untuk keperluan debugging, atau karena alasan lain. Kode di atas dapat diperbaiki dengan membungkus pernyataan return dalam blok if :

if (2==2) {
    return;
}

Kembali pernyataan selama penanganan kesalahan

Ada hal lain yang sangat rumit — kita bisa menggunakan return bersamaan dengan penanganan kesalahan. Saya ingin langsung mengatakan bahwa menggunakan pernyataan return di blok catch adalah bentuk yang sangat, sangat buruk, jadi Anda harus menghindarinya. Tapi kita butuh contoh, bukan? Ini dia:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Value: " + getIntValue());
    }
    
    public static int getIntValue() {
        int value = 1;
        try {
            System.out.println("Something terrible happens");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("Cached value: " + value);
            return value;
        } finally {
            value++;
            System.out.println("New value: " + value);
        }
    }
    
}
Sekilas, sepertinya 2 harus dikembalikan, karena akhirnya selalu dieksekusi. Tapi tidak, nilai pengembaliannya adalah 1, dan perubahan variabel di blok finally akan diabaikan. Selain itu, misalkan nilai itu berisi objek dan kami katakan value = null di blok akhirnya . Kemudian objek itu, bukan null, akan dikembalikan di blok catch . Tapi pernyataan kembali akan bekerja dengan benar di blok akhirnya . Jelas, rekan kerja Anda tidak akan berterima kasih atas kejutan kecil yang melibatkan pernyataan balasan.

void.class

Dan akhirnya. Ada konstruksi aneh yang bisa Anda tulis: void.class . Hmm. Mengapa dan apa artinya? Memang ada berbagai kerangka kerja dan kasus rumit yang melibatkan API Refleksi Java di mana ini bisa sangat berguna. Misalnya, Anda dapat memeriksa jenis apa yang dikembalikan oleh metode:

import java.lang.reflect.Method;

public class HelloWorld {

    public void getVoidValue() {
    }

    public static void main(String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == void.class);
        }
    }
}
Ini dapat berguna dalam kerangka pengujian di mana Anda perlu mengganti kode aktual dalam metode. Tetapi untuk melakukan ini, Anda perlu memahami bagaimana suatu metode berperilaku (yaitu tipe apa yang dikembalikannya). Ada juga cara kedua untuk mengimplementasikan metode main pada kode di atas:

public static void main(String[] args) {
        for (Method method : HelloWorld.class.getDeclaredMethods()) {
            System.out.println(method.getReturnType() == Void.TYPE);
        }
 }
Anda dapat membaca diskusi yang cukup menarik tentang perbedaan keduanya di Stack Overflow: Apa perbedaan antara java.lang.Void dan void?
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION