zoukankan      html  css  js  c++  java
  • [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念

    • 特点:
    1. 函数名与类名相同
    2. 不用定义返回值类型
    3. 没有具体的返回值
    • 作用:

                   给对象进行初始化

    • 注意:
    1. 默认构造函数
    2. 多个构造函数是以重载出现的
    3. 一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数
    4. 如果在类中定义了构造函数,那么类中的默认构造函数就没有了
    5. 构造函数在创建对象时调用
    6. 构造函数也有默认的return语句(省略不写)
    7. 函数执行到return语句后,栈中该函数的方法区就会出栈

    如:

    class Person{
        private int age;
        Person(){
            age = 10;
        }
    }
    • 一般函数和构造函数的区别

    构造函数:对象创建时,就会调用对应的构造函数,对对象进行初始化

    一般函数:对象创建后,需要函数功能时才调用

    一般函数不能调用构造函数,构造函数可以调用一般函数

    class Person{
        void Person(){
        }
    }

    此方法为一般方法

    2.构造函数的重载

    class Person{
        private String name;
        private int age;
        Person(){
            age = 1;
            name = "xiaoming";
        }
        Person(int a, String n){
            age = a;
            name = n;
        }
        public void speak(){
            System.out.println(name+”:”+age);
        }
    }

    在newPerson对象时,可以根据不同的构造函数,选择不同的创建方式。

    Person p1 = new Person();//使用Person类的无参构造函数来创建对象
    
    Person p2 = new Person(10,”zhangsan”);//使用Person类有两个参数的构造函数来创建对象
    p1.speak();
    p2.speak();

    运行结果为:

    xiaoming:1

    zhangsan:10

    3.构造函数内存图解

    Person p2 = new Person(10,”zhangsan”);
    p2.speak();

    这个代码在内存中的执行过程:

    构造函数

    说明:

    1.执行main方法,在栈内存中开辟一个main函数的方法区,创建一个Person类型变量p2

    2.在堆内存中创建一个Person的实例,并初始化值,和分配地址值

    3.在栈内存中开辟Person构造函数的方法区,并执行构造函数中的代码,即给堆内存中的Person实例的name和age属性赋值

    4.Person方法区出栈

    5.栈中创建speak的方法区,执行相应的代码

    6.speak方法区出栈

    4.构造函数的相互调用

    构造函数可以调用构造函数,如:

    class Person{
        private String name;
        private int age;
        Person(String n){
            name = n;
        }    
        Person(String n, int a){
            this(n);
             age = a;
             
         }
         
         public void speak(){       
             System.out.println(name+”:”+age);    
        }
    }

    注意:

    1. 对this的调用必须是构造函数中的第一个语句
    2. 不允许两个构造函数互相调用,即不能Person(String n)中调用this(“zhangsan”,10),再在Person(String n, int a)调用this(“xiaoming”),会导致栈内存溢出,因为它们在不断的互相调用,不断进栈,却没有出栈

    错误!!!栈内存溢出:

    class Person{
         private String name;
        private int age;
        Person(String n){
        this("zhangsan",10)
         name = n;
         }    
        Person(String n, int a){
          this("lisi");
        age = a;
             
         }
        
    }

    • this详解见   [java学习笔记]java语言核心----this关键字&super关键字
  • 相关阅读:
    前端 network
    C语言的安装及使用
    c语言
    mongodb
    大型网站--负载均衡架构
    双机热备ROSE HA工作原理
    Linux vmstat命令实战详解
    管理员必备的20个Linux系统监控工具
    linux top命令详解
    linux命令TOP参数load average详解[转]
  • 原文地址:https://www.cnblogs.com/ma-fei/p/4860655.html
Copyright © 2011-2022 走看看