ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day11_类中成员之变量

2022-06-29 08:00:28  阅读:138  来源: 互联网

标签:name 对象 成员 day11 println c1 类中 变量


通过以前的学习,我们知道了成员变量是类的重要组成部分。对象的属性以变量形式存在,下面我们就来详解的学习一下类中的变量

成员变量

成员变量的分类

  • 实例变量:没有static修饰,也叫对象属性,属于某个对象的,通过对象来使用
  • 类变量:有static修饰,也叫类变量,属于整个类的,不是属于某个实例

如何声明成员变量

属性的类型可以是Java的任意类型,包括基本数据类型、引用数据类型(类、接口、数组等)。

例如:声明一个中国人的类

class Chinese{
    static String country;//类变量
    String name;//默认值
    char gender = '男';//显式赋值
}

如何在类外面访问成员变量

类变量

 成员变量/实例变量 

代码示例

class Chinese {
    static String country;
    String name;
    char gender = '男';
}

public class Demo {
    public static void main(String[] args) {
        //System.out.println(Chinese.name);错误,非静态成员变量必须通过对象.进行访问

        //创建对象
        Chinese c1 = new Chinese();
        //对象名.非静态成员变量
        System.out.println(c1.name);//null
        //对象名.非静态成员变量
        System.out.println(c1.gender);//男

        //类名.静态成员变量,推荐
        System.out.println(Chinese.country);//null
        //静态的成员变量也可以通过对象.进行访问,不推荐
        System.out.println(c1.country);//null

    }
}

成员变量有默认值

 

类变量的值是所有对象共享的,当类变量发生改变的时候,任何此类的对象访问该变量都会发生改变。而实例变量的值是每个对象独立的。

代码示例

class Chinese {
    static String country;
    String name;
    char gender = '男';
}

public class Demo {
    public static void main(String[] args) {
        //创建对象c1
        Chinese c1 = new Chinese();

        //创建对象c2
        Chinese c2 = new Chinese();

        //给对象c1的name属性赋值张三
        c1.name = "张三";

        //给对象c2的name属性赋值李四
        c2.name = "李四";

        //给对象c2的gender属性赋值女
        c2.gender = '女';

        //给类变量赋值
        Chinese.country = "中国";//推荐

        //访问各个对象的成员变量
        System.out.println("c1.country = " + c1.country); //中国
        System.out.println("c1.name = " + c1.name); //张三
        System.out.println("c1.gender = " + c1.gender);//男
        System.out.println("c2.country = " + c2.country); //中国
        System.out.println("c2.name = " + c2.name);//李四
        System.out.println("c2.gender = " + c2.gender);//女
    }
}

成员变量的内存图

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理,每一片区域都有特定的处理数据方式和内存管理方式。


详解


下面我们使用画图的方式来分析一下为什么,类变量的值是当前类创建的所有对象共享的,而实例变量的值是每个对象独立

静态成员变量和实例变量的异同

相同点:

  • 位置类中方法外

不同点:

有无static修饰

  • 静态变量被static修饰
  • 实例变量不能被static修饰

内存中的分数不同  

  • 类变量:内存中只有一份,当前类创建的对象共享
  • 实例变量:每创建一个该类对象都会开辟一份空间,来存储不同对象的实例变量。

调用方式不同

  • 类变量: 可以使用对象名.属性名和类名.属性名调用,推荐使用类名.属性名调用调用
  • 实例变量:对象名.属性名

生命周期不同:

  • 类变量:随着类的加载而加载 随着类的消亡而消亡
  • 实例变量:随着对象的创建 对象消失(当对象没有引用指向时) 被垃圾回收器回收

存储的位置不一样

  • 类变量:方法区
  • 实例变量:堆中

成员变量和局部变量的区别

查看下面代码

public class Car {
    String color;// 成员变量

    // 成员方法
    public void drive(String name) {
       //声明在方法上的name和定义在方法里的speed都是局部变量
        int speed = 80;
        System.out.println("汽车正在以" + speed + "迈的速度行驶...");
    }
}

成员变量和局部变量的主要区别如下:

定义的位置不同: 

  • 成员变量定义在类中方法外,
  • 局部变量定义在方法中或者是方法声明上

在内存中的位置不同: 

  • 成员变量是在堆区,
  • 局部变量是在栈区

生命周期不同:

  • 成员变量是随着对象的创建而存在,随着对象的销毁而销毁
  • 局部变量是随着方法的调用而存在,随着方法调用完毕而销毁

默认值不同:

  • 成员变量有默认值
  • 局部变量没有默认值,不赋值不能直接使用

成员变量初始化方式

  1. 成员变量有默认值
  2. 显式赋值
  3. 代码块
  4. 构造器建议只为实例变量初始化,不为静态类变量初始化
  5. 使用setXxx(参数列表)赋值

标签:name,对象,成员,day11,println,c1,类中,变量
来源: https://www.cnblogs.com/wurengen/p/16419045.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有