06-类与对象

对象在内存中的布局

类和对象的内存分配机制

 java内存的结构分析

1) 栈: 一般存放基本数据类型 ( 局部变量 )
2) 堆: 存放对象 (Cat cat , 数组等 )
3) 方法区:常量池 ( 常量,比如字符串 ) , 类加载信息
4) 示意图 [Cat (name, age, price)]
java创建对象的流程简单分析
Person p = new Person();
p.name = "jack";
p.age = 10;

1、先加载Person类信息(属性及方法信息在方法区,只会加载一次)

2、在堆中分配空间,进行默认初始化
3、把堆中的地址赋值给p(p在栈中),p就指向对象

4、进行指令初始化,比如 p.name = "jack"; p.age = 10;

方法调用机制

 一旦return结束之后 getSum这个栈就会被释放掉

小结:

1、当程序执行到方法时,就会开辟一个独立的空间(栈空间)

2、当方法执行完毕,或者执行到return语句后,就会返回到调用方法的地方

3、返回后,继续执行方法后面的代码

4、当main方法执行完毕,整个程序会退出

访问修饰符

方法传参机制-基本数据类型

 结论:对于基本数据类型,传递的是值(值拷贝),形参的任何改变都不能影响到实参!!!

方法传参机制-引用数据类型

 结论:引用类型传递的是地址(传递的也是值,地址值),可以通过形参影响实参

作用域

1、全局变量(属性)可以不赋值,直接使用,因为有默认值,但是,局部变量必须手动赋值后,才可以使用,因为没有默认值

 2、属性和局部变量可以重名,访问时遵循就近原则

3、属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量,声明周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而死亡,即在一次方法调用过程中。

package com.migu.poms.pugc.microdrama.controller;

public class Test4 {

    public static void main(String[] args) {
        Person p1 = new Person();
        /*
            属性的生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。
            局部变量,声明周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而死亡,即在一次方法调用过程中
         */
        p1.say(); // 当执行方法时,say方法的局部变量name就会被创建,当say方法执行完毕后,name局部变量就会被销毁,但是属性name(全局变量)还可以使用
    }

}
class Person {

    String name = "jack";
    public void say() {
        String name = "King";
        System.out.println("say() name = " + name);
    }

}

4、作用域范围不同

全局变量/属性:可以被本类或者其他类使用

局部变量:只能在本类中对应的方法使用

5、修饰符不一样

全局变量/属性 可以加修饰符

局部变量不能加修饰符

构造器

构造器是完成对象的初始化,并不是创建对象

对象创建流程分析-进阶

1、先加载Person类信息,只会加载一次

2、在堆中分配空间(地址0x1112)

3、完成属性对象初始化

        3.1、默认初始化 age = 0 name = null

        3.2、显式初始化 age = 90 name = null

        3.3、构造器初始化 age = 20 name = "小倩"
4、把对象从堆中的地址返回给 p(p是对象名,也可以理解成对象的引用)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值