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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风云 中级黑马   /  2013-6-3 13:32  /  1751 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

构造函数和构造函数代码块是怎么回事,也详细越好

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

12 个回复

倒序浏览
构造函数是为对应的对象初始化的,然而构造代码块是为所有对象初始化的,构造代码块优先于构造函数执行。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
构造函数  与类名相同 不用定义返回值类型 不可以写return语句  可以被私有
                定义的实物具有特性时,定义构造函数
                给对象进行初始化   特性内容
        当一个类中没有定义构造函数时,
那么系统会默认给该类加入一个空参数的构造函数。
构造函数时在对象一建立就运行,给对象初始化。
一般方法是对象调用菜执行,是给对象添加对象具备的功能。
一个对象建立,构造函数只运行一次。     一般方法可以被调用多次。
构造代码块: 共性内容
class A{
{
构造代码块;
}
}给对象进行初始化,优先于构造函数执行。  构造函数重载实现给对象初始化
构造代码块是给所有对象进行统一初始化。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
特点:

  1.函数名与类名相同

  2.不用定义返回值类型

  3.不用写rutern语句

作用:

可以用于给对象进行初始化

对象一建立  就会调用与之对应的构造函数;



什么时候定义构造函数?

  当分析事物时,该事物存在具备一些特性或者行为。那么将这些内容定义在构造函数中。

构造代码块:

  作用:给对象进行初始化

            对象一建立就运行,而且优先于构造函数执行

与构造函数区别:

    构造代码块是给所有对象进行统一初始化。

    构造函数是给对应的的对象进行初始化。



构造代码块中定义的是不同对象共性的初始化内容。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
简单的说就是 构造函数是给对象初始化,而构造函数代码块就是给构造函数初始化
回复 使用道具 举报
本帖最后由 杨兴庭 于 2013-6-3 18:09 编辑

构造方法具有以下几个要素:

  1.构造方法与类同名,首字母大写

  2.构造方法没有返回值,也不需要void修饰

  3.构造方法的作用 :a)能够初始化类中的属性  b)能够创建出类的对象

  4.构造方法可以重载,构造方法的默认修饰符是public,也可以private

5.一个类中如果我们没有定义构造方法,其实编译器会自动加上一个无参数的构造方法(隐式构造方法)

  6.如果在类中我们自定义一个构造方法(显式构造方法),默认的隐式构造方法将会失效

  7.构造方法(函数)可以传递参数(有参数的构造方法),通过不同的参数可以创建不同的对象

  8.类中属性赋初值:a)构造方法      b)Setter 设置器   c)定义时候赋初值

 

   9.类可以选择某一个构造方法创建其对象


10. 构造方法的重载实现定义多个不同对象


11.调用本类下的构造方法用this.(), 调用父类中的构造方法用Super.()



例子:

我们定义人(people)这个类,该类属性name、sex、 age三个私有属性,新建 zhangsan类,

通过people类构造方法确定张三这个对象,(性别男,年龄20)。代码如下:

package Prac;


public class People {

/*声明属性*/

  private String name;  //姓名

  private int age;     //年龄

  private String sex;  //性别

  
/*构造方法*/

public People(String name, int age, String sex) {

super();

this.name = name;

this.age = age;

this.sex = sex;
}


/*setter、getter方法*/

public String getName() {

return name;

}
public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}
public void setAge(int age) {

this.age = age;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

  
}







public class Zhangsan {


/**

* 张三类

*

*/

public static void main(String[] args) {


People zhangsan=new People("张三",20,"男");  //调用people类内构造方法给people类内私有属性赋值


System.out.println("我的名字叫"+zhangsan.getName()+"\n我的年龄是:"+zhangsan.getAge()+"\n性别:"+zhangsan.getSex());


}


}





打印结果:



     我的名字叫张三

     我的年龄是:20

     性别:男

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
我们对事物进行描述的过程中,形成了类。而描述的这个事物往往都有一些固定的(默认的)初始属性,如:人一出生就有年龄,学生一入校就有了 xxx学校的学生这个属性,

