java中构造器(Constructor)

转载 2012年03月27日 16:57:02

大部分内容转自:http://tech.it168.com/j/2006-05-18/200605181021879.shtml       

       构造器是一个创建对象时被自动调用的特殊方法,为的是初始化。构造器的名称应与类的名称一致。

       当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null.

       构造器可以改变这种默认的初始化。

       构造器的作用:是创建java对象的重要途径,是不是说构造器完全负责创建java对象?

       答:是创建java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不是完全由构造器负责创建的。

        首先要注意的是Java的构造器并不是函数,所以他并不能被继承,这在我们extends的时候写子类的构造器时比较的常见,即使子类构造器参数和父类的完全一样,我们也要写super就是因为这个原因。

 
  构造器的修饰符比较的有限,仅仅只有public private protected这三个,其他的例如任何修饰符都不能对其使用,也就是说构造器不允许被成名成抽象、同步、静态等等访问限制以外的形式。
 
  因为构造器不是函数,所以它是没有返回值的,也不允许有返回值。但是这里要说明一下,构造器中允许存在return语句,但是return什么都不返回,如果你指定了返回值,虽然编译器不会报出任何错误,但是JVM会认为他是一个与构造器同名的函数罢了,这样就会出现一些莫名其妙的无法找到构造器的错误,这里是要加倍注意的。
 
  在我们extends一个子类的时候经常会出现一些意想不到的问题,我在这里说一些和构造器有关的。

首先说一下Java在构造实例时的顺序(不讨论装载类的过程)。

 
  构造的粗略过程如下:
 
  1、分配对象空间,并将对象中成员初始化为0或者空,java不允许用户操纵一个不定值的对象。
 
  2、执行属性值的显式初始化(这里有一点变化,一会解释,但大体是这样的)。
 
  3、执行构造器
 
  4、将变量关联到堆中的对象上

 介绍一下准备知识,以备一会来详细说明这个的流程。

 

  this() 、super()是你如果想用传入当前构造器中的参数 or 构造器中的数据调用其他构造器或者控制父类构造器时使用的,在一个构造器中你只能使用this()或者super()之中的一个,而且调用的位置只能在构造器的第一行,在子类中如果你希望调用父类的构造器来初始化父类的部分,那就用合适的参数来调用super(),如果你用没有参数的super()来调用父类的构造器(同时也没有使用this()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误。

     注意此处,我们经常在继承父类的时候构造器中并不写和父类有关的内容,此时如果父类没有缺省构造器,就会出现编译器添加的缺省构造器给你添麻烦的问题了哦。

 

public class Manager extends Employee {
  private String department;
  public Manager(String name, double salary, String dept)
 {
   super(name, salary);
   department = dept;
 }
 public Manager(String n, String dept) {
   super(name);
   department = dept;
 }
 public Manager(String dept) {
  // 这里就没有super(),编译器会自动地添加一个空参数的缺省super构造器,此时如果Employee类中没有空参数的缺省构造器,那就会导致一个编译错误
   department = d;
 }
 }

Java 基础——构造器和方法的区别

构造函数(构造器)是一种特殊的函数。其主要功能是用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。构造函数与类名相同,可重载多个不同的构造函数。在JA...
  • zqixiao_09
  • zqixiao_09
  • 2016年01月20日 17:45
  • 5749

JAVA菜鸟入门篇 - Java构造器 (十一)

构造器     又称为 构造方法,constructor    构造器用于构造该类的实例。    格式如下:    [修饰符]类名(形参列表){   //n条语句    } ...
  • promise_LOVE
  • promise_LOVE
  • 2015年01月07日 09:38
  • 1913

Java 构造器(定义,作用,原理)

首先要注意的是Java的构造器并不是函数,所以他并不能被继承,这在我们extends的时候写子类的构造器时比较的常见,即使子类构造器参数和父类的完全一样,我们也要写super就是因为这个原因。 构造器...
  • lb_383691051
  • lb_383691051
  • 2015年06月21日 15:10
  • 1416

java中的构造器

构造器的语法格式的详细说明如下: 修饰符: 修饰符可以省略,也可以是public,protected,private其中之一 构造器名:构造器名必须和类名相同 形参列表:和定义方法形参列表的格式完全相...
  • u012989656
  • u012989656
  • 2015年07月30日 19:27
  • 836

java学习基础篇(二)构造器的定义与作用

本科时曾自学过一段时间的Java,上研之后就基本没再碰过了,现在想要重新捡起来,所以把这些整理一下,主要是用来督促自己的学习,该资料整理来源于尚硅谷-佟刚的教学视频,仅用来学习。构造方法的特征 - ...
  • u014120554
  • u014120554
  • 2016年06月16日 20:58
  • 3356

java构造器小结

当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null.       构造器可以改变这种默认的初始化。     ...
  • renyuanchunby
  • renyuanchunby
  • 2011年11月12日 10:12
  • 14471

java中构造器和方法的区别

(1)功能和作用的不同    构造器是为了创建一个类的实例。这个过程也可以在创建一个对象的时候用到:Platypus p1 = new Platypus(); 相反,方法的作用是为了执行java代码。...
  • yaoxy
  • yaoxy
  • 2009年06月27日 11:08
  • 8248

Java中的构造器(构造方法)的调用

注意:(1)在子类中的缺省构造器可以调用父类的缺省/非缺省构造器,在调用父类的缺省构造器时,不用写super关键字直接可以调(因为super是隐式的);在调用父类的非缺省构造器时,必须用super(参...
  • zhu_apollo
  • zhu_apollo
  • 2007年11月09日 11:17
  • 4688

java构造器和this总结

public class Tree { //这是构造器,没有任何返回值 //构造器只能被构造器调用,不能被其他方法调用 public Tree() { //this调用构造器 //th...
  • u012922219
  • u012922219
  • 2016年09月25日 22:32
  • 632

java中的构造器与普通函数的区别

摘要 要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。 原作者:Robert Nielsen 原站:www.jav...
  • turbo_mars_yang
  • turbo_mars_yang
  • 2015年12月19日 21:37
  • 693
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中构造器(Constructor)
举报原因:
原因补充:

(最多只允许输入30个字)