你真的搞懂java变量了吗?
一、什么是变量?
1.1、基本介绍
1)变量是程序的基本组成单位。
2)变量相当于内存中一个数据存储空间的表示,可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。
1.2、注意事项
1)变量表示内存中的一个存储区域[不同的变量,类型不同,占用的空间大小不同,比如: int 4个字节,double就是8个字节]
2)该区域有自己的名称[变量名]和类型[数据类型]。
3)变量必须先声明,后使用,即有顺序。
4)该区域的数据/值可以在同一类型范围内不断变化。
5)变量在同一个作用域内不能重名。
6)变量=数据类型+变量名+值,即变量三要素。
二、实例变量
2.1、什么是实例变量
实例变量又被称为Instance variables。不使用static关键字定义,并且在任何方法、构造方法、块之外的变量都是实例变量。实例变量都是基于特定实例的,实例变量不会在实例之间共享,也就是说,每一个对象的实例都有自己的一个实例变量。下面是实例变量的一个例子:
class Person {
public String name; //公共的实例变量
private int age; //私有的实例变量
}
可以使用如下方式调用实例变量:
class Person {
public String name; //公共的实例变量
private int age; //私有的实例变量
public static void main(String[] args) {
Person person = new Person();
person.name = "strawberry";
person.age = 100;
}
}
2.2、如何识别实例变量?
下面是一些关于实例变量的定义规则:
1)实例变量可以使用四种访问修饰符进行修饰:public、protected、default、private。
2)实例变量可以使用 transient、final 关键字进行修饰。
3)实例变量不可以使用 abstract、synchronized、strictfp、native、static关键字进行修饰。
4)实例变量带有默认值,也就是说,实例变量不用初始化就能使用。下面是常用实例变量的初始值。
2.3、实例变量的特点
1)实例变量只能在类中,在方法、构造函数或任何块之外声明。
2)当在为堆中对象分配空间时,将为每个实例变量分配一块区域。
3)实例变量只能通过创建对象来使用,当使用new关键字进行创建对象时,实例变量同时也被创建,当垃圾回收器回收对象时,实例变量也会被销毁。
4)实例变量可以使用访问修饰符来修饰。
5)实例变量不用强制初始化,它有自己的默认值。
6)每个对象都有自己的一个实例变量的副本,因此在一个对象中修改变量不会对其他对象中的实例变量造成影响。
7)实例变量只能通过创建对象引用来使用。
三、静态变量
3.1、什么是静态变量?
java 中被 static 修饰的成员称为静态变量或类变量。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问
3.2、静态变量的特点
1)静态变量只能定义在类的内部、方法的外部。
2)静态变量在类加载的时候初始化,内存在方法区中开辟,被该类的所有实例共享。即静态变量(类变量)是该类的所有对象共享的变量,静态变量的所有实例共享同一个副本。也就是说,静态变量只有一个,它不会随着对象实例的创建而进行副本拷贝。任何一个该类的对象去访问它时。取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。
注:final类型的静态变量在编译时初始化。
3)Java静态变量初始化遵循以下规则:
- 静态变量会按照声明的顺序先依次声明并设置为该类型的默认初始化值,但不赋值为初始化的值。
- 声明完毕后,再按声明的顺序依次设置为初始化的值,如果没有初始化的值就跳过。
4)访问静态变量时可以不创建对象,直接使用“类名.变量”的方式访问。
5)可以在非静态方法中使用静态变量,但注意不能在静态方法中访问实例变量。
四、全局变量
全局变量又被称为Global variables。如果你有其他语言的编程经验,比如 C、C++ 的话,你会接触到全局变量这个概念,你可以使用下面代码来创建全局变量:
//全局变量
int A;
int B;
int Add(){
return A + B;
}
但是在 Java 中是不存在全局变量的 。因为 Java 是一门面向对象的编程语言,所有的内容都是属于类的一部分。Java 这么做的原因是为了防止数据和类成员被其他程序的部分有意或者无意的修改。所以在 Java 中使用静态变量来起到全局访问的目的。
五、局部变量
5.1、什么是局部变量?
局部变量又称为 Local variables。它指的是在方法中、构造器中或者块代码中定义的变量。局部变量的生命周期随方法、构造器、代码块的执行完毕而销毁。
5.2、局部变量的特点
1)由上述定义可知,局部变量定义在方法、构造器或者代码块中。
2)局部变量的生命周期随方法、构造器、代码块的执行完毕而销毁。
3)局部变量不能使用访问修饰符,例如如下代码:
4)局部变量仅在方法的声明、构造函数或者块内可见,局部变量只能在调用这些方法、构造函数或者块的内部使用。
5)局部变量没有默认值,所以局部变量应该在第一次使用或者声明的时候就应该初始化完成。
六、成员变量
实例变量和类变量都称为成员变量,成员变量有时也被称为属性。
七、看到这里,有些读者可能对java中变量的定义还是不是很清楚,那怎么办?
咱们直接上官网,找到JDK官方手册中关于 Variables 的定义:
上述英文的大致意思就是:在 Java 中,只有下面几种类型的变量(咱也别扯别的了,跟着官网网走就对了?)
- 实例变量(非静态属性):大致意思就是说:非静态属性也就被称为实例变量,因为它们的值是相对于每个实例来说的。即对于每个对象来讲,实例变量的值都是唯一的;
- 类变量(静态属性):类变量就是使用 static 修饰符声明的字段,这就会告诉编译器:无论该类被实例化了多少次,该变量只存在一个副本。另外,可以添加关键字 final 来表示常量。
- 局部变量:没有特殊的关键字将制定的变量声明为局部变量、确定其声明完全取决于声明变量的位置。
- 参数:这个直接翻译大家可能不好理解,简单来说,就是被定义在方法括号中的变量。比如说main方法(public static void main(String[] args) {}),其中的 args 就是 String 的数组的变量,我们也称其为参数,因为参数也没有特殊关键字进行声明,所以表示其为参数也只是取决于其声明位置。