将这些“只要对象被创建就默认存在的东西”抽取,就形成了构造函数。

但是,又发现这些默认存在的东西中,还有一些是无论创建什么样子的对象都会有的。比如:同一个学校的学生,他们的所属学校是一定固定的。木材厂生产的产品,肯定主要都是木制的。于是,将这些所有对象共有的东西进一步抽取就形成了构造代码块。

一言以蔽之:构造代码块是给所有的对象进行统一初始化,构造函数是给特定的对象进行初始化,构造代码块优先于构造函数加载
回复 使用道具 举报
构造函数的一些特征:
  |-- 函数名与类名相同,不用定义返回值类型,不可以写return语句
  |-- 对象一建立就会调用与之相对应的构造函数
  |-- 当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数
  |-- 如果我们手动写了构造方法,自动添加的空参数的构造 函数就没有了
  |-- 作用,给对象初始化,当new 对象的时候,我们就想让对象中的成员变量有值,就需要使用构造方法
  |-- 创建对象的时候,只被调用一次,仅仅一次
  |-- 多个构造函数是以重载的形式存在的。

另:
构造函数和一般函数的区别:
构造函数是对象一建立就运行,给对初始化。
而一般方法是被对象调用才执行,给对象添加对象具备的功能
一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次
       
什么时候定义构造函数?
当分析事物时,该事物存在就具备一些特性或者行为,那么
将这些内容定义在构造函数中

构造代码块:        给所有对象进行统一初始化,对象一建立就运行,而且优先于构造函数执行
构造函数与构造代码块的区别:构造函数是给对应对象进行初始化构造代码块是给所有对象进行统一初始化
构造代码块中定义的是不同对象共性的初始化内容

回复 使用道具 举报

构造方法具有以下几个要素:

本帖最后由 许聪聪 于 2013-6-3 22:57 编辑


一。构造方法具有以下几个要素:

  1.构造方法与类同名

  2.构造方法没有返回值,也不需要void修饰

  3.构造方法的作用 :a)能够初始化类中的属性  b)能够创建出类的对象

  4.构造方法可以重载,构造方法的默认修饰符是public,也可以private

在继承中的构造方法:
一。构造方法
     1.在运行子类构造方法之前,先运行父类构造方法
     2.子类的构造方法第一行,有个个隐士代码 super();
    3.万变不离其宗,子类所有的构造方法,都默认访问父类空参构造
    4.访问父类有参数的构造方法,需要我们手动写super(参数)
    5.注意的一点是:构造方法可以被override(重写)吗?  NO
二。构造代码块:      
    给所有对象进行统一初始化,对象一建立就运行,而且优先于构造函数执行
构造函数与构造代码块的区别:
三。  构造函数是给对应对象进行初始化构造代码块是给所有对象进行统一初始化
构造代码块中定义的是不同对象共性的初始化内容


回复 使用道具 举报
楼主如果问题以解决,请结贴。。
回复 使用道具 举报
构造函数与构造代码块。
楼主:
1、二者虽然名字看着相近,但没什么关系。
2、构造函数名称与类名一样,分两种情况
     一:默认的,即类里的构造函数不写,由系统默认的。
     二:重载的,即人为给构造函数主体添加代码块。
3、构造代码块是类中的由{}括起来的代码块
   class People
     {
           {
                  Sysytem.out.println("我是构造代码块,我在类加载时执行");
            }

             public static void main(String[] args)
             {
             }
      }
回复 使用道具 举报
首先构造函数,与类名相同,没有返回值,当然就不用return了,还可以被私有!当一个类中没有定义构造函数时,系统会默认添加一个本类空参数的构造函数,如果我们在类中定义了构造函数,那么系统自定义的空参构造就没有了.构造函数是给对象初始化用的,对象一旦建立,构造函数就运行了.且只运行一次!
构造代码块是给类中多有对象初始化用的,它优先于构造函数被执行!



一个对象建立,构造函数只运行一次。     一般方法可以被调用多次
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马