Java中的构造方法[通俗易懂]

Java中的构造方法[通俗易懂]简述前言:【08-10】构造方法   定义:就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。   概念:构方法是一种特殊的“成员方法”     1,构造方法作用:(1)构造出来一个类的实例(2)对构造出来个一个类的实例(对象)初始化     2,构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有 …

大家好,又见面了,我是你们的朋友全栈君。

简述前言:

【08-10】构造方法
    定义:就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。
    概念:构方法是一种特殊的“成员方法”
         1,构造方法作用:(1)构造出来一个类的实例 (2)对构造出来个一个类的实例(对象)初始化
         2,构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有
         3,主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的
         4,类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法
         5,不能被static、final、synchronized、abstract和native修饰
         6,构造方法在初始化对象时自动执行,一般不能显式地直接调用.
            当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应
            完成构造函数的调用]
         7,构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动
               但是经常将他设计为进行各种初始化活动,比如初始化对象的属性
         8,构造代码块:
               (1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行
                  (2)构造代码块和构造函数的区别:
                       构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
         9,自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。
                  如果写了一个有参的构造方法,就一定要写无参构造方法。一般情况下,我们自定义的类都要手动给出无参构造方法。

 

关于使用:(以下转载)

constructor;构造函数。
  • 1

在创建对象的时候,对象成员可以由构造函数方法进行初始化。

new对象时,都是用构造方法进行实例化的;
例如;Test test = new Test("a");
 //Test("a");其中这个就是构造函数,“a”为构造方法的形参;
  •  
构造方法的方法名必须与类名一样。
构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
构造方法不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。
构造方法不能由编程人员调用,而要系统调用。
构造方法可以重载,以参数的个数,类型,或排序顺序区分。
  • 代码实现。

1;单个构造函数方法;’ 
这里写图片描述
这里写图片描述
这里写图片描述

2;多个构造函数方法 
(例子为;带参数与不带参数) 
这里写图片描述
Java中的构造方法[通俗易懂]
这里写图片描述

3;关于继承类的构造方法的调用; 
先看事例; 
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
我第一次看到结果的时候好惊讶的,怎么都调用了哈。看了知识点才知道。 
在Subtine的主方法中只调用子类构造方法,实例化子类对象并且在子类构造方法中,没有调用父类的构造方法的任何语句。但是在实例化对象时,它相应的调用了父类构造方法,在结果中还可以看到调用构造方法的顺序,首先是顶级,再继续往下直达本身类。也就是说实例化子类的时候,要首先实例化父类对象,然后在实例化子类对象,所以在子类构造方法调用父类构造方法前,父类已经实例化了。 
拓展一下。

package text_4_1;

public class Parent {
    Parent(int a){//就是将无参数构造方法改成有参数的。
        System.out.println("调用父类Parent构造方法" + a);
    }
}

package text_4_1;

public class Subparent extends Parent{
    Subparent(){
        System.out.println("调用子类Subparent的构造方法");
    }
}

package text_4_1;

public class Subtine extends Subparent{
    Subtine(){
        System.out.println("调用子类Subtine构造方法");
    }
}


package text_4_1;

public class Main {
    public static void main(String[] args){
        Subtine subtine = new Subtine();
    }
}
  •  

这样的代码将会报错;//就是将父类Parent类无参数构造方法改成有参数的。

Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor
//隐式的超级构造函数()是未定义的。必须显式地调用另一个构造函数 
  •  

意思就是在子类调用构造函数时,必须先调用父类构造函数,因为无参数的构造函数,编译器会自动调用,也就是第一种情况不会报错。但是有参数的,就必须要利用Super的方法来调用。如果不进行调用那么将会报错。

将Subparent类改成。
package text_4_1;

public class Subparent extends Parent{
    Subparent(){
        super(5);//调用了其父类就不会报错了。
        System.out.println("调用子类Subparent的构造方法");
    }
}
//备注一下,调用父类构造方法就是;super();//就ok了。
  •  

还补充一点,关于构造方法的可扩展性; 
查看过源码的应该都发现过jdk的编码人员会在一个类中建立多个构造方法;然而他的作用就是提高可扩展性; 
这里写图片描述
这么多构造方法,他们之间并且还有联系;通过this()来调用自己类的其他构造方法,来减少代码的复制,增大程序的可读性; 
这里写图片描述

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157102.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简单VBS教程「建议收藏」

    简单VBS教程「建议收藏」讲一下VBScript。主要面向菜鸟,懂得编程的朋友就不要浪费时间了,如果你想接触以下VBScript也可以。但既然有编程基础推荐直接去找一些参考书来读。会比较快。    什么是VBScript呢?VBScript的全称是:MicrosoftVisualBasicScriptEditon.(微软公司可视化BASIC脚本版)。正如其字面所透露的信息,VBS(VBScript的进一步简写)是基…

    2022年6月12日
    26
  • jenkins 邮件_jmeter测试报告生成

    jenkins 邮件_jmeter测试报告生成前言前面已经实现在jenkins上展示html的测试报告,接下来只差最后一步,把报告发给你的领导,展示你的劳动成果了。安装EmailExtensionPlugin插件jenkins首页-

    2022年7月30日
    6
  • threadlocal底层实现_ioc的底层实现原理

    threadlocal底层实现_ioc的底层实现原理ThreadLocal作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂性。package com.mupack;public class App{ private String content; public void setContent(String content) { this.content = content; } public Stri

    2022年8月8日
    1
  • 五大经典算法总结

    五大经典算法总结    马上要开始投简历找实习了,自己还是毛都不会,慌得一笔,从今天开始每天刷2道以上的leetcode然后总结,并且总结各种面试题的知识点,以后常复习,加油。    在刷leetcode时经常看到有人说DP,然后去百度了DP是个啥,才知道DP是五大经典算法之一,今天开始总结一下五大经典算法。    五大经典算法分为1、分治法:把一个复杂的问题分成两个或更多的相同或相似的子问…

    2022年5月18日
    43
  • 前端面试题大全_最新前端面试题

    前端面试题大全_最新前端面试题进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份腾讯、字节跳动、百度、阿里等一线互联网公司面试题大全,其中概括的知识点(HTML,CSS,JS,React,Vue,NodeJS,互联网基础知识)

    2022年8月27日
    0
  • 在线文字识别转换「建议收藏」

    在线文字识别转换「建议收藏」在线文字识别转换http://ocr.wdku.net/conv/index.html

    2022年8月4日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号