zoukankan      html  css  js  c++  java
  • 牛客网Java刷题知识点之全局变量(又称成员变量,分为类变量和实例变量)、局部变量、静态变量(又称为类变量)

      不多说,直接上干货!

    定义类其实就是在定义类中的成员
    成员:成员变量<-->属性,成员函数<-->行为。

      局部变量在方法内部声明,并且只能在方法内部使用,在外层的方法被调用时被分配内存,请求在方法执行完毕后自动释放内存而消亡,在使用局部变量的时候必须先对其进行初初始化。它是在方法体中定义的变量以及方法的参数,只在定义它的方法内有效。成员变量违背人为初始化,系统将自动根据其所属类型进行初始化,基本数据类型变量量系统赋值0,引用型变量赋值null。

      成员变量与局部变量就好比正式工与临时工,成员变量就是正式员工,一直存在,与公司同生同灭,局部变量就是临时工,公司请临时工来做一点事情,做完,临时工就没有了,被销毁了

      static静态变量是所有对象共有的变量,它可以在不创建对象的情况下,直接被引用普通变量只有在创建了类的对象后才能被引用。局部变量与成员变量是非静态变量,调用之前必须动态创建,不能直接调用。非静态成员变量是在定义后,电脑随机给一个地址,当程序运行结束时,地址收回。而静态成员变量的不收回,而且一但给了地址它,这个地址就是它的了,不管程序结不结束,它在等待有个语句来释放它,或者关了电脑也就没了。

      全局变量也叫成员变量,是指在类中定义的变量;它在整个类中都有效,又可分为类变量和实例变量类变量又叫静态变量,用static修饰 它可以直接用类名调用,也可以用对象调用 ,而且所有对象的同一个类变量都是共享同一块内存空间的。实例变量不用static修饰,它只能通过对象调用,而且所有对象的同一个实例变量是共享不同的内存空间的。


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

    1、成员变量定义在类中,整个类中都可以访问。
       局部变量定义在函数,语句,局部代码块中,只在所属的区域有效。

    2、成员变量存在于堆内存的对象中。
      局部变量存在于栈内存的方法中。

    3、成员变量随着对象的创建而存在,随着对象的消失而消失。
      局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

    4 、成员变量都有默认初始化值。
      局部变量没有默认初始化值。

      

    看代码:

    class Person{  
        String name;//姓名,这是一个成员变量  
        static String country = "中国";//国籍,这是一个静态变量  
      
        public void printInfo()  {  
            System.out.println(name+":"+country);  
        }  
    }  

      上面的代码中我们可以看到变量name是一个成员变量,而country是一个静态变量,用static关键字修饰。

    1、两个变量的生命周期不同:

      成员变量:随着对象的创建而存在,随着对象的被回收而释放。

      静态变量:随着类的加载而存在,随着类的消失而消失。

    那么类什么时候消失呢?一般情况下,虚拟机结束了,类就结束了,当然这只是说一般情况下。

    2、两个变量的调用方式不同:

      我们来看一个上面代码的测试:

    class StaticTest{  
        public static void main(String[] args){  
            Person p = new Person();  
            p.name = "小强";  
            String name = Person.name;  
            System.out.println(p.country+"--"+Person.country);  
        }  
    }  

      我们可以看到直接用类名来调用成员变量就会出现“无法从静态上下文中访问非静态变量”的错误。

    当我们把这名话注释之后再来运行:

    class StaticTest{  
        public static void main(String[] args){  
            Person p = new Person();  
            p.name = "小强";  
            //String name = Person.name;  
            System.out.println(p.country+"--"+Person.country);  
        }  
    }  

       结果,是

    程序正常运行并合法访问,所以我们可以总结出下面的区别:

      成员变量:只能被对象调用。

      静态变量:既可被对象调用,也可被类调用。上一节我们就已经学习了static修饰的成员可以直接用类名调用。

    3、两个变量的别名不同:

      成员变量:又称为实例变量。

      静态变量:又称为类变量。

    4、两个变量的存储位置不同:

      成员变量:存储在堆内存中的对象中,所以也叫对象的特有数据。

      静态变量:存储在方法区(共享数据区)的静态区中,所以也叫类的共享数据。

  • 相关阅读:
    矩阵相关计算-基础
    列表-元祖-字典
    Python制作NTF传递函数工况文件和后处理文件
    C++栈和堆的生长方向
    malloc/free与new/delete的区别
    C++中4个类型转换相关的关键字/特点/应用场合
    Python 拾遗
    Python 常用库
    Python 视频转字符动画
    Python 命令行(CLI)基础库
  • 原文地址:https://www.cnblogs.com/zlslch/p/7553565.html
Copyright © 2011-2022 走看看