定义类实际上就是定义类中的成员。
成员:成员变量属性、成员函数行为。
局部变量在方法内部声明,只能在方法内部使用。 调用外部方法时会分配内存。 方法执行后,请求自动释放内存并终止。 使用局部变量时,必须先对其进行初始化。 初始化。 它是在方法体中定义的变量,也是方法的参数,仅在定义它的方法内有效。 如果成员变量违反了人工初始化,系统会自动根据其类型对其进行初始化。 基本数据类型变量被系统赋值为 0,引用变量被赋值为 null。
成员变量和局部变量就像正式工和临时工。 成员变量是正式员工,他们一直存在,与公司同生共死。 局部变量是临时工作者。 公司让临时工做点事,做完了,临时工就走了。 没有了,毁了。
静态变量是所有对象共有的变量。 无需创建对象即可直接引用它们。 普通变量只有在创建了类的对象后才能被引用。 局部变量和成员变量属于非静态变量,必须在调用前动态创建,不能直接调用。 非静态成员变量定义后,计算机随机给出一个地址。 当程序结束时,地址被恢复。 静态成员变量是不被回收的,一旦给了它地址,这个地址就属于它了。 不管程序是否结束,它都在等待一个语句来释放它,或者当计算机关闭时它就消失了。
全局变量,也称为成员变量,是指类中定义的变量; 它们在整个类中有效,可以分为类变量和实例变量。 类变量也称为静态变量。 修改后可以直接用类名或者对象来调用。 而且,所有对象的同一个类变量共享相同的内存空间。 实例变量不需要修改,只能通过对象来调用,并且所有对象的相同实例变量共享不同的内存空间。
成员变量和局部变量的区别:
1、成员变量是在类中定义的,并且可以在整个类中访问。
局部变量定义在函数、语句和局部代码块中,并且仅在它们所属的区域中有效。
2、成员变量存在于堆内存中的对象中。
局部变量存在于堆栈内存中的方法中。
3、成员变量随着对象的创建而存在,随着对象的消失而消失。
局部变量随着其所属区域的执行而存在,并随着其所属区域的结束而释放。
4、成员变量有默认的初始化值。
局部变量没有默认的初始化值。
看代码:
class Person{ String name;//姓名,这是一个成员变量 static String country = "中国";//国籍,这是一个静态变量 public void printInfo() { System.out.println(name+":"+country); } }
在上面的代码中,我们可以看到变量名是一个成员变量,而是一个静态变量,用关键字修饰。
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); } }
结果发现
程序运行正常,访问合法,所以我们可以总结出以下区别:
成员变量:只能被对象调用。
静态变量:可以被对象和类调用。 在上一节中,我们了解到可以使用类名直接调用修饰成员。
3、两个变量的别名不同:
成员变量:也称为实例变量。
静态变量:也称为类变量。
4、两个变量的存储位置不同:
成员变量:存储在堆内存中的对象中,因此也称为对象特定数据。
静态变量:存储在方法区的静态区(共享数据区),因此也称为类的共享数据。