1、public className(){}。

2、名称与类名相同,无返回值,无返回类型,void也不行。(就是上边的形式,除了可以有参数)。

3、有0个或多个参数。

4、每个类都至少有一个constructor。如果没有显示的写,系统会默认构造一个方法体为空的空参构造函数。如果类有显示声明的构造函数(不一定是空参的),那么系统就不会默认构造一个空参constructor,进而若声明的函数正好不是空参的,那么该类就没有空参构造函数,而空参构造函数始终是一个类的默认构造函数)。

5、每个类可以有多个constructor,即重载,其参数不同。默认的constructor是空参构造函数。

6、constructor用于new一个新的对象。

7、继承。子类不会继承父类constructor(因为此时继承下来的类名和子类类名不同),但是出于尊重,在initialize子类之前,必须先initialize父类(下边第二条)

  1)子类继承父类,子类构造器中,如果要显示的调用父类构造器,必须在其第一行中写super(),eg:

public class Son{
public Son(<参数>){
super(<参数>);
...
}
}

  2)子类继承父类,子类构造器中如果没有显示的调用父类构造器,那么我们在调用执行子类构造器时,系统会默认先调用父类默认构造器(空参构造器),即会在子类构造器的第一行默认加上super()。如果父类显示声明了带参构造器,而没有声明空参构造器,那么编译器就会报错了。 即不管怎样,都是要先执行父类的构造函数,以把父类的东西继承下来,然后才执行子类本身。 另外这个调用是从父层往下一层一层调用的,即先调用执行父父层的默认构造器,然后父层的默认构造器,然后子类构造器,依此类推。eg:

 public class Grandfather {  

      public Grandfather(){
System.out.println("This is Grandfather!");
} public Grandfather(String s){
System.out.println("This is Grandfather"+s);
}
} public class Father extends Grandfather { public Father(){
System.out.println("This is Father!");
}
public Father(String s){
System.out.println("This is Father!"+s);
}
} public class Son extends Father { public Son(){
System.out.println("This is Son!");
}
public Son(String s){
System.out.println("This is Son"+s);
}
} public class Construct { /**
* @param args
*/
public static void main(String[] args) { Son son = new Son();
System.out.println("**********************************");
Son son1 = new Son("**==**"); }
}

执行结果:

This is Grandfather!
This is Father!
This is Son!
**********************************
This is Grandfather!
This is Father!
This is Son**==**
从控制台打印的结果可以看出,当执行子类时,都是去找它的父类的默认的构造函数,先执行父类的构造函数,再执行子类的本身。

  针对以上情况,我们现在做个修改,改其中的一个类的代码如下:把Grandfather类显式写出的缺省构造函数注释掉:

 public class Grandfather {  

     //  public Grandfather(){
// System.out.println("This is Grandfather!");
// }
//
public Grandfather(String s){
System.out.println("This is Grandfather"+s);
}
}

  此时,Father类就会报错了。即子类没有显示调用的情况下,父类要么没有声明任何构造器,要么有一个显示声明的空参构造器。

  上述若想不报错,也可以在Father类中显示声明对父类构造器的调用:

 public class Father extends Grandfather {  

      public Father(){
super("**ss**");
System.out.println("This is Father!");
}
public Father(String s){
super(s);
System.out.println("This is Father!"+s);
} }

执行Construct.java

控制台输出为:

This is Grandfather**ss**
This is Father!
This is Son!
**********************************
This is Grandfather**ss**
This is Father!
This is Son**==**

java 构造函数的更多相关文章

  1. java构造函数修饰符

    java 构造函数,可以被访问修饰符修饰,而不能被特殊修饰符修饰:(在编译器经过测试) 访问修饰符: public (最常用,其他类的任何位置都可以访问) protected(能够在同一包中被子类访问 ...

  2. JAVA构造函数(方法)

    一.什么是构造函数 java构造函数,也叫构造方法,是java中一种特殊的函数.函数名与相同,无返回值. 作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法. 在现 ...

  3. PHP与JAVA构造函数的区别

    早期的PHP是没有面向对象功能的,但是随着PHP发展,从PHP4开始,也加入了面向对象.PHP的面向对象语法是从JAVA演化而来,很多地方类似,但是又发展出自己的特色.以构造函数来说,PHP4中与类同 ...

  4. java构造函数,java的静态块理解

    今天我遇到这样的代码块,理解甚久,现在理解了,举一些例题给你看看 先创建一个One类: package accp.com;/** * 其中一个类 * @author xuxiaohua * */pub ...

  5. java 构造函数内部的多态方法 完全剖析

    我们先来看一个例子,如果你读过<java编程思想>的话 应该会有印象 package com.test.zj; public class PolyConstructors { public ...

  6. java构造函数使用方法总结

    使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回 ...

  7. JAVA构造函数简析

    构造函数是java新建对象的一种手段 构造函数可以重载 如果一个类中有多个域,那么就可能需要多个构造函数.这时候,使用重载就可以了 构造函数中this和super的使用 this:(1)this用于本 ...

  8. 关于java构造函数,静态代码块,构造代码块,和普通代码块相关总结(一)

    构造函数.构造代码块和静态代码块容易混淆,它们的执行条件和执行顺序也常常容易犯迷.这里就针对这些问题说一下我个人的一些理解,顺便对这部分内容做个小结. 一.构造函数 格式:类名(参数1,参数2,-){ ...

  9. [ Java学习基础 ] Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...

随机推荐

  1. Hibernate的回调与拦截

    在Hibernate中,有两种方式可以捕获实体对象的GRUD操作并执行相应的处理 Hibernate回调(org.hibernate.classic.Lifecycle接口): //Provides ...

  2. 关于Java获取系统信息

    本文部分转载自: http://www.cnblogs.com/wuhenke/archive/2011/11/19/2255400.html 我总结的相关类似博客:http://www.cnblog ...

  3. android代码片段二

      1.Android拦截短信 一.AndroidManifest.xml <uses-permission android:name="android.permission.RECE ...

  4. hdu 3938 Portal

    Portal Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Sub ...

  5. java性能

    一.关于性能的基本知识  1.性能的定义  在我们讨论怎样提高Java的性能之前,我们需要明白“性能“的真正含义.我们一般定义如下五个方面作为评判性能的标准.  1) 运算的性能----哪一个算法的执 ...

  6. Linux 命令 - uniq: 通知或忽略重复行

    给定一个已排好序的文件,uniq 会删除重复行并将结果输出到标准输出中.uniq 通常与 sort 结合使用以删除 sort 输出内容中的重复行. 命令格式 uniq [OPTION]... [INP ...

  7. Linux 命令 - ps: 显示当前进程的快照

    命令格式 ps [options] 实例 a) 查看所有的进程. huey@huey-K42JE:~$ ps aux | head USER PID %CPU %MEM VSZ RSS TTY STA ...

  8. SoftReference

    本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用    在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说 ...

  9. NodeJS服务器退出:完成任务,优雅退出

    上一篇文章,我们通过一个简单的例子,学习了NodeJS中对客户端的请求(request)对象的解析和处理,整个文件共享的功能已经完成.但是,纵观整个过程,还有两个地方明显需要改进: 首先,不能共享完毕 ...

  10. linux之Gcc使用

    本篇文章摘自 http://blog.csdn.net/ljzcom/article/details/7213101 对于Gcc自带的很多命令行,只有具体编程里面用到了或者看到别人真真用到的,用的目的 ...