你的位置:首页 > 软件开发 > Java > 构造方法到底为我们做了什么 ? 那些事儿真是构造方法在做的么 ?

构造方法到底为我们做了什么 ? 那些事儿真是构造方法在做的么 ?

发布时间:2012-02-14 13:00:49
构造方法到底做了什么?~是初始化变量吗 ?~对于静态变量,构造方法也能初始化吗 ?~不同类型的变量,系统自动构建的构造方法给它们的默认值各是什么 ?~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);    }

 


可以看到输出的结果如下:

  1. 未赋初值的int a:0
  2. 未赋初值的int[] aa:null
  3. 未赋初值的String:null
  4. 未赋初值的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);           }

 
可以看到输出的结果为:

  1. 未赋初值的int a:0
  2. 未赋初值的int[] aa:null
  3. 未赋初值的String:null
  4. 未赋初值的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);

}


可以看到输出结果如下:

  1. 未赋初值的int a:0
  2. 未赋初值的float f:0.0
  3. 未赋初值的double d:0.0
  4. 未赋初值的long l:0
  5. 未赋初值的int[] aa:null
  6. 未赋初值的String:null
  7. 未赋初值的Object:null

从以上输出结果可以知道,上面的推断是正确的。
那么,这些事都是怎么做到的呢 ?既然所有的类都是Object类的子类(继承自Object,当然除了Object自身),那么,这些事会不会和Object有什么关系呢 ?
好吧,先看看Object的构造方法都做了些什么好了。
结果,让人失望了。
Object类并没有构造方法,它除了线程方法和toString()方法,就剩下本地方法(Native Method),具体的细节,就不得而知了,要是什么时候有幸能看到其本地方法的实现,一定好好研究研究。

 

 

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:构造方法到底为我们做了什么 ? 那些事儿真是构造方法在做的么 ?

关键词:java,constructor

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。