构造方法(构造器)
    是一种特殊的方法,该方法只有功能:构造对象
    特点:
        1.没有返回值
        2.构造方法的名称一定和类名一致
        3.不能在构造方法中写return
    java虚拟机会默认对每一个类提供空的构造方法,但是一旦自己提供了其他有参的构造方法,系统不会再提供无参构造方法
    当提供了其他构造方法,一般会在类中提供无参构造方法
    当你要创建对象时,先要看类的构造方法
    在java中,"初始化"和"分离"捆绑在一起,两者不能分离

摘自<java编程思想>中的代码说明
    
    1.空构造方法

  1. class Rock{
  2. Rock(){ //无参构造方法
  3. System.out.println("Rock ");
  4. }
  5. }
  6. public class SimpleConstructor(){
  7. public static void main(String[] args){
  8. for(int i=0;i<5;i++){
  9. new Rock();
  10. }
  11. }
  12. }
  13. /* 结果:Rock Rock Rock Rock Rock */

无参构造方法的作用是创建一个"默认对象",如果自己的类中没有构造方法,则编译器会自动创建一个默认构造方法,如果已经定义,则不会再自动创建
    2.有参构造方法

  1. class Bird{
  2. //构建对象的时候,直接给属性赋值,通过有参的构造方法
  3. Bird(int i){}
  4. Bird(double i){}
  5. }
  6. public class SimpleConstructor(){
  7. public static void main(String[] args){
  8. //Bird bird1 = new Bird(); //没有默认构造方法
  9. Bird bird2 = new Bird(1);
  10. Bird bird3 = new Bird(1.0);
  11. }
  12. }

行8 bird1会报错,没有找到匹配的构造方法
    3.构造方法的初始化
        在类的内部,若变量全都是非static变量,则变量定义的先后顺序决定初始化的顺序,若有static变量,则先初始化static变量。(变量初始化顺序取决于有无static)
        即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。

  1. class House{
  2. Window(int marker){System.out.println("Window( "+marker+")");}
  3. }
  4. class House{
  5. Window w1 = new Window(1); //在构造器之前定义
  6. House(){
  7. System.out.println("House");
  8. w3 = new Window(33);
  9. }
  10. Window w2 = new Window(2); //在构造器之后定义
  11. public void f(){System.out.println("f()");}
  12. Window w3 = new Window(3); //最后定义
  13. }
  14. public class OrderOfInitialization{
  15. public static void main(String[] args){
  16. House h = new House();
  17. h.f();
  18. }
  19. }
  20. /* Window(1) Window(2) Window(3) House() Window(33) f() */  

w3这个引用会被初始化两次:一次是在调用构造器前,一次是在调用期间(第一次引用的对象将被丢弃,并作为垃圾回收)
        
    4.构造方法中调用构造方法
        在文章"java this关键字"中详细说明

5.出现继承关系时的构造方法
        子类中所有的构造方法都会默认访问父类空的构造方法
        一旦建立继承关系,子类就会在自己的构造方法中默认调用父类去参构造方法

  1. public class 继承05{
  2. public static void main(String[] args){
  3. Zi zi = new Zi();
  4. }
  5. }
  6. class Fu{
  7. public int i;
  8. public Fu(){
  9. System.out.println("父类的构造方法...");
  10. }
  11. public Fu(int i){
  12. System.out.println("父类带参的构造方法...");
  13. this.i = i;
  14. }
  15. }
  16. class Zi extends Fu{
  17. public Zi(){
  18. //super(); //隐式语句 不写编译器也会自动加上
  19. //super(10);
  20. System.out.println("子类的构造方法...");
  21. }
  22. }
  23. /*
  24. 父类的构造方法...
  25. 子类的构造方法...
  26. */

行18中编译器会自动调用super();,自己加上也没错,super() --> 调用父类空的构造方法
    行19 super(10) --> 调用父类带参的构造方法

java 构造方法详解的更多相关文章

  1. “全栈2019”Java第五十七章:多态与构造方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. “全栈2019”Java第五十章:继承与构造方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. Java虚拟机详解----JVM常见问题总结

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. Java面向对象详解

    Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...

  5. java 泛型详解(普通泛型、 通配符、 泛型接口)

    java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...

  6. java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

    对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. java泛型详解 1. 概述 泛型在 ...

  7. java关键字(详解)

    目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...

  8. 【转】java 泛型详解

    java 泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. java泛型详解 ...

  9. Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

随机推荐

  1. 小程序之带参数跳转到tab页

    wx.switchTab({ url: '../../message/message/message', }) //wx.switchTab url不能带参数 解决方法⬇️ (紫色表示非固定需要自己更 ...

  2. 兼容ie8的前端下载方法

    背景:在xp系统上 ie8浏览器的下载需求,后端返回资源路径. 方法:谷歌下采用aDown下载,ie采用window.open 触发下载,如果不能自动自动下载,采用execCommand(" ...

  3. 第 10 章 容器监控 - 079 - 监控利器 sysdig

    sysdig 是一个轻量级的系统监控工具,同时它还原生支持容器. 通过 sysdig 我们可以近距离观察 linux 操作系统和容器的行为. Linux 上有很多常用的监控工具,比如 strace,t ...

  4. vue 用huilder打包APP时,安卓按返回键就退出App改为按两次再退出App

    做vue项目时,用Hbuilder打包APP,在安卓下按返回键就是退出了APP,百度了下.都是使用到MUI来解决的,自己也记录下. 在main.js里面引入mui.js并使用. import mui ...

  5. oracle创建删除表空间

    create [undo|temporary] tablespace orcp datafile|tempfile 'E:\orcle\oracleBaseDir\oradata\orcp\orcp. ...

  6. 后缀html和htm文件的区别

    后缀html和htm文件的区别: (1)如果一个网站有index.html和index.htm,默认情况下,优先访问.html. (2).htm后缀是为了兼容以前的dos系统8.3的命名规范

  7. 2015-10-27 C#3

    三.字符串拼凑stringbuilder stringbuilder sb= new stringbuilder(); sb.append("aaa"); sb.append(&q ...

  8. Node.js知识点总结

    1. 回调函数 当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数.但是有些库函数(library function)却要求应用先传 ...

  9. C# MethodInvoker委托的使用

    一.MethodInvoker是什么? MethodInvoker 表示一个委托,该委托可以执行托管代码中声明为void且不接受任何参数的任何方法.在对控件的 invoke 方法进行调用时或需要一个简 ...

  10. Ceres Solver 入门稍微多一点

    其实ceres solver用了挺多的,可能是入门不精,有时候感觉感觉不理解代码上是怎么实现的,这次就通过ceres的官网仔细看了一些介绍,感觉对cpp了解更好了一些. 跟g2o的比较的话,感觉cer ...