Java中类的定义以及内存分配

public class Test
{
    private static int sid = 0;
    private static int x = print("this is static variable x");
    private int id;
    Test(int _id)
    {
        id = _id;
    }

    void PRINT()
    {
      System.out.println("sid: "+sid+"id"+id);
    }

    public static int print(String s)
    {
        System.out.println(s);
        return 20;
    }

    public static void main(String args[])
    {
        System.out.println("this is main");
        Test test = new Test(5);
        test.PRINT();
    }
}

通过这个简单的例子来回顾一下内存分配。
java中内存主要包含4块:

heap(堆内存):除了基本类型的值,其他被new出来的变量都存储在这里。

stack(栈内存):局部方法定义的变量都存储在这里。方法作用域结束,变量之后会被垃圾收集机制搞定。

data segment:静态变量或是常量存放区。

codesegment(方法区):存放方法。

刚才又查了查资料,发现这里面还有一些不知道知识。

静态成员变量和静态代码块与main函数的执行先后顺序是什么?

为此将代码改成如此。
执行的结果是:

this is static variable x

this is main

sid: 0 id: 5

用下图来说明内存分配过程:
1:①②③④⑤这几个在main方法执行前已经预加载好了(它们之间的顺序我还没搞懂)。
2:执行了静态方法print。打印出this is static variable x。
3:main方法执行,打印出this is main。
4:在stack分配test存储空间,为构造方法在stack中分配临时变量空间(构造方法结束,便消失),完成对象初始化。
5:接着调用PRINT方法,打印。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是...
    一生信仰阅读 1,193评论 0 2
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,366评论 11 349
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,141评论 0 62
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,687评论 0 11