Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
404 views
in Technique[技术] by (71.8m points)

请教一个关于java参数传递的问题

本人java初学者,最近学习到异常处理,在试着自己写一个异常处理时遇到了一个问题。
我想通过无参构造方法直接把 message传给父类的含参构造方法。
image.png
这个会报错,我搜了一下这个问题,大概是由于message这个实例变量是在构造方法执行后才会初始化,而子类构造方法执行前必需先执行父类的构造方法,这样无法将message传入父类构造方法就会出现错误。如果将message变量改成static类型的就没错了。
这个原因我基本能理解 但对下面这种情况我又有点困惑
image.png
这其实是很常用的一种方法 通过子类含参构造方法将参数传给父类含参构造方法,但按前面的理解不应该是调用子类构造方法前必需先调用父类的构造方法吗?这时message是怎么传给父类的呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

其实就是类的加载初始化的问题。
简单来说就是在你的父类初始化的时候,你的message还没有初始化。
加载顺序如下:
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
子类main方法
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器

详细的话可以参考这篇文章:类的初始化顺序

希望对你有帮助!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.6k users

...