zoukankan      html  css  js  c++  java
  • Java学习笔记12(面向对象五:构造方法、this再探)

    在开发中,经常需要在创建对象的同时明确对象对的属性值,

    比如一个Person对象创建时候就应该有age和name等属性

    那么如何做到在创建对象的同时给对象的属性初始化值呢?

    这里介绍构造方法:

    1.构造方法没有返回值类型,更没有返回值,因为它是构建对象的,对象创建完,方法就执行结束

    2.构造方法名必须和类型保持一致

    3.构造方法什么时候运行呢?答:在创建对象的时候自动执行,而且只运行一次

    定义示例:

    public class Person {
        public Person(){
            System.out.println("我是一个空参数的构造方法");
        }
    }

    运行:

    public class Test {
        public static void main(String[] args) {
            Person p = new Person();
        }
    }
    //输出:我是一个空参数的构造方法

    构造方法是每个类的必须内容,写或者不写都存在

    编译器(javac)在编译的时候会检测是否有构造方法,如果有,执行,如果没有,自动创建一个空参数空内容的构造方法

    构造方法的赋值:

    public class Person {
        private String name;
        private int age;
        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
    }
    public class Test {
        public static void main(String[] args) {
            Person p = new Person("张三",18);
        }
    }

    构造方法内存分析:

    1.main方法进栈运行,内容只有一行:创建对象

    2.堆中开空间存入对象,并带有两个参数

    3.两个私有变量跟随进入堆内存,并赋默认值(null,0)

    4.对象把自己的地址传给this关键字

    5.对象调用自己的构造方法,构造方法进栈运行,并且对象把两个参数传入

    6.构造方法用this.的方式访问堆内存的对象并给成员变量赋值

    7.构造方法运行结束,对象建立完成,地址传给p

    构造方法是可以重载的

    示例:

    public class Person {
        private String name;
        private int age;
    
        public Person() {
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    public class Test {
        public static void main(String[] args) {
            Person p = new Person("张三", 18);
            Person p1 = new Person();
        }
    }

    this在构造方法之间的调用:

    public class Person {
        private String name;
        private int age;
    
        public Person() {
            //this()是调用其他的构造方法
            //this()必须写在构造方法第一行
            this("张三", 20);
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    public class Test {
        public static void main(String[] args) {
            Person p1 = new Person("张三", 18);
            Person p2 = new Person();
        }
    }

    内存原理:

    1.main方法进栈运行,在堆中开空间创建对象,成员变量跟随并赋默认值

    2.对象调用自己的构造方法,调用空参数构造,进栈运行,实参传递

    3.调用了有参数构造方法,有参构造方法进栈运行

    4.赋值完成有参构造方法结束,空参构造方法结束,然后对象创建完成

    5.对象地址传给p1(p2)

  • 相关阅读:
    如何简单的理解LSTM——其实没有那么复杂(转载)
    关于梯度爆炸和梯度消失的详解(转载)
    通俗易懂---反向传播(转载)
    pandas读取csv文件中文乱码问题
    python安装imblearn(PackageNotFoundError: ''Package missing in current channels")
    python中的虚拟环境(在jupyter和pycharm中的使用)
    关于阻塞/非阻塞、同步/非同步、死锁
    关于synchronize与lock的区别
    为什么volatile能保证有序性不能保证原子性
    索引以及Mysql中的索引
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8242804.html
Copyright © 2011-2022 走看看