JAVA 构造函数解决思路

JAVA 构造函数java构造函数只有在New一个对象的时候才能调用吗???[解决办法]当然,只有在NEW的时候,才会真

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。
[解决办法]
引用:
都说了 我也没啥可说的了。。 拿分!


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


构造方法就是方法名和类名必须相同,在调用方法时必须通过new出来的对象在调用
[解决办法]
该回复于2010-12-20 15:32:50被版主删除
[解决办法]
该回复于2010-12-20 15:32:49被版主删除
[解决办法]
该回复于2010-12-20 15:32:49被版主删除
[解决办法]
回答的很棒!学到了
[解决办法]
过来看看,赚点小分!
[解决办法]
这是最基本的东西了,大家都说的不错,我都不用说了,赶紧给分吧
[解决办法]
呵呵,我也不懂,我知道除了new之外,还可以用反射,还有newInstance()?我不知道,我刚学的,很模糊,做的笔记没那么系统
[解决办法]
是的,在static中也可以实现相似的功能
[解决办法]

引用:
情况当然不限于此了。
毕竟JAVA在创建对象时除了new的方式,还有反射的方式,就是
Class.forName(完整类名)

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

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

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


这个说的好
[解决办法]
恩,这是自然的了
[解决办法]
我现在只知道在用new 关键字创建对象时自动调用它的构造方法,当然 ,在子类写构造函数时,隐含调用父类的无参构造函数…………长知识了,呵呵
[解决办法]
2楼是胡扯
[解决办法]
引用:
不能说的这么绝对,一般的情况是这样的,但在定义一些特殊的对象时就不一定了。
例如:int i=5;String str="Me";创建了一个对象,但并没有使用new。


int i =5 ,i不对象!
String str ="Me" 使用了new!!不然怎么会有两个对象??
[解决办法]
顾名思义嘛,构造函数,是构造,只要涉及对对象创建过程的地方,义无反顾;new 只不过是让你看得着的一种罢了,考虑问题得全面!!
[解决办法]
学习了~~
[解决办法]
该回复于2010-12-20 15:50:37被版主删除
[解决办法]
引用:
情况当然不限于此了。
毕竟JAVA在创建对象时除了new的方式,还有反射的方式,就是
Class.forName(完整类名)

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

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

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

说的很正确啊
[解决办法]
被子类拐带的时候会调用默认构造。
构造函数,前面不用new,那还会用什么呢?
[解决办法]
创建该类实例时,会调用类内部构造方法,其实也就是new
上面有说反射的,反射的机制也是调用new关键字构造
[解决办法]
构造方法,定义的作用就是在面向对象的程序开发中创建对象 的。
[解决办法]
就目前的知识技术水平,我只知道new的时候调用了构造函数创建了对象,还有就是子类的构造函数会调用父类的构造函数。
[解决办法]
构造函数一般是为了方便初始化,和创建对象。所以要创建对象就要有new 构造函数。但是构造函数应该还有别的用途,就像上面有人说反射时会用到。别的地方也可能用到,按时初学者只知道那么多……
[解决办法]
Class.forName()方法也可以创建对象吧?此方法里面会不会调用构造方法呢?


[解决办法]
不过反射和new在分配上不同 反射是动态的
[解决办法]
该回复于2010-12-20 16:49:03被版主删除
[解决办法]
受益匪浅啊

[解决办法]

引用:
学习了!!
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分

我也来拿分的
[解决办法]
我也想知道    现在还不清楚

[解决办法]
该回复于2010-12-20 14:17:14被版主删除
[解决办法]
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
[解决办法]
该回复于2010-12-20 14:20:46被版主删除
[解决办法]
fine, it's well!
[解决办法]
方式是很多,但终究要创建出对象时就调用了。
[解决办法]
该回复于2012-08-28 09:24:19被版主删除
[解决办法]
还可以
XXX.class.newInstance();
[解决办法]
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分  
这里发言,表示您接受了CSDN社区的用户行为准则。 
请对您的言行负责,并遵守中华人民共和国有关法律法规,尊重网上道德。 
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。 

[解决办法]
受益匪浅啊
[解决办法]
HOHO, 好久没弄java了,知道的上面都回答过了
[解决办法]
该回复于2010-12-20 14:23:36被版主删除
[解决办法]
楼主说的完全正确
[解决办法]
赞同2楼的说法~
[解决办法]
该回复于2010-12-20 14:25:46被版主删除
[解决办法]
都是牛人,进来学习一下。。。
[解决办法]
该回复于2010-12-20 14:24:19被版主删除
[解决办法]
该回复于2010-12-20 14:24:22被版主删除
[解决办法]
路过
很热闹呀
[解决办法]
就是啊
[解决办法]
new一个对象不是万能的。
比如抽象类,要想得到实例可以用子类,或者直接用类名.静态方法()的方式进行。。。
[解决办法]
该回复于2010-12-20 14:32:23被版主删除
[解决办法]
讨论就得这么激烈,集思广益嘛。收获不小
10分
[解决办法]
该回复于2010-12-20 14:25:45被版主删除
[解决办法]
该回复于2010-12-20 14:26:39被版主删除
[解决办法]
引用:

