您的位置 首页 java

您需要对象吗,我帮你new一个吧?

我们 java 程序员从来不缺 对象 ,因为我们平时都是 面向对象开发 ,所以你要是需要, 我来帮你new一个吧 ,new一个看起来很容易,但是你知道 Java虚拟机 为我们做了什么事情吧,看看下面的内容你就懂了。

首先,先给大家看看 JVM 的简图

您需要对象吗,我帮你new一个吧?

然后,给大家先简单介绍jvm的三个区

1. 堆区(heap):

用于存放所有对象,是 线程 共享的(注:也属于对象)

2.栈区(stack):

用于存放基本数据类型的数据和对象的引用,是线程私有的(分为虚拟机栈和本地方法栈)

3.方法区(method):

用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆即None-Heap)

4.GC

java的 垃圾回收器, 主要针对堆区


我们来看看下面的代码,以及执行的结果。

 package com.example.demo;

public class Student {

     private  String username;

     static  {

        System.out.println("Student");

    }

    public String getUsername() {
        return username;
    }

    public  void  setUsername(String username) {
        this.username = username;
    }

    @Override
    public  String  toString() {
        return "Student{" +
                "username='" + username + ''' +
                '}';
    }
}
  
 package com.example.demo.designMode;

import com.example.demo.Student;

public class TestMain {

    static {
        System.out.println("TestMain");
    }

    public static void main(String[] args) {

        System.out.println("main方法");

        Student student = new Student();
        student.setUsername("张三");
        System.out.println(student);

    }

}
  

您需要对象吗,我帮你new一个吧?

执行结果


如上可知,jvm new了一个对象,做了如下操作:

1.将TestMain类加载到方法区,以及main方法入栈

2.将Student类加载到方法区

3.将new Student()放到堆中,开辟空间,并初始化值username=null,student变量入栈

4.对username进行赋值,username=“张三”

5.main方法出栈,GC回收


文章来源:智云一二三科技

文章标题:您需要对象吗,我帮你new一个吧?

文章地址:https://www.zhihuclub.com/198444.shtml

关于作者: 智云科技

热门文章

网站地图