Rumah  >  Soal Jawab  >  teks badan

java - 请问下,这里为何会引发空指针异常?

有人跟我讲,将name进行静态赋值即可,但实例变量不也是属于成员变量吗,也是在整个类实例化的时候产生的啊,跟静态赋值有何区别吗?

黄舟黄舟2743 hari yang lalu530

membalas semua(3)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:52:14

    Pembina kelas induk dilaksanakan sebelum pembina subkelas, Base()->test()-->name.length() bersamaan dengan null.length().
    Jika anda menulis name sebagai statik, sudah tentu ia OK, kerana ahli statik dimulakan sebelum ahli instance dimulakan.

    Tempahan adalah lebih kurang seperti berikut:

    • Kelas ibu bapastatic{...}

    • Ahli statik kelas induk

    • Kaedah pembinaan kelas ibu bapa

    • Subkelasstatic{...}

    • Ahli statik subkelas

    • Kaedah pembinaan subkelas

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:52:14

    Pertama sekali, buang konsep, proses pemulaan objek:
    静态变量 > 静态初始化块 > 实例变量 > 构造器
    Dan untuk objek dengan hubungan kelas ibu bapa-anak, terdapat proses pemulaan bersarang
    父类初始化流程 > 子类初始化流程

    Jadi semasa proses instantiasi anda, apabila anda memanggil pembina kelas induk dan memanggil kaedah test(), subkelas name belum lagi diberikan nilai dan masih null, jadi penunjuk nol secara semula jadi akan dilaporkan.

    balas
    0
  • 高洛峰

    高洛峰2017-04-18 10:52:14

    Anda tidak akan mendapat ralat jika anda mentakrifkan name dalam kelas induk Base. Kerana apabila anda membuat instantiate Sub, pembina lalai akan dipanggil, dan pembina lalai akan memanggil pembina kelas induk Dalam pembina kelas induk, anda menggunakan kaedah test(), dan anda berada dalam subkelas. Kaedah ini telah ditulis semula, dan test digunakan dalam kaedah name subkelas, tetapi pada masa ini name masih belum melengkapkan pemula. Jadi saya akan melaporkan NullPointerException.

    balas
    0
  • Batalbalas