java - 请问下,这里为何会引发空指针异常?
黄舟
黄舟 2017-04-18 10:50:14
0
3
563

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(3)
伊谢尔伦

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

巴扎黑

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.

小葫芦

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.

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