一个关于java初始化的问题
来源:互联网 发布:女生学什么舞蹈知乎 编辑:程序博客网 时间:2024/05/22 08:52
先来看这道题目吧,执行main方法会输出的是什么?
public class FieldTest { private int a = 1; private boolean b = true; public FieldTest() { a = 2; print(); } public void print() { System.out.println(a); System.out.println(b); } public static class FieldTestSub extends FieldTest { private boolean c = true; public void print() { System.out.println(c); } } public static void main(String[] args) { new FieldTestSub(); }}
来给你点时间思考
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
思考差不多了吧~先告诉你答案:
false
都做对了吗?没有的话就好好看看接下来的分析吧~
我们从main方法开始,其中只有new FieldTestSub();
创建了FildTestSub对象,就会走相应的构造,class如果没有显示的有参构造,默认会有一个无参构造
public FieldTestSub() {}
如果有该class有父类的话构造中又默认有super();
表示调用父类的构造,而父类的构造中
public FieldTest() { a = 2; print();}
为a变量赋值,然后调用print方法
public void print() { System.out.println(a); System.out.println(b);}
print方法则输出了a,b变量的值
a,b成员变量在申明的时候就赋值,该赋值是优先于构造生效的,因此a的值先是1,然后在构造中又变成了2,最终输出的话应该是:
2true
但是注意:子类中有这样一个方法:
public void print() { System.out.println(c);}
该方法与父类的方法print同名且参数一致,表示重写了父类的print方法。
在父类构造调用的print方法隐藏了调用的对象,即this.print();
而这个this是谁那?还记得在main方法中new的对象吗?
this其实就是FieldTestSub的对象,调用的this的print方法执行的实际执行的是:
System.out.println(c);
那就是true
嘛,在申明的时候直接赋的值private boolean c = true;
但是print方法是在父类的构造中执行的,此时子类还没有初始化,因此变量c还是最初值false,最终输出的结果:false
阅读全文
0 0
- 一个关于java初始化的问题
- 关于java初始化的问题
- 关于java初始化顺序的一个示例
- 关于java StringBuilder初始化的一个坑
- 关于java初始化问题
- 关于java的初始化顺序的问题
- 关于java对象初始化的问题
- 关于Java中初始化顺序的问题
- [ java ] 关于数组的初始化问题!
- 关于java变量的初始化问题
- 一个关于Java JFrame 无法初始化组件问题
- 一个关于JAVA的问题
- 关于字符串指针初始化std::string的一个小问题
- 今天开发中遇到的一个关于初始化赋值问题
- 关于java的初始化
- 关于java的初始化
- 关于java中变量的初始化的问题
- 关于java初始化块的一些细节问题
- Design T-Shirt(sort)
- Java使用TCP协议获取XML及其处理【续】
- ajax的url链接项目的根路径
- 实用脚本----Linux下Jdk和Tomcat自动安装shell脚本总结
- PC端可以访问网站,但设备端不能,但设备端可以ping通网址的IP
- 一个关于java初始化的问题
- C++ STL中Map的按Key排序和按Value排序
- 兼容IE8的轮播图插件
- 如何封装jQuery插件
- Houdini-Essential-Training_V16 linda
- Android 适配时用到的限定词
- SSIS入门介绍
- android apk 防止反编译技术第二篇-运行时修改Dalvik指令
- 抽取增量文件及合并jar包