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面试指南>仓库,更多精彩内容请到我的仓库里查 ...
随机推荐
- extract method
函数 简短,命名良好 函数名描述的是做什么 而不是怎么做 行数过高的代码中 将一大段做一个事的代码提取到独立的method 中 高层函数直接引用. 创建新函数 将提炼的代码平移到目标函数中 检查是否引 ...
- Python自学:第三章 倒着打印列表
# -*- coding: GBK -*- #reverse: 相反的 cars = ["bmw", "audi", "toyota", & ...
- LeetCode--027--移除元素(java)
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...
- C# FTP操作类的代码
如下代码是关于C# FTP操作类的代码.using System;using System.Collections.Generic;using System.Text;using System.Net ...
- HIT2019春软件构造->Git&Github学习笔记
由于软件构造课程需要,学习使用git,以下作为学习笔记. 一.Git初始化及仓库创建和操作 1.基本信息设置(设置签名) 命令 项目级别/仓库级别:仅在当前本地库范围内有效 git ...
- lockable JS function,解锁操作之前,不能重复操作
(function () { var ed = []; window.Lockable = function (lockF, options) { if (!arguments.length) { v ...
- element-ui <el-date-picker> 回显格式 yyyy-MM-dd 传值格式 yyyyMMddHHmmss
<template> <!-- 需求:使用 <el-date-picker> 日期插件 前端显示2018-10-22 后台需要传时间戳,对这个日期插件不熟悉,当时搞了好长 ...
- Android平台上的Aplay与TinyAlsa移植使用
ALSA是高级Linux声音架构.提供了一系列音频的逻辑接口,包括PCM.CONTROL等.这些,不影响它的使用,了解一下就可以. 在Android设备上,linux 2.x的版本,要控制录制播放音频 ...
- 相似的RGB颜色——算法面试刷题3(for google),考察二分
在本题中,每个大写字母代表从“0”到“f”的一些十六进制数字. 红绿蓝三元色#AABBCC可以简写为#ABC. 例如,#15c是颜色#1155cc的简写. 现在,假设两种颜色#ABCDEF和#UVWX ...
- idea 中add configuration
记住:点击“+”号配置tomcat 第一步当然先得建一个web项目 1.file -> new -> project -Next -> Finish -项目建好了接下来就是配置了 - ...