博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中构造器(Constructor)
阅读量:5083 次
发布时间:2019-06-13

本文共 1596 字,大约阅读时间需要 5 分钟。

大部分内容转自:
       

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

       当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为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()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误。

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

 

[java]
 
  1. public class Manager extends Employee {  
  2.   private String department;  
  3.   public Manager(String name, double salary, String dept)  
  4.  {  
  5.    super(name, salary);  
  6.    department = dept;  
  7.  }  
  8.  public Manager(String n, String dept) {  
  9.    super(name);  
  10.    department = dept;  
  11.  }  
  12.  public Manager(String dept) {  
  13.   // 这里就没有super(),编译器会自动地添加一个空参数的缺省super构造器,此时如果Employee类中没有空参数的缺省构造器,那就会导致一个编译错误  
  14.    department = d;  
  15.  }  
  16.  }  
 

转载于:https://www.cnblogs.com/Jeremy2001/p/6834424.html

你可能感兴趣的文章
CP15 协处理器寄存器解读
查看>>
【codeforces 787B】Not Afraid
查看>>
【9111】高精度除法(高精度除高精度)
查看>>
【hihocoder 1312】搜索三·启发式搜索(普通广搜做法)
查看>>
JavaFX中ObservableValue类型
查看>>
杭电 1097 A hard puzzle
查看>>
[转载]INFORMIX锁机制及如何剖析其锁申辩(第二部门)
查看>>
Andriod-项目stymqjlb-学习笔记2-原型
查看>>
Web AppDomain
查看>>
JQuery创建规范插件
查看>>
AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
查看>>
Unity中Text渐变色,和Text间距
查看>>
P4932 浏览器
查看>>
Concurrency Kit 0.2.13 发布,并发工具包
查看>>
SQL Relay 0.50 发布,数据库负载均衡器
查看>>
Infinispan 5.3.0.Alpha1 发布
查看>>
设计模式学习笔记——原型模式(Prototype)
查看>>
算法普林斯顿
查看>>
Struts2之类范围拦截器和方法拦截器
查看>>
模型层(练习)
查看>>