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

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

 class Rock{
Rock(){ //无参构造方法
System.out.println("Rock ");
}
}
public class SimpleConstructor(){
public static void main(String[] args){
for(int i=0;i<5;i++){
new Rock();
}
}
}
/* 结果:Rock Rock Rock Rock Rock */

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

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

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

 class House{
Window(int marker){System.out.println("Window( "+marker+")");}
}
class House{
Window w1 = new Window(1); //在构造器之前定义
House(){
System.out.println("House");
w3 = new Window(33);
}
Window w2 = new Window(2); //在构造器之后定义
public void f(){System.out.println("f()");}
Window w3 = new Window(3); //最后定义
}
public class OrderOfInitialization{
public static void main(String[] args){
House h = new House();
h.f();
}
}
/* Window(1) Window(2) Window(3) House() Window(33) f() */  

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

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

 public class 继承05{
public static void main(String[] args){
Zi zi = new Zi();
}
}
class Fu{
public int i;
public Fu(){
System.out.println("父类的构造方法...");
}
public Fu(int i){
System.out.println("父类带参的构造方法...");
this.i = i;
}
}
class Zi extends Fu{
public Zi(){
//super(); //隐式语句 不写编译器也会自动加上
//super(10);
System.out.println("子类的构造方法...");
}
}
/*
父类的构造方法...
子类的构造方法...
*/

行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. ssh 框架整合事,使用注解,action提示找不到

    There is no Action mapped for namespace [/] and action name [/select] associated with context path [ ...

  2. Java中的各种bean对应的意义(VO,PO,BO,QO, DAO,POJO,DTO)

    VO(value object) 值对象 通常用于业务层之间的数据传递,用 new 关键字创建,由 GC 回收的,和 PO 一样也是仅仅包含数据而已.但应是抽象出的业务对象 , 可以和表对应 , 也可 ...

  3. js可拖拽的div

    function chatDrag(div1) { div1.onmousedown = function (ev) { var oevent = ev || event; var distanceX ...

  4. ArcGIS Pro开发Web3D应用(3)——Server/Portal授权服务开发

    1.整体环境搭建完成 WebAdaptor.DataStore.Portal for arcgis.arcgis server.arcgis pro都成功部署安装,不管是同服务器还是不同服务器,最好做 ...

  5. lua 5.3.5 安装/初体验

    安装 官网http://www.lua.org/start.html 参考  https://blog.csdn.net/qq_23954569/article/details/70879672 cd ...

  6. 自学PYTHON分享 --基础1

    1.python2和python3的区别: 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码. 2.pyt ...

  7. Elinks介绍

    Elinks是基于文本的免费浏览器,用于Unix及基于Unix的系统.Elinks支持 HTTP,HTTP Cookies以及支持浏览Perl和Ruby脚本.也很好的支持选项卡浏览.最棒的是它支持鼠标 ...

  8. 关于隐式创建vue实例实现简化弹出框组件显示步骤

    我们在使用vue写alert组件的时候,经常是定义了一个alert.vue,然后引入alert.vue,然后配置参数等等,非常繁琐,那有没有一种方式可以像window.alert("内容&q ...

  9. ajax请求多次刷新

    难道只能设置定时器每隔一秒通过 Ajax 向后台请求数据来实现吗?1.nodejs的 http://socket.io 支持上述 李宏训 所说的三种方式,另外还支持 Flash Socket.隐藏IF ...

  10. JDK8下Object类源码理解

    JDK8中Object类提供的方法: package java.lang; /** * Class {@code Object} is the root of the class hierarchy. ...