java 构造方法详解
构造方法(构造器)
是一种特殊的方法,该方法只有功能:构造对象
特点:
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 构造方法详解的更多相关文章
- “全栈2019”Java第五十七章:多态与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十章:继承与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Java面向对象详解
Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...
- java 泛型详解(普通泛型、 通配符、 泛型接口)
java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...
- java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. java泛型详解 1. 概述 泛型在 ...
- java关键字(详解)
目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...
- 【转】java 泛型详解
java 泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. java泛型详解 ...
- Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
随机推荐
- 剑指offer 08:跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). public class Solution { public int ...
- leetcode02大数相加
惭愧惭愧,这道题居然卡了两天,犯了一堆错误,现在一一总结 错误 头一天我看给的测试用例误以为输入是数组,做了半天也无法输出链表的正确格式,后来把输入当成链表,才正确了 我没看到编辑器给了一套链表,自己 ...
- Testlink与MantisBT集成
Testlink与MantisBT集成 关于两者集成的文章网上有很多,但是有些文章可能是作者写的时候自己不理解或有纰漏,有些文章写得是不够详细导致在配置中遗漏什么导致不成功.经过一天的不停尝试,终于完 ...
- Left Join on 多条件查询时,条件过滤的问题
例如:A Left Join B on (...) on 后面的条件是对B数据的过滤,如果要对A的数据或者联合之后的数据集进行过滤,则要把过滤条件放在where子句中
- Hadoop之运行环境搭建
一.虚拟机环境准备 1.克隆虚拟机 2.修改克隆虚拟机静态IP 3.修改主机名 4.关闭防火墙 5.创建hadoop用户 6.配置hadoop用户具有root权限 7.在/opt 目录下创建文件夹 1 ...
- Log4net详细说明
1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...
- [English] Time complexity wise this solution is the best among all
Time complexity wise this solution is the best among all, we can do all operations in O(1) time. 时间复 ...
- Activity的介绍
Activity类是Android应用程序的重要组成部分,activity的启动和组合方式是平台应用程序模型的基本组成部分.Android系统通过调用与其生命周期的特定阶段相对应的特定回调方法来启动A ...
- Vue route的使用
1.route.js文件 import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const router = ne ...
- Jieba库使用和好玩的词云
jieba库的使用: (1) jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式.全模式和搜索引擎模式,下面是三种模式的特点. 精确模式:试图将语句最精 ...