zoukankan      html  css  js  c++  java
  • 对象与内存控制1---实例变量和类变量

    一、实例变量和类变量的定义

    Java程序的变量可分为成员变量和局部变量。

    • 局部变量(作用时间短,存储在方法的栈中)
    1. 形参:由方法签名中定义,由方法调用者为其赋值,随方法的结束消亡。
    2. 方法内的局部变量:在方法内部定义的,必须在方法内对其进行显式初始化。从初始化完成后开始生效,随方法的结束而消亡。
    3. 代码块内的局部变量:在代码块内定义的,必须在代码块内对其进行显式初始化。初始化完成后开始生效,随代码块的结束而消亡。
    • 成员变量(类体内 定义的变量)
    1. 实例变量(非静态变量):没有static修饰
    2. 类变量(静态变量):有static修饰

    注意:static的作用将实例成员变为类成员,只能修饰类里的成员。

    public class ErrorDef{
        //下面代码将提示:非法前向引用
        int num1 = num2 + 2;
        int num2 = 20;
    }
    public class ErrorDef2{
        //下面代码将提示:非法向前引用
        static int num1 = num2 + 2;
        static int num2 = 20;
    }
    public class RightDef{
        //下面代码完全正常
        int num1 = num2 + 2;
        static int num2 = 20;
    }

    二、实例变量和类变量的属性

    在同一个JVM内,每个类只对应一个Class对象,但每个类可以创建多个Java对象。由于 每个类只对应一个Class对象,所以同一个JVM内的一个类的变量只需要一块内存空间;对于实例变量,该类每创建一次实例,就需要为实例变量分配一块内存空间。

    class Person{
        String name;
        int age;
        static int eyeNum;
    }
    public class FieldTest{
        public static void main(String[] args){
            Person.eyeNum = 2;   //------(1)
            System.out.println(Person.eyeNum);
            
            Person p = new Person();
            p.name = "猪八戒";
            p.age = 300;
            System.out.println(p.eyeNum);//----(2)
            
            Person p2 = new Person();
            p2.name = "孙悟空";
            p2.age = 500;
            p2.eyeNum = 3;    //------(3)
            
            System.out.println(p.eyeNum);
            System.out.println(p2.eyeNum);
            System.out.println(Person.eyeNum);    
        }
    }

    上面代码的内存分配过程如下所示:

  • 相关阅读:
    WPF程序内存泄漏问题文章推荐
    UAC影响读写文件和注册表
    .NET COM Interop 中的ReleaseComObject使用准则
    读Excel数据并导入到数据库中最快的方法
    DEP问题文章推荐
    深入了解GC文章推荐
    IIS 发布网站
    iis5.1安装方法(适用于XP),IIS5.0安装包下载、IIS5.1安装包下载、IIS6.0安装包下载
    单击GridView的某一行 根据此行id得到这行的所有信息
    asp.net背景图片自动适应屏幕大小
  • 原文地址:https://www.cnblogs.com/wangqi327/p/4484284.html
Copyright © 2011-2022 走看看