亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Apakah NullPointerException dan bagaimana untuk membetulkannya?
P粉649990273
P粉649990273 2023-08-23 10:22:08
0
2
801
<p>Apakah Pengecualian Penunjuk Null (<kod>java.lang.NullPointerException</code>) dan apakah puncanya? </p> <p>Apakah kaedah/alat yang boleh digunakan untuk menentukan punca supaya pengecualian boleh dihalang daripada menyebabkan program ditamatkan lebih awal? </p>
P粉649990273
P粉649990273

membalas semua(2)
P粉252116587

NullPointerException 是當(dāng)您嘗試使用指向內(nèi)存中任何位置 (null) 的引用時(shí)發(fā)生的異常,就像引用對(duì)象一樣。對(duì)空引用調(diào)用方法或嘗試訪問空引用的字段將觸發(fā) NullPointerException。這些是最常見的,但 中列出了其他方法NullPointerException halaman javadoc.

Kod contoh terpantas yang boleh saya fikirkan untuk menggambarkan NullPointerException mungkin:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

dalam main 內(nèi)的第一行,我顯式地將 Object 引用 obj 設(shè)置為 null 。這意味著我有一個(gè)引用,但它沒有指向任何對(duì)象。之后,我嘗試通過調(diào)用該引用的方法來將該引用視為指向一個(gè)對(duì)象。這會(huì)導(dǎo)致 NullPointerException kerana tiada kod untuk dilaksanakan di lokasi yang ditunjukkan oleh rujukan.

(Ini soalan teknikal, tetapi saya fikir ia patut disebut: rujukan kepada null tidak sama dengan penunjuk C yang menunjuk ke lokasi memori yang tidak sah. Penunjuk nol sebenarnya tidak menghala ke mana-mana , yang sama sebagai menunjuk kepada lokasi yang kebetulan tidak sah Perbezaan halus )

P粉593536104

