变量

  • 变量是赋予存储位置的名称。 它是程序中存储的基本单位。
  • 可以在程序执行期间更改存储在变量中的值。
  • 变量在使用之前必须声明
    变量是在执行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);

实例变量与静态变量的比较

  1. 每个对象都有自己的实例变量副本,而无论我们创建多少个对象,每个类只能拥有一个静态变量副本。
  2. 对实例变脸的修改不会影响到其他的对象,对静态变量的修改会影响到所有对象
  3. 我们可以通过对象引用访问实例变量,并且可以直接使用类名访问静态变量。

成员变量的作用域

在程序中可以访问变量的程序范围
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