变量
- 变量是赋予存储位置的名称。 它是程序中存储的基本单位。
- 可以在程序执行期间更改存储在变量中的值。
- 变量在使用之前必须声明
变量是在执行Java程序时保存值的容器。 变量被分配有数据类型。
变量是一个内存位置的名称。 Java中存在三种类型的变量:局部变量(local),实例变量(instance)和静态变量(static)。
Java中有两种类型的数据类型:原始数据(primitive)和非原始数据(non-primitive)。
声明变量
int a;
//int——变量的类型声明表示该变量可以存储的数据类型
// a——变量的名字
这样声明变量只能将名称赋予存储位置作为标记。 可以通过两种方式为它分配值:
变量赋值
- datatype: 可以存储在此变量中的数据类型。
- variable_name: 给变量的名称。
- value: 存储在变量中的初始值
局部变量
- A variable defined within a block or method or constructor is called local variable.
局部变量的初始化是强制性的。- The scope of these variables exists only within the block in which the variable is declared. i.e. we can access these variable only within that block.
- 不能使用“静态”关键字定义局部变量,因为static定义的变量属于类,所以static只能在方法的外面类的里面声明。 局部变量如果使用static修饰则会报错,因为,局部变量的使用权不属于类或者实例,而是该方法,而static的意思是属于类。
- 当进入block的时候或者调用函数的时候创建局部变量,从块退出或者从函数返回值的时候销毁局部变量
- 局部变量的作用域是方法级别
实例变量(也叫做成员变量)
- Instance variables are non-static variables and are declared in a class outside any method, constructor or block——成员变量必须在类的里面,方法的外面,他们能够在类中被直接访问.
- As instance variables are declared in a class, these variables are created when an object of the class is created and destroyed when the object is destroyed.
- 实例变量在创建对象的时候创建,对象销毁的时候销毁
- 与局部变量不同,我们可以对实例变量使用访问说明符。 如果我们未指定任何访问说明符,那么将使用默认的访问说明符。
- 实例变量的初始化不是强制性的。 其默认值为0
实例变量只能通过创建对象来访问。- 在实例变量前加上static修饰并不会报语法的错误,但是使用static修饰的变量就不属于某一个特定的实例,而是属于类。
静态变量
Static variables are also known as Class variables
These variables are declared similarly as instance variables, the difference is that static variables are declared using the static keyword within a class outside any method constructor or block.
与实例变量不同,无论我们创建多少个对象,每个类只能有一个静态变量的副本。
静态变量在程序执行开始时创建,并在执行结束时自动销毁。
静态变量的初始化不是强制性的。 其默认值为0
如果我们通过对象访问静态变量(例如Instance变量),则编译器将显示警告消息,并且不会停止程序。 编译器会自动将对象名称替换为类名称。
我们通过类名点号变量名的方式访问静态变量
如果我们访问不带类名的静态变量,则编译器将自动附加类名。
可以在所有实例之间共享,
静态变量初始化不是强制性的*****************************************
可以不加类名直接访问静态变量***************************************
static int num;
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println(num);
}
也可以通过对象名访问静态变量************************
Human h=new Human();
System.out.println(h.totalNum);
通过类名访问静态变量********************************
System.out.println(Test.num);
实例变量与静态变量的比较
- 每个对象都有自己的实例变量副本,而无论我们创建多少个对象,每个类只能拥有一个静态变量副本。
- 对实例变脸的修改不会影响到其他的对象,对静态变量的修改会影响到所有对象
- 我们可以通过对象引用访问实例变量,并且可以直接使用类名访问静态变量。
成员变量的作用域
在程序中可以访问变量的程序范围
Scope of a variable is the part of the program where the variable is accessible
类里面,方法外面定义
成员变量可以在类中的任何地方访问
指定成员变量的访问权限(例如:private public protected default)不会影响它们在类中的作用域。
成员变量的访问修饰符
可以使用访问修饰符的规则在类外部访问成员变量
修饰符 | Package | 子类 | world |
public | ok | ok | ok |
protected | ok | ok | no |
default | ok | no | ok |
private | no | no | no |