牛客网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、两个变量的存储位置不同:
成员变量:存储在堆内存中的对象中,所以也叫对象的特有数据。
静态变量:存储在方法区(共享数据区)的静态区中,所以也叫类的共享数据。
作者:大数据和人工智能躺过的坑
出处:http://www.cnblogs.com/zlslch/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!