static
关键字
一个类可以创建n个对象,如果n个对象中的某些数据需要n个对象共用,就需要使用static关键字修饰这些数据。
Java中,一般情况下调用类的成员都需要先创建类的对象,然后通过类的对象进行调用。使用static关键字可以实现通过类名加"."直接调用类的成员,不需要创建类的对象,但是类的对象也是可以调用的。
修饰属性
使用static修饰的属性称为静态属性或类变量,没有使用static修饰的属性称为实例变量。使用static修饰的属性属于类,不属于具体的某个对象。类属性在类名首次出现时初始化,即使没有创建对象,类属性也是存在的。
作用
在同一个类的对象中共享数据。
instance
static与instance的区别
static:静态(属于类,只有一份)
instance:实例(实例也叫对象,就是new出来的堆的内存空间,实例是每个对象专有的,每new一次就分配一次内存)
(1)实例变量是在new类时在堆中分配内存的。
(2)构造函数可以为实例属性初始化。构造函数不会为静态属性初始化。
(3)由于静态属性是所有对象共有的,所有对象不就是类吗,因此静态属性也称为类属性,或者类变量,或者类成员。
(4)既然静态属性属于类,不属于某个具体的对象,因此在new对象时,不会给静态属性分配内存。那静态时什么时候分配内存呢?
(5)当在程序运行期间,首次出现类名时,会暂时停止程序运行,去为类的静态属性分配内存,然后继续运行。
(6)静态变量被分配在方法区中,常驻内存,永不回收。静态变量只有一份。相当于c语言的全局变量。
(7)静态变量由类名操作,由类名赋值,取值。
(8)类名调用静态属性时,可以省略类名。
(9)static的加载,首次出现类名时,为类的静态属性分配内存;instance的加载,new的时候分配内存。
(10)static可以修饰变量,称为静态变量,static可以修饰方法,称为静态方法,类名首次出现时,先为静态变量分配内存,然后调用静态块,静态块可以为静态变量初始化。静态块只在类名首次出现时调用一次,以后再也不调用了。
类
类是具有相同的状态和相同的行为的一组对象的集合,类是由属性和方法构成的。
类和对象的关系
类和对象的关系就如同模具和用这个模具制作出来的物品之间的关系。一个类给出它的全部对象的一个统一的定义,而它的每个对象则是符合这种定义的一个实体(也称作实例),因此类和对象的关系就是抽象和具体的关系。
实例化对象
通过类创建对象的过程称为类的实例化。实例化的结果是产生了一个实例,实例也叫对象,new就是实例化的意思,new也是分配内存的意思。