zoukankan      html  css  js  c++  java
  • 构造函数

    1、概述

        构造函数:构建创造对象时调用的函数。
        作用:可以给对象进行初始化。创建对象都必须要通过构造函数初始化。

    2、特点

       a、函数名与类名相同
       b、不定义返回值类型
       c、没有具体的返回值

    3、类别

       构造函数可以有多个,用于对不同的对象进行针对性的初始化.
       多个构造函数在类中是以重载的形式来体现的。
        无参构造函数(默认构造函数)
        带参构造函数
    一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。
    如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。
     1     Person()//构造函数,而且是空参数的。
     2     {
     3         name = "baby";
     4         age = 1;
     5         System.out.println("person run");
     6     }
     7 
     8     Person(String n)
     9     {
    10         name = n;
    11     }
    12 
    13     Person(String n,int a)
    14     {
    15         name = n;
    16         age = a;
    17     }

    4、一般函数和构造函数的区别

        a、调用时机
        构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
        一般函数:对象创建后,需要函数功能时才调用。 
        b、调用次数
        构造函数:对象创建时,会调用只调用一次。
        一般函数:对象创建后,可以被调用多次

    5、构造函数内存图解

     1 class Person{
     2     private String name;
     3     private int age;
     4     Person(String n,int a){
     5         name = n;
     6         age = a;
     7     }
     8     public void speak(){
     9         System.out.println(name+":"+age);
    10     }
    11 }
    12 
    13 class ConsDemo{
    14     public static void main(String[] args){
    15         Person p2 = new Person("小强",10);
    16         p2.speak();
    17     }
    18 }
    a、main函数进栈,创建p2对象,在栈内存中创建p2变量,在堆内存中创建对象,对name和age默认初始化
     
     
    b、调用构造函数Person(String n,int a),构造函数进栈,将传递的参数值赋给n和a,n和a再将值赋给堆中的name和age
    c、构造函数执行完毕,弹栈,此时对象初始化完毕,再将地址值赋给变量p2,p2指向堆中对象
     d、p2.speak(),speak()方法进栈,执行,完毕后弹栈

    6、注意事项

        a、构造函数如果完成了set功能。set方法是否需要?需要,构造函数的赋值是在创建对象时进行,且一次,而set可以多次调用。
    1      Person(String n)
    2     {
    3     name = n;
    4     }
    5     public void setName(String n)
    6     {
    7     name = n;
    8     }
        b,一般函数不能直接调用构造函数。
        c,构造函数如果前面加了void就变成了一般函数。
        d,构造函数中是有return语句的。
  • 相关阅读:
    NPOI Word 多级标题结构设置
    ^M的问题解决
    sed命令详解
    Python time datetime string 相互转换
    Linux环境下调试python代码----pdb模块
    k8s更新证书记录
    sealos + NFS 部署 kubesphere 3.0
    使用wireshark排除一例网络问题
    Prometheus监控Oracle数据库
    记录一次清理挖矿病毒
  • 原文地址:https://www.cnblogs.com/wuweibincqu/p/6925975.html
Copyright © 2011-2022 走看看