Rumah > Soal Jawab > teks badan
有人跟我讲,将name进行静态赋值即可,但实例变量不也是属于成员变量吗,也是在整个类实例化的时候产生的啊,跟静态赋值有何区别吗?
伊谢尔伦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
巴扎黑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.
高洛峰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
.