Terdapat dua jenis pembolehubah utama di Jawa:

  1. Primitif: Pembolehubah yang mengandungi data. Jika anda ingin memanipulasi data dalam pembolehubah asal, anda boleh memanipulasi pembolehubah secara langsung. Mengikut konvensyen, jenis primitif bermula dengan huruf kecil. Contohnya, pembolehubah jenis intchar adalah primitif.

  2. Reference: Pembolehubah yang mengandungi alamat memori objek , iaitu, pembolehubah yang mengutamakan 對(duì)象內(nèi)存地址的變量,即引用對(duì)象的變量代碼>.如果您想要操作引用變量引用的Object,則必須取消引用它。取消引用通常需要使用 . 訪問方法或字段,或使用 [ 索引數(shù)組。按照慣例,引用類型通常用以大寫字母開頭的類型來表示。例如,ObjectObject

    Code>. >Objek yang dirujuk oleh kod pembolehubah rujukan>, anda mesti
  3. dereference
itu. Penyahrujukan biasanya memerlukan penggunaan . untuk mengakses kaedah atau medan, atau [ untuk mengindeks tatasusunan. Mengikut konvensyen, jenis rujukan biasanya diwakili oleh jenis yang bermula dengan huruf besar. Contohnya, pembolehubah jenis Object ialah rujukan.

int Pertimbangkan kod berikut, di mana anda mengisytiharkan pembolehubah

mentah

jenis x 指定任何值,而我們正在嘗試使用 x 的值來指定 y tetapi jangan memulakannya:

int x;
int y = x + x;

Dua baris ini akan ranap program kerana tiada >. Semua primitif mesti dimulakan kepada nilai yang boleh digunakan sebelum ia boleh dimanipulasi. null,這意味著“我沒有引用任何東西”。如果您以這種方式顯式設(shè)置引用變量,則可以在引用變量中獲取 null 值,或者引用變量未初始化并且編譯器不會(huì)捕獲它(Java 會(huì)自動(dòng)將該變量設(shè)置為 null Sekarang perkara menjadi menarik.

Rujukan

pembolehubah boleh ditetapkan kepada null, yang bermaksud "Saya tidak merujuk apa-apa ". Jika anda secara eksplisit menetapkan pembolehubah rujukan dengan cara ini, anda boleh mendapatkan nilai null dalam pembolehubah rujukan, atau pembolehubah rujukan tidak dimulakan dan pengkompil tidak menangkapnya (Java menetapkan pembolehubah secara automatik kepada null). NullPointerExceptionJika anda menetapkan pembolehubah rujukan kepada null, sama ada secara eksplisit atau automatik melalui Java, dan anda mencuba

untuk nyahrujuk

nya, anda akan mendapat NullPointerException.

biasanya berlaku apabila anda mengisytiharkan pembolehubah tetapi tidak mencipta objek dan menetapkannya kepada pembolehubah sebelum cuba menggunakan kandungan pembolehubah

(NPE). Jadi anda merujuk sesuatu yang sebenarnya tidak wujud.

num的變量,但它實(shí)際上還不包含引用值。由于您還沒有說出要指向什么,Java 將其設(shè)置為 nullGunakan kod berikut:

Integer num;
num = new Integer(10);

Baris pertama mengisytiharkan fail bernama new關(guān)鍵字用于實(shí)例化(或創(chuàng)建)一個(gè)Integer類型的對(duì)象,引用變量num 被分配給該 Integer.

Barisan kedua, num,,您將得到一個(gè)NullPointerException。在最簡單的情況下,編譯器會(huì)捕獲問題并讓您知道“num 可能尚未初始化 objek.

Jika anda cuba menyahrujuk nombor sebelum mencipta objek,

anda akan mendapat obj,而是假設(shè)它是在調(diào)用 doSomething(). Dalam kes paling mudah, pengkompil akan menangkap masalah dan memberitahu anda "num mungkin tidak dimulakan", tetapi kadangkala anda mungkin menulis kod yang tidak mencipta objek secara langsung.

??Sebagai contoh, anda mungkin mempunyai kaedah berikut: ??
public void doSomething(SomeObject obj) {
   // Do something to obj, assumes obj is not null
   obj.myMethod();
}
??Dalam kes ini, anda tidak mencipta objek yang dicipta sebelum kaedah ??. Perhatikan bahawa kaedahnya boleh dipanggil seperti ini: ??
doSomething(null);

Dalam kes ini, objnull,并且語句 obj.myMethod() 將拋出 NullPointerException >.

Jika kaedah bercadang untuk melakukan beberapa operasi pada objek yang dihantar seperti kaedah di atas, melontar NullPointerException adalah sesuai kerana ini adalah ralat pengaturcara dan pengaturcara memerlukan maklumat tersebut untuk tujuan penyahpepijatan.

Sebagai tambahan kepada NullPointerException 異常之外,您還可以檢查方法參數(shù)中的 null pengecualian yang dilemparkan kerana logik kaedah, anda juga boleh menyemak nilai

dalam parameter kaedah dan secara eksplisit membuang NPE dengan menambahkan sesuatu seperti: berhampiran permulaan kaedah berikut:

// Throws an NPE with a custom error message if obj is null
Objects.requireNonNull(obj, "obj must not be null");
Perhatikan bahawa adalah berguna untuk menyatakan secara eksplisit yang nullobjek tidak boleh dalam mesej ralat. Kelebihan mengesahkan ini ialah 1) anda boleh mengembalikan mesej ralat anda yang lebih jelas, 2) untuk kaedah lain yang anda tahu bahawa melainkan obj ditetapkan semula, ia tidak batal dan boleh dinyahrujuk dengan selamat

Sebagai alternatif, dalam beberapa kes, tujuan kaedah bukan hanya untuk beroperasi pada objek yang dihantar masuk, jadi parameter kosong mungkin boleh diterima. Dalam kes ini, anda perlu menyemak null parameterdoSomething() dan berkelakuan secara berbeza. Anda juga harus menerangkan perkara ini dalam dokumentasi. Contohnya,

boleh ditulis sebagai:

/**
  * @param obj An optional foo for ____. May be null, in which case
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj == null) {
       // Do something
    } else {
       // Do something else
    }
}
Akhir sekali, Cara menggunakan surih tindanan untuk menentukan pengecualian dan punca

Sonar dengan keupayaan mencari pepijat boleh mengesan NPE. 一個(gè)>Boleh sonar secara dinamik menangkap pengecualian penuding nol yang disebabkan oleh JVM

Kini Java 14 menambah ciri bahasa baharu untuk menunjukkan punca utama NullPointerException. Ciri bahasa ini telah menjadi sebahagian daripada JVM Perniagaan SAP sejak 2006.

Dalam Java 14, berikut ialah contoh mesej pengecualian NullPointerException:

NullPointerExceptionSenarai situasi yang menyebabkan

berlaku

NullPointerExceptionBerikut adalah semua situasi di mana

berlaku secara langsung* yang disebut oleh Spesifikasi Bahasa Java:
  • Akses (iaitu dapatkan atau tetapkan) medan contoh
  • rujukan nol. (Medan statik tidak dikira!)
  • Panggil instance
  • kaedah rujukan batal. (Kaedah statik tidak dikira!)
  • 拋出空值;
  • Akses elemen tatasusunan kosong.
  • synchronized (someNullReference) { ... }Segerakkan pada nol -
  • NullPointerExceptionMana-mana pengendali integer/titik terapung boleh melontar jika salah satu operannya ialah rujukan nol berkotak
  • NullPointerExceptionPenukaran unboxing meningkat
  • jika nilai kotak adalah batal.
  • super 會(huì)引發(fā) NullPointerExceptionMemanggil super pada rujukan batal meningkatkan
  • . Jika anda keliru, ini bercakap tentang panggilan pembina kelas super yang layak:
class Outer {
    class Inner {}
}
class ChildOfInner extends Outer.Inner {
    ChildOfInner(Outer o) { 
        o.super(); // if o is null, NPE gets thrown
    }
}
  • for (element : iterable)Gunakan

    gelung untuk mengulung pada koleksi/tatasusunan kosong. ??
  • switch (foo) { ... }(無論是表達(dá)式還是語句)在 foo 時(shí)可以拋出 NullPointerException kosong.

  • foo.new SomeInnerClass() 當(dāng) foo 為 null 時(shí)拋出 NullPointerException.

  • name1::name2primaryExpression::name 形式的方法引用在以下情況下求值時(shí)會(huì)拋出 NullPointerException name1 或 primaryExpression menilai kepada batal.

    Nota dari JLS menyatakan bahawa someInstance.someStaticMethod() 不會(huì)拋出 NPE,因?yàn)?someStaticMethod 是靜態(tài)的,但 someInstance:: someStaticMethod masih membuang NPE!

  • * Sila ambil perhatian bahawa JLS juga mungkin secara tidak langsung banyak bercakap tentang NPE.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan