日期:2014-05-20  浏览次数:20738 次

JAVA 构造函数
java构造函数只有在New一个对象的时候才能调用吗???
------解决方案--------------------
当然,只有在NEW的时候,才会真正的创建这个对象,只有在创建时才会调用该类的构造函数。
如:
Class A{
public A(){
System.out.println("这是A的构造函数");
}
}
Class Test{
public statics void main(String[] args){
A a1;    //--->此时是不会打印出“这是A的构造函数”这段的
a1=new A();    //此时会打印出来
}
}
------解决方案--------------------
情况当然不限于此了。
毕竟JAVA在创建对象时除了new的方式,还有反射的方式,就是
Class.forName(完整类名)

但反射加载时,只会调用类的无参构造函数。在反射时如果一个类中没有无参构造函数,那是会报实例化异常的。

在同一个类中如果出现构造函数的重载,那也有可能出现其中一个调用另外一个的情况。最显著的情况是因为某些参数采用默认值的方式。

还有创建子类对象时,会自动逐层调用父类的构造函数完成相关的初始化工作。
------解决方案--------------------
java的对象必须new,不new没对象。

------解决方案--------------------
凡事说的太绝对总是太容易让人找出漏洞

比如在cmd中执行一个java程序的时候,类名叫Test,是用java Test a b c

jvm会自动创建一个String[]对象,内容是["a","b","c"]


引用:
java的对象必须new,不new没对象。

------解决方案--------------------
用类加载器加载类的时候,就会默认调用无参构造方法
------解决方案--------------------
一般情况下是楼主说的那样呢
------解决方案--------------------
是new出一个对象
------解决方案--------------------
都说了 我也没啥可说的了。。  拿分!
------解决方案--------------------
该回复于2010-12-20 10:32:33被版主删除
------解决方案--------------------
是了,new出一个对象时自动会调用构造函数
------解决方案--------------------
引用:
情况当然不限于此了。
毕竟JAVA在创建对象时除了new的方式,还有反射的方式,就是
Class.forName(完整类名)

但反射加载时,只会调用类的无参构造函数。在反射时如果一个类中没有无参构造函数,那是会报实例化异常的。

在同一个类中如果出现构造函数的重载,那也有可能出现其中一个调用另外一个的情况。最显著的情况是因为某些参数采用默认值的方式。

还有创建子类对象时,会自动……

此楼说得很好~
------解决方案--------------------
public static Class A{
private static A(){
System.out.println("这是A的构造函数");
}
public static A getInstance(){
  return A();
}
}
Class Test{
public statics void main(String[] args){
A a1; //--->此时是不会打印出“这是A的构造函数”这段的
A.getInstance()//此时会打印出来
}
}
------解决方案--------------------
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
------解决方案--------------------
学习了!!
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
------解决方案--------------------
该回复于2010-12-20 15:24:22被版主删除
------解决方案--------------------
不能说的这么绝对,一般的情况是这样的,但在定义一些特殊的对象时就不一定了。
例如:int i=5;String str="Me";创建了一个对象,但并没有使用new。
------解决方案--------------------
引用:
都说了 我也没啥可说的了。。 拿分!


还可以说一句
------解决方案--------------------
反射时也调用
------解决方案--------------------