A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋美成 中级黑马   /  2014-3-13 19:51  /  1431 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋美成 于 2014-3-14 12:41 编辑

我们知道构造函数是在对象创立后只执行一次的,那么我我有一个问题,如果在后面的程序中,我继续写语句调用原来的构造函数,把它当做是一般函数使用,效果会怎么样?

7 个回复

倒序浏览
请问一下你怎么掉呢?构造函数是你在用new关键字创建对象时候自动调用一次,它的名字和类名是相同的,只用创建对象的时候会自动调用
回复 使用道具 举报
首先,明确一点:
在语法中,没有办法向调用一般函数那样调用构造函数。

构造函数的作用,就是对新初始化的对象(发生在new对象过程中,在堆中分配空间之后)。
且每个新建对象中,只能构造一次。

只有以下两种可能让你去显式的调用,其它构造函数:
1、子类调用父类的构造函数,用super()实现,要求是在子类构造器的第一行声明。
2、当同一个类有多个构造器时,一个构造器调用另一个构造器,用this()实现, 要求是在调用构造器的第一行声明。

当你学到反射之后,就可以发现:
构造函数的类型(Constructor)都和一般函数的类型(Method)的定义和获取方式是不一样。
回复 使用道具 举报 1 0
本帖最后由 无此姓名 于 2014-3-14 09:48 编辑

要搞清楚构造函数的作用,就是给你来初始化对象的,初始化当然只需要一次。所以之后再调用构造函数(也就是初始化对象)就没有道理,Java也是这么设计的,这符合正常逻辑,计算机语言就是用来描述事物的嘛。
如果一定要知道调用之后是什么结果,那就是:编译器会把它当做一个普通函数处理,但是会发现你没有创建过本函数,所以报错。如下代码
  1. class Person
  2. {
  3. //     Person();
  4.         String name;
  5.         int age;
  6.         Person(String name,int age)
  7.         {
  8.                 this.name=name;
  9.                 this.age=age;
  10.         }
  11. }

  12. class PersonDemo
  13. {
  14.         public static void main(String[] args)
  15.         {
  16. //             Person p=new Person();        //Person();调用空构造函数
  17.                 Person p=new Person("zhangsan",40);
  18.                 Person("lisi",30);//报错,信息如下
  19.         }
  20. }
复制代码

报错信息:
        PersonDemo.java:19: 错误: 找不到符号
                Person("lisi",30);
                ^
          符号:   方法 Person(String,int)
          位置: 类 PersonDemo
        1 个错误

记住构造函数之前一定要有new,代表你要创建对象,并给对象初始化。





回复 使用道具 举报
你怎么写的调用语句不清楚,不过,首先,要明确构造函数与一般函数定义的语法格式不同,决定了它们的作用不同。
构造函数的作用就是用来创建类的对象和对属性进行初始化的,而一般函数仅仅是用来封装具体的操作或者是功能代码的,
而这些功能方法或是函数正是由它所在的类的对象或者是类名来调用的,且对象的创建的前提是new一个构造器出来。
如果说构造函数当作一般函数使用,先不说你用什么调用,就假如能够调用的话,那么Java还这样定义有什么意义呢。
换句话说,如果把一般函数的操作定义在了构造函数中,那么一创建对象,这些操作就会被加载,而你并不想去完成
这项操作或实现这部分功能,所以我觉得它俩还是应该区分开来,要明确它们的定义,我是这样认为的。
回复 使用道具 举报
630681386@qq.co 发表于 2014-3-13 20:25
请问一下你怎么掉呢?构造函数是你在用new关键字创建对象时候自动调用一次,它的名字和类名是相同的,只用 ...

是,在自动调用以后,我比如说在后面的main函数中,我在用像调用其它函数那样的方法,编写语句,去调用构造函数,这是,构造函数还能实现它的作用吗
回复 使用道具 举报
无此姓名 发表于 2014-3-14 09:46
要搞清楚构造函数的作用,就是给你来初始化对象的,初始化当然只需要一次。所以之后再调用构造函数(也就是 ...

奥,谢谢谢谢,代码比较直观,下次我也这样发吧,经验啊~~谢谢
回复 使用道具 举报
蒋珍珍 发表于 2014-3-14 12:18
你怎么写的调用语句不清楚,不过,首先,要明确构造函数与一般函数定义的语法格式不同,决定了它们的作用不 ...

大概明白了,谢谢你们~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马