• 对象与内存(一)


    java内存管理分为两方面:内存的分配与内存的回收。

    jvm的垃圾回收机制是由一条后台线程完成的,如果肆无忌惮创建对象,让系统分配内存,则会造成系统可用内存的减少,降低了程序运行的性能,同时也会加重垃圾回收机制的负担,程序运行性能会更低。

    java程序的变量大体可分为成员变量和局部变量。局部变量又分为如下三类:1.形参:在方法签名中定义的局部变量,由方法调用者负责为其赋值,随方法的结束而消亡。2.方法体内的局部变量:在方法内定义的局部变量,必须在方法体内对其进行显示初始化。从初始化完成之后开始生效,随方法的结束而消亡。3.代码块内的局部变量:在代码块中定义的局部变量,必须在代码块中对其进行初始化,从初始化完成生效,随代码块结束而消亡。

    局部变量被存储在方法的栈内存中。

    定义成员变量时,如果用static修饰的变量则称为类变量或静态成员变量,而没有被static修饰的成员变量则称为非静态成员变量或实例变量,static只能修饰类里的成员,不能修饰外部类,局部变量以及局部内部类。

    注意:在加载类时,首先会加载静态成员变量,静态成员方法(按代码顺序进行加载),然后才加载非静态变量和方法。如下代码所示:

    public class Test{
        
        int a = b +  2;
        static int b = 10;
    
    }
    //上面Test的代码正确
    public class Test1{
        
        static int a = b +  2;
        static int b = 10;
    
    }
    public class Test2{
        
        int a = b +  2;
        int b = 10;
    
    }
    //上面Test1和Test2的代码是错误的正确(非法前向引用)
    类变量属于类本身,而实例变量则属于该类的实例。在同一个jvm中,每个类只有一个class对象,但可以有多个实例对象。因此,在同一个jvm中,一个类的类变量只需要一块内存空间,而每创建一次实例则需要为该实例变量分配一块内存空间。类变量和实例变量在内存中的存储结构如下:
    1 public class Person{
    2 
    3     public static double money;
    4 
    5     public String name;
    6 
    7     public String sex;
    8 
    9 }

    请注意一下代码的执行顺序,根据注意事项可知,在运行java类时,首先会为各个成员变量进行分配空间,然后才按照顺序对其进行初始化。

    上图运行流程如下:首先为成员变量分配内存空间,然后运行静态代码(按照顺序),先为name初始化为“java编程”,然后再将其初始化为“我爱java”。接着在调用构造函数时,先运行非静态代码块,为wight初始化为10.0,然后再将wigt的值修改为20.0,最后才执行构造函数内的代码。

     

    注意以下两段代码的运行结果:

  • 相关阅读:
    蓝桥题库基础练习1-10
    HTML5(八)Web Workers
    对自动化测试工具的实战运用
    对自动化测试工具的简要认识
    HTML5(七)Web 存储
    蓝桥杯javaB组入坑
    Google Play内购测试
    【python】python中的json、字典dict
    【python】python之tuple元组
    性能测试基础知识
  • 原文地址:https://www.cnblogs.com/zhlblogs/p/9061443.html
Copyright © 2020-2023  润新知