JAVA进度之09对象的创建和内存分析

先创建Student类

//学生类
//学生类只是一个模板
//描述了所有学生的共同特征【状态+行为】
//当前类只描述学生的状态信息【属性】
public class Student {
    //类体 = 属性 + 方法
    //属性【存储数据采用变量的形式】
    //由于变量定义在类体中,方法体之外的变量成为成员变量

    int no;//学号
    String name;//名字
    int age;//年龄
    boolean sex;

}
什么是对象
new运算符在堆内存中开辟的内存空间称为对象

什么是引用
引用是一个变量,只不过变量里面存的是另一个JAVA对象的内存地址

JAVA语言中,程序员不能直接操作堆内存,JAVA中没有指针
JAVA语言中,程序员只能通过“引用”去访问堆内存当中的对象内部的实例变量:引用.变量名;

接下来创建对象

public class OOtest01 {
    //对象的创建和使用
    public static void main(String[] asgs){
        //通过一个类可以实例化n个对象
        //实例化对象 new 类名();
        //new是JAVA中的运算符
        //new 是创建对象,在JVM中开辟新的内存空间

        //方法区内存:在类加载的时候, class字节码代码片段被加载到该内存空间中
        //栈内存【局部变量】:方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈
        //堆内存:new 对象在堆内存中存储

        //int 是基本数据类型
        //i 是变量名
        //10 是int 类型的字面值
        int i = 10;

        //Student 是引用数据类型
        //s是变量名
        //new Student(); 是一个学生对象
        Student s = new Student();//s 是局部变量,在栈中存储

        int stuNo = s.no;
        String stuName = s.name;
        int stuAge = s.age;
        boolean stuSex = s.sex;

        System.out.println("学号 = "+stuNo);
        System.out.println("名字 = "+stuName);
        System.out.println("年龄 = "+stuAge);
        System.out.println("性别 = "+stuSex);

    }
}

基本数据类型的默认值

内存:

 如果要修改对象的值

        s.no = 10;
        s.name = "Jack";
        s.age = 18;
        s.sex = true;
        
        int stuNo = s.no;
        String stuName = s.name;
        int stuAge = s.age;
        boolean stuSex = s.sex;



        System.out.println("学号 = "+stuNo);
        System.out.println("名字 = "+stuName);
        System.out.println("年龄 = "+stuAge);
        System.out.println("性别 = "+stuSex);

再创建一个对象,堆内存里再开辟一个空间:

Student stu = new Student();

 

 其实,String也是引用数据类型,那么name里放地址,再开辟一个String空间:

 因此,引用,可以是局部变量,也可以是实例变量

JVM主要有三块内存空间:栈内存、堆内存、方法区内存

堆内存和方法区内存各有1个,一个线程一个栈内存。

方法调用的时候,该方法所需内存空间在栈内存中分配,成为压栈,方法执行结束后,该方法所属内存空间释放,成为弹栈。

栈中主要存储的是方法体中的局部变量。

代码片段会被存储到方法区内存中,在类加载的时候代码片段会载入。

在程序执行过程中,new创建的对象是存储在堆内存中,对象内部有实例变量,所以实例变量存放在堆内存中。

变量分类:

        局部变量【方法体中声明】

        成员变量【方法体外声明】

                实例变量【前面修饰符没static】

                静态变量【前面修饰符有static】

静态变量存储在方法区内存中

三块内存中变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收器主要是针对是堆内存。

垃圾回收机制(自动垃圾回收机制,GC)什么时候会考虑将某个JAVA对象的内存回收?

        当堆内存当中的JAVA对象成为垃圾数据的时候,会被垃圾回收机制回收。

                什么时候堆内存中的JAVA对象成为垃圾数据?

                        没有更多的引用指向它;

                        这个对象无法被访问,因为访问对象只能通过引用方式访问。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值