构造方法(构造器)
    是一种特殊的方法,该方法只有功能:构造对象
    特点:
        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. (js) 字符串和数组的常用方法

    JS中字符串和数组的常用方法 JS中字符串和数组的常用方法 js中字符串常用方法 查找字符串 根据索引值查找字符串的值 根据字符值查找索引值 截取字符串的方法 字符串替换 字符串的遍历查找 字符串转化 ...

  2. error LNK1169 找到一个或多个多重定义的符号的解决方法

    问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. A.h是头文件,其中声明了三个变量a1.a2. a3. B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件.B.cpp ...

  3. vue--vant组件库Dialog弹出框

    安装vant UI框架: cnpm install vant –-save-dev 导入组件-在main.js里: import Vant from 'vant'; import'vant/lib/v ...

  4. c#领域驱动设计

    代码是个程序员都能写, 怎么的代码才是好的,   --------------------------------------------------------------------------- ...

  5. loadrunner 参数化取值方式详解

    参数化对话框中与参数取值方式有关的区域如下: 改变参数化的取值方式,关键在于Select next row和Update value on这两个选项. Select next row包括以下选项: S ...

  6. Active Record Query Interface 数据查询接口(界面) 看到第8节。

    http://guides.rubyonrails.org/active_record_querying.html ✅How to find records using a variety of me ...

  7. mysql学习之check无效的解决及触发器的使用

    SQL的约束种类: 一.非空约束 not null 二.唯一约束 unique 三.主键约束 四.外键约束 五.check约束 该约束可用于列之间检查语义限制的,实际应用过程中非常常用!! 然鹅,My ...

  8. requests库/爬取zhihu表情包

    先学了requests库的一些基本操作,简单的爬了一下. 用到了requests.get()方法,就是以GET方式请求网页,得到一个Response对象.不加headers的话可能会400error所 ...

  9. Python----unittest discover()方法与执行顺序

    一.Unittest discover()可以根据不同的功能创建不同的测试文件,甚至是不同的测试目录,测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,让整体结构更加清晰一般是通过 ...

  10. Json 数组传值

    1. var _content = {}; _content[_title] = _oldValue + ' -- > ' + statusVal; 2. var eventData = { T ...