构造方法到底做了什么?~是初始化变量吗 ?~对于静态变量,构造方法也能初始化吗 ?~不同类型的变量,系统自动构建的构造方法给它们的默认值各是什么 ?~Object类的构造方法实现了什么功能 ?
~是初始化变量吗 ?
~对于静态变量,构造方法也能初始化吗 ?
~不同类型的变量,系统自动构建的构造方法给它们的默认值各是什么 ?
~Object类的构造方法实现了什么功能 ?
首先,做一下准备工作:
为了方便,写一个静态工具方法如下:
static void p(String s, Object a) {
System.out.println(s + ":" + a);
}
这个方法是为了测试变量的值使用的,如:
p("a", a);
指查看变量a的值。
另外,若无特别声明,以下的变量和方法均存在于类T
public class T {}
中,上面的静态方法p同样遵守这个约定。
现在开始看第一个,先使用一个例子来说明这个问题:
int a; int[] aa; String s; Object o; public static void main(String[] args) { T t = new T(); p("未赋初值的int a", t.a); p("未赋初值的int[] aa", t.aa); p("未赋初值的String", t.s); p("未赋初值的Object", t.o); }
可以看到输出的结果如下:
- 未赋初值的int a:0
- 未赋初值的int[] aa:null
- 未赋初值的String:null
- 未赋初值的Object:null
这说明了,构造方法为变量a初始化了,其默认值为0,为变量aa也初始化了,其默认值为null。
通过这个例子,是否就能看出,构造方法为变量初始化会遵循以下原则呢:
若变量是值类型,则初始化为一个特定值;
若变量是引用类型的,则初始化为null。
下面看第二个问题,同样,举例说明:
static int a; static int[] aa; static String s; static Object o; public static void main(String[] args) { //T t = new T(); p("未赋初值的int a", a); p("未赋初值的int[] aa", aa); p("未赋初值的String", s); p("未赋初值的Object", o); }
可以看到输出的结果为:
- 未赋初值的int a:0
- 未赋初值的int[] aa:null
- 未赋初值的String:null
- 未赋初值的Object:null
从上例可以看出,对于所有的静态变量,均得到了和非静态变量一样的初始值。
第三个问题,对于不同的类型,从上面的推断来看,基本的数值类型中,整型的初始值会是0,浮点的话,应该是0.0了,双精度也应该为0.0,长整型和整型一样,也应该是0;而对于各种不同类型的引用类型,它们的初始值都一样,应该是null,接下来,用代码阐明问题:
int a;
float f;
double d;
long l;
int[] aa;
String s;
Object o;
public static void main(String[] args) {
T t = new T();
p("未赋初值的int a", t.a);
p("未赋初值的float f", t.f);
p("未赋初值的double d", t.d);
p("未赋初值的long l", t.l);
p("未赋初值的int[] aa", t.aa);
p("未赋初值的String", t.s);
p("未赋初值的Object", t.o);
}
可以看到输出结果如下:
- 未赋初值的int a:0
- 未赋初值的float f:0.0
- 未赋初值的double d:0.0
- 未赋初值的long l:0
- 未赋初值的int[] aa:null
- 未赋初值的String:null
- 未赋初值的Object:null
从以上输出结果可以知道,上面的推断是正确的。
那么,这些事都是怎么做到的呢 ?既然所有的类都是Object类的子类(继承自Object,当然除了Object自身),那么,这些事会不会和Object有什么关系呢 ?
好吧,先看看Object的构造方法都做了些什么好了。
结果,让人失望了。
Object类并没有构造方法,它除了线程方法和toString()方法,就剩下本地方法(Native Method),具体的细节,就不得而知了,要是什么时候有幸能看到其本地方法的实现,一定好好研究研究。
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:构造方法到底为我们做了什么 ? 那些事儿真是构造方法在做的么 ?
关键词:java,constructor
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。