Artikel Soal Jawab Java yang dibawa oleh editor PHP Zimo akan menjawab soalan biasa: "Lemparkan pengecualian dan bukannya kembali. Apakah jenis sebenar yang dikembalikan oleh kaedah tersebut, apabila kaedah membuang pengecualian, jenis pulangan kaedah Ia sebenarnya tidak sah, bukan jenis pengecualian yang dilemparkan. Ini bermakna kaedah itu tidak mengembalikan sebarang nilai, tetapi melemparkannya terus apabila pengecualian ditemui. Apabila mengendalikan pengecualian, anda boleh menggunakan pernyataan cuba-tangkap untuk menangkap pengecualian dan mengendalikannya dengan sewajarnya untuk memastikan kestabilan dan kebolehpercayaan program.
Saya sedang mendalami kaedah URL
类的 openStream()
di Jawa untuk mencari jenis pulangan sebenar. Daripada OpenJDK, sumbernya ialah:
InputStream akhir awam openStream() membuang java.io.IOException { Kembalikan openConnection().getInputStream(); }
Jenis pulangan jelas adalah Objek InputStream
, iaitu kelas abstrak. Jadi, ini adalah jenis yang diisytiharkan, apakah jenis sebenar objek yang dikembalikan?
Saya mengikuti kepulangan openConnection()
方法,该方法返回 URLConnection
类的对象。我还顺着它的源码找到了getInputSteam()
. Akhirnya, saya menjumpai kod ini:
Aliran input awam getInputStream() membuang IOException { buang UnknownServiceException baru("Protokol tidak menyokong input"); }
Soalan saya ialah apakah jenis pulangan sebenar getInputStream()
的实际返回类型是什么,这将是 openStream()
?
Berikut ialah contoh menggunakan alamat HTTPS.
Gunakan nyahpepijat proses dan letakkan titik putus pada URL#openStream kaedah.
Dan, saya maksudkan kaedah sebenar, bukan panggilan anda.
Dari sini, "langkah ke" kaedah openConnection.
Kemudian, "langkah ke" kaedah openConnection(URL).
Ini akan membawa anda ke kelas sun.net.www.protocol.https.Handler.
Teruskan sekali lagi ke kaedah openConnection(URL, Proxy), yang mengembalikan tika baharu sun.net.www.protocol.https.HttpsURLConnectionImpl.
Mengembara lebih jauh, anda akan mendapati bahawa contoh HttpsURLConnection dikembalikan melalui kelas sun.net.www.protocol.https.DelegateHttpsURLConnection.
Anda tahu, apabila saya mula menggunakan Java beberapa tahun lalu, saya (hampir) mengalami masalah ini, kecuali saya keliru tentang java.awt.Graphics
.
Lihat Memprogram ke antara muka
Ideanya ialah anda sebenarnya tidak perlu mengetahui kelas yang tepat - apa sahaja yang melaksanakan antara muka boleh ditukar masuk atau keluar. Ini menjadikan kod lebih mudah disesuaikan dari semasa ke semasa.
Atas ialah kandungan terperinci Buang pengecualian dan bukannya kembali. Apakah jenis sebenar yang dikembalikan oleh kaedah tersebut?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!