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面试指南>仓库,更多精彩内容请到我的仓库里查 ...
随机推荐
- 小程序之带参数跳转到tab页
wx.switchTab({ url: '../../message/message/message', }) //wx.switchTab url不能带参数 解决方法⬇️ (紫色表示非固定需要自己更 ...
- 兼容ie8的前端下载方法
背景:在xp系统上 ie8浏览器的下载需求,后端返回资源路径. 方法:谷歌下采用aDown下载,ie采用window.open 触发下载,如果不能自动自动下载,采用execCommand(" ...
- 第 10 章 容器监控 - 079 - 监控利器 sysdig
sysdig 是一个轻量级的系统监控工具,同时它还原生支持容器. 通过 sysdig 我们可以近距离观察 linux 操作系统和容器的行为. Linux 上有很多常用的监控工具,比如 strace,t ...
- vue 用huilder打包APP时,安卓按返回键就退出App改为按两次再退出App
做vue项目时,用Hbuilder打包APP,在安卓下按返回键就是退出了APP,百度了下.都是使用到MUI来解决的,自己也记录下. 在main.js里面引入mui.js并使用. import mui ...
- oracle创建删除表空间
create [undo|temporary] tablespace orcp datafile|tempfile 'E:\orcle\oracleBaseDir\oradata\orcp\orcp. ...
- 后缀html和htm文件的区别
后缀html和htm文件的区别: (1)如果一个网站有index.html和index.htm,默认情况下,优先访问.html. (2).htm后缀是为了兼容以前的dos系统8.3的命名规范
- 2015-10-27 C#3
三.字符串拼凑stringbuilder stringbuilder sb= new stringbuilder(); sb.append("aaa"); sb.append(&q ...
- Node.js知识点总结
1. 回调函数 当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数.但是有些库函数(library function)却要求应用先传 ...
- C# MethodInvoker委托的使用
一.MethodInvoker是什么? MethodInvoker 表示一个委托,该委托可以执行托管代码中声明为void且不接受任何参数的任何方法.在对控件的 invoke 方法进行调用时或需要一个简 ...
- Ceres Solver 入门稍微多一点
其实ceres solver用了挺多的,可能是入门不精,有时候感觉感觉不理解代码上是怎么实现的,这次就通过ceres的官网仔细看了一些介绍,感觉对cpp了解更好了一些. 跟g2o的比较的话,感觉cer ...