不能说的这么绝对,一般的情况是这样的,但在定义一些特殊的对象时就不一定了。
例如:int i=5;String str="Me";创建了一个对象,但并没有使用new。

String str="Me"  是不是分两步的?先是String str=null,然后str=new String("Me")。我是新手,请多多指教!
[解决办法]
大家说的很8错,我来拿分
[解决办法]
继承中,如果实例化子类,则会调用父类相应的构造方法
[解决办法]
public class Handler {
    /**当前类唯一实例**/
    private final static Handler INSTANCE = new Handler();
    
    /**默认无参构造器**/
    private Handler() {

    }
    
    /**
     * 用于获取Handler实例
     * @return 返回Handler实例
     */
    public static Handler getInstance()
    {  
            return INSTANCE;
    }
}
用静态工厂代替构造函数


另外 静态工厂代替构造函数还有很多有点 建议去学习学习


[解决办法]
当然不是啊,比如Class.ForName("").newInstance就可以调用不带参数的构造函数。
还有就是通过反射调用构造函数。
[解决办法]
该回复于2010-12-20 14:33:28被版主删除
[解决办法]
前面都说了
[解决办法]
java初学者路过学习
[解决办法]
该回复于2010-12-20 14:34:51被版主删除
[解决办法]
路过~~~构造方法就是方法名和类名必须相同,在调用方法时必须通过new出来的对象进行调用
[解决办法]
对java还不是很了解
[解决办法]
没的说了 拿分
[解决办法]
事实上例如在这样一个语句:Person ps=new Person();其实实例化了两个对象。Person ps是一个,new Person()是另一个。第一个ps其实就是一个引用其内部存储的是第二个对象的内存地址。所以第二个才是实体对象,所以new时才调用构造方法!!
[解决办法]
该回复于2010-12-20 14:39:38被版主删除
[解决办法]
该回复于2010-12-20 14:39:38被版主删除
[解决办法]
引用:
java构造函数只有在New一个对象的时候才能调用吗???


虽然我还不太懂(因为刚学),但觉得说得挺好的,顶一下。 
 
反射的方式
Class.forName(完整类名)

我还没学到这,这个有什么做用呢???
[解决办法]
上面的makeShape()方法可以返回Shpe的子类对象如下假定:retangle和Circle是Shape的子类

 public static Shape makeShape() {
       System.out.println("here is the shape you ordered");
       if (retangle)
             return (new Retangle());
       if (Circle)
            return (new Circle());


   
    }
还可以实现只有一个类的对象:

public class Handler {
   
    private Handler handler = null;
    private Handler() {
      
    }

    public static getHandler() {
        if (!handler)
             handler = new Handler();
       return handler;
    }

    public static void main(String args[]) {
         Handler.getHandler();
    }
}
当handlerw为空时,那么重新构造一个handler,然后返回;如果已经构造过了,那么就直接返回已经存在的handler。

 

可以方便的拋出异常。请看下列代码:

       public class Test {
        public Test() {
                double x = 1.0/0.0;
        }
        public static void main(String args[]) {
        try {
                Test test = new Test();
        }catch (Exception e){
                System.out.println(e.toString());
        }
  }
}

编译,执行,你会发现这个异常不会被捕捉,没有任何输出;即使尝试在构造函数中捕捉异常也不行。看下列代码:

public class Test {
        public Test() {
                try {
                System.out.println("trying to throw an exception");
                double x = 1.0/0.0;
                } catch(Exception e) {
                        System.out.println("Exception captured");
                }finally {
                        System.out.println("inside finally");
                }
        }
        public static void main(String args[]) {
                Test test = new Test();
        }
}
编译,运行,结果为:
trying to throw an exception
inside finally

原因是JVM把构造函数产生的异常丢弃了。试想你正在使用一个第三方的类库提供的类,那个类提供一个共有的构造函数,它允许你通过参数构造一个类的对象,可是如果你的参数不合法,导致在构造函数中产生一个异常,那么你永远不知道具体发生了什么。可向而知那时的错误将会很难查找。


[解决办法]
该回复于2010-12-20 14:50:18被版主删除
[解决办法]
默认的有无参的构造函数,需要new对象昂
[解决办法]

引用:
情况当然不限于此了。
毕竟JAVA在创建对象时除了new的方式,还有反射的方式,就是
Class.forName(完整类名)

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

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

还有创建子类对象时,会自……
\
学习了
[解决办法]
该回复于2010-12-20 14:52:52被版主删除
[解决办法]
反射 好像很难啊

[解决办法]
该回复于2010-12-20 14:45:30被版主删除
[解决办法]
要用new
[解决办法]
该回复于2010-12-20 14:46:21被版主删除
[解决办法]
该回复于2010-12-20 17:45:49被版主删除
[解决办法]
该回复于2010-12-20 17:45:48被版主删除
[解决办法]
该回复于2010-12-20 14:53:37被版主删除
[解决办法]
顶2楼!