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基础之构造器Constructor

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 构造器用来确保每个对象都会得到初始化。当对象被创建时,如果该类具有构造器,java就会...

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

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

显示调用和隐式调用

首先动态库分为显示调用和隐式调用,这个的区别呢,显示调用需要Loadlibray和freelibrary,隐式调用不需要Loadlibrary和freelibrary,只是需要导入相关的lib文件,因...

java构造器小结

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

Java 三大特性 —— 多态

Java中多态性的实现   一、什么是多态 1.面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 2.多态的定义:指允...

SQL数据库基本操作语句

一、数据库及数据库表定义   1、创建基本表    create table ([列级完整性约束条件]                &#...

程序员的八重境界

看到一篇有趣的文章The Eight Levels of Programmers。以前似乎看过不少这种程序员的多少个级别、境界,但这篇语言很风趣,而且分类比较细化,让人觉得挺合情合理、无法反驳的。绝大...
  • dc_726
  • dc_726
  • 2017-08-31 04:58
  • 25080

在DataTable中执行Select("条件")后,返回DataTable的方法

private DataTable GetNewDataTable(DataTable dt,string condition) {  DataTable newdt = new DataTable(...

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

构造器     又称为 构造方法,constructor    构造器用于构造该类的实例。    格式如下:    [修饰符]类名(形参列表){   //n条语句 &...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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