{Java}一个有关类属性初始化的有趣儿情况
Posted Qiujuer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了{Java}一个有关类属性初始化的有趣儿情况相关的知识,希望对你有一定的参考价值。
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
开源库:github.com/qiujuer/Blink
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/46747975
—— 学之开源,用于开源;初学者的心态,与君共勉!
========================================================
有趣儿?
何为有趣儿?其实就是搞怪。
一段时间没有写博客了,最近弄一个APP去了,后面我把APP贴上,欢迎大家测试使用。
问题
这个情况有些特殊,当时我在弄APP的设置模块;结果发现无论设置如何保存第二次获取值的时候都是初始值,跟踪了一下发现保存的时候的确是保存到文件了,那么这就奇葩了。想了一下问题肯定出在获取值的时候,跟踪了一下获取值的断点,发现获取的时候是之前保存的值,而在类的构造函数之后值却又成了初始值,这个是为啥?
百思不得其姐啊~~~
我喜欢直接一点,来看看代码是怎么回事儿。
代码
package net.qiujuer;
public abstract class People
public People()
initValue();
public abstract void initValue();
public void show()
System.out.printf("Show:" + toString());
一个父类,在构造函数中调用初始化方法。
package net.qiujuer;
public class Man extends People
private String mName = "聂小倩";
private int mAge = 18;
@Override
public void initValue()
mName = "Qiujuer";
mAge = 23;
@Override
public String toString()
return "Name:" + (mName == null ? "NULL" : mName) + " Age:" + mAge + "\\n";
实现类,实现其具体的初始化方法,并在该方法中做一些属性操作。
package net.qiujuer;
public class MainClass
public static void main(String[] args)
Man man = new Man();
man.show();
测试类,在该类中直接 new 并调用方法。
结果是什么呢?
有谁能猜到?
其输出为:
Show:Name:聂小倩 Age:18
怎么样?有想到的么?为什么会这样呢?自己试试看看是不是。
变更
我们输出一些详细的地方。
首先更改父类的构造函数:
public People()
System.out.printf("People-1:" + toString());
initValue();
System.out.printf("People-2:" + toString());
然后更改 Man 的构造函数:
public Man()
super();
System.out.printf("Man:" + toString());
再来运行看看~~
想想一下结果是什么呢?
先想一下,然后再看估计有些用处。
算了,还是直接进入吧~
结果输出:
People-1:Name:NULL Age:0
People-2:Name:Qiujuer Age:23
Man:Name:聂小倩 Age:18
Show:Name:聂小倩 Age:18
想到了么?
结论
我想到了这些:
- 在类属性初始化的时候,其直接赋值的默认值将会在父类的构造函数之后进行。
- 在父类操作的时候,其子类的属性并不具备值:mName 属性为 NULL
- 在父类中可以通过方法对实现类的属性进行赋值操作,但是当其实现类中默认有对值进行赋值的话,那么将会自动进行二次赋值。
一个无心之举,或许会造成一个天大的BUG;且用且珍惜~
Other
关于APP,这个APP是用来记录一些对你重要的日子的软件,并采用时间序的方式对你进行无声提醒。
{UPMiss} 思念你的夏天
下载地址:
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
开源库:github.com/qiujuer/Blink
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/46747975
—— 学之开源,用于开源;初学者的心态,与君共勉!
========================================================
以上是关于{Java}一个有关类属性初始化的有趣儿情况的主要内容,如果未能解决你的问题,请参考以下文章
Java中staticfinalstatic final的区别