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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈雪平 中级黑马   /  2012-12-16 12:41  /  2087 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天看到构造函数这一节,有点迷惑,到底什么是默认构造函数,是没有参数的构造函数么?不过默认的不是系统自动给的吗,既然本类都有构造函数了,还会给默认构造函数?实在有点想不通,求解惑!!

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 翁鹏 于 2012-12-16 13:43 编辑

如果你没有写任何构造函数,java编译器会给你自动加上一个无参数的构造函数。(你自己在代码里没有写任何构造函数的情况下)

如果你在代码里写了构造函数,不管是有参数的还是没有参数的,编译器就不会给你加那个无参数构造函数了。


编译器加的那个构造函数应该是这样的:
public ClassName()
{
        supur();                  //(这也是编译器默认加上的,你可以选择不写)
}

所以你也可以自己显示写一个这样的构造函数(再强调一遍:你自己写了构造函数,编译器就不会给你加默认的无参数构造函数了)

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
如果你不显示写构造函数的话,系统就会给类一个默认的不带参数的构造函数啊。如果你在代码中写明了构造函数的话,系统就以你写的构造函数为准,默认的不带参数的构造函数就没有了,除非你显示写了一个不带参数的构造函数。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
一个类中是必须要有构造函数的,在没有自定义的情况下会默认存在一个空参数的构造函数。
如果用户自定义了构造函数,不管定义的构造函数是不是空参数的,默认的空参数的构造函数就没有了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
默认的构造函数是指当创建一个类(A)时,该类(A)里面没有写构造函数,这时java虚拟机会自动为该类创建一个默认无参的构造函数,而在实例化(A a = new A())该类时,调用的是虚拟机提供的构造函数。而当你该类(A)指定无参(A a = new A())或者有参(A a = new A( String name, String score))的构造函数时,java虚拟机就不会为该类创建一个无参的构造函数,而在实例化该类时,调用的是自己写的构造函数。举个例子:

public class Seller{
   
   public static void maim(String[] args){
          Student student = new Student();//这时调用的是 java虚拟机提供的无参的构造函数
          /*
           * 这时不是调用 java虚拟机提供的无参的构造函数,因为Student1类已经有构造函数了,所以这里调用的是自己写的一个没带参数的构造函数
           */
          Student1 student1 = new Student1();
         
   }
   /**
    *没有构造函数的类
    */
  class Student {
        private String name;
        private String score;
      
        public String  getName(){
               return name;
        }
        public void setName(){
                this.name = name;
        }
        public String  getScore(){
               return score;
        }
        public void setScore(){
               this.score = score;
        }
   }
   /**
    *有构造函数的类
    */
  class Student1 {
        private String name;
        private String score;
      
        public String  getName(){
               return name;
        }
        public void setName(){
                this.name = name;
        }
        public String  getScore(){
               return score;
        }
        public void setScore(){
               this.score = score;
        }

        public Student(){ System.out.println("自己写的构造函数");}
        public Student(String name,String score){
               this.name = name;
               this.score = score;
        }
  }
}

希望对楼主有帮助


评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
那这个显示写出的无参数的构造函数,也能称为默认构造函数么?
回复 使用道具 举报
翁鹏 高级黑马 2012-12-16 15:09:40
7#
陈雪平 发表于 2012-12-16 15:03
那这个显示写出的无参数的构造函数,也能称为默认构造函数么?

不能,只有编译器给你加的的构造函数,才是默认的无参数构造函数。

自己显示写出来的就是普通的构造函数。

其实你自己思考一下为什么要加构造函数就能够理解得更加透彻。
回复 使用道具 举报
翁鹏 发表于 2012-12-16 15:09
不能,只有编译器给你加的的构造函数,才是默认的无参数构造函数。

自己显示写出来的就是普通的构造函数 ...

恩恩,谢谢啦,我会好好想想的!!
回复 使用道具 举报
javap编译时就会出现默认的构造方法

Test.jpg (565.17 KB, 下载次数: 72)

Test.jpg
回复 使用道具 举报
在写无参构造方法时覆盖默认的

test1.jpg (508.93 KB, 下载次数: 68)

test1.jpg
回复 使用道具 举报
默认构造方法,是方便实例化,类之间的调用 如下图:
要是没有默认构造方法,那么这个类也没有意义了
除了单例模式XX

TEST2.jpg (841.19 KB, 下载次数: 74)

TEST2.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马