Java笔记5 内存分析

  1. 对象的创建和使用-----内存分析
public class OOTest01
{
//通过一个类可以实例化N个对象,实例化对象的语法:new 类名();
//new运算符的作用是创建对象,在JVM堆内存当中开辟新的内存空间
       public static void main(String[] args){
              //方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间当中
              //栈内存:方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈
              //堆内存:new的对象在堆内存中存储
              Student s=new Student();
              //s是一个局部变量,在栈内存中存储,new Student()是一个学生对象
       }
}
//学生类,属于引用数据类型,Student是类型名
class Student{
      //类体=属性+方法
      //每一个学生的学号不同,要访问这个学号必须先创建对象,通过对象去访问学号信息。
      //学号信息不能直接通过类去访问,所以这种成员变量又被叫做:实例变量
      //访问实例变量的语法:读取数据:引用.变量名     修改数据:引用.变量名=值;
      //对象又被称为实例,实例变量又被称为对象变量
      int sid;
      String name;
      int age;
      boolean sex;
}

上述代码的内存分析图如下:
在这里插入图片描述
补充:
在这里插入图片描述

package com.Tanya.note;

public class Test{
    public static void main(String[] args) {
        Users u=new Users();//u是局部变量,是一个引用,u保存内存地址指向堆内存的user对象
        //输出User对象内部实例变量的值
        System.out.println(u.sid);
        System.out.println(u.name);
        System.out.println(u.addr);
        //修改User对象内部实例变量的值
        u.sid=110;
        u.name="jack";//jack是一个Java对象,属于String对象
        u.addr=new Address();
        System.out.println(u.name+"居住在哪个城市:"+u.addr.city);
        System.out.println(u.name+"居住在哪个街道:"+u.addr.street);
    }
}

class Address {
    //家庭住址类
    String city;
    String street;
    String zipcode;
}
class Users{
    //用户类;以下都是成员变量中的实例变量(成员变量包括实例变量和静态变量,成员变量存在堆内存)
    int sid;  //基本数据类型:引用型
    String name;//String:引用数据类型:代表字符串
    Address addr;//Address也是一种引用数据类型,代表家庭住址
    //sid是一个实例变量,addr和name既是一个实例变量,也是一个引用,(存储对象地址的变量是引用)
    //引用是变量中保存了内存地址,指向了堆内存当中的一个对象,这种变量被称为引用

}

内存图:
在这里插入图片描述
在这里插入图片描述
2. 简单分析下面一段代码的内存分配:

public class main {
    public static void main(String[] args) {
        A aa=new A();
        //(A*)malloc(sizeof(A));
        aa.i=10;
        aa.j=20;
        System.out.println(aa.i+aa.j);
    }
}
class A{
    int i;
    int j;
}

new A():在堆中动态分配一块区域,被当做了A对象,其实aa本身的内存是在栈中分配的,堆中内存的地址赋给了aa,然后aa就指向了堆中的内存,即aa代表了堆中的内存;
aa.i 代表: aa这个静态指针变量所指向的动态内存中的A对象的i这个成员
aa.j代表: aa这个静态指针变量所指向的动态内存中的A对象j这个成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值