栈里面存储的是堆里面的地址
——阅读此文章前,先介绍一下:本篇文章主要介绍的是静态相关的概念,主要从三个方法方面讲解。用大标题分为了一、二、三个板块
一、什么是静态属性??
静态属性是整个类共有的属性。举个例子才好理解:有一个学生Student类,里面有name、age、count(班级学生数量)等的属性。这里的name和age是一个学生所特有的,但是count呢?它不是,我们不希望每一个学生拥有不同的学生的数量,所以我们把count定义成static类型的数据。
在main函数中如何定义静态变量的值呢?
类名.静态属性名 访问静态属性
注意:使用变量来访问count,修改值也是可以的,但是呢?由于Java的开放性,不建议这么使用。如果这么写的话,Java会报一个警告:
静态属性存在方法区当中,所以不论是通过对象访问还是类名访问,访问的始终是同一个变量
静态属性是整个类共同持有的共享空间,任何对象修改,都会影响其他对象
静态属性属于整个类,不属于某一个对象,所以建议使用类名修改静态属性
二、使用static修饰的方法
静态属性 又称为 类属性、 静态方法又称为 类方法
类名加方法:都是访问的是静态方法
比如:Arrays.copyOf();
Arrays.sort(); Math.random(); Math.sqrt();
在类中的方法前面增加一个static就变成了静态方法
同一个类中的静态方法,可以调用另外一个静态方法,直接将另外一个静态方法名字写进行就行了,默认前面加了当前的类
执行结果:
静态方法的特点:
静态方法允许直接访问静态成员
静态方法不能直接访问非静态成员。因为:非静态成员变量是属于对象的,静态方法是直接通过类进行调用的,不是通过对象进行调用的,所以说静态方法内部是不能直接访问非静态成员的
静态方法中不允许使用this或是super关键字。因为:this是调用本类中的非静态属性,super也是调用父类的非静态属性
静态方法可以继承,不能重写、没有多态
三、静态代码块
static{
}
在类加载,什么是类加载??的时候才执行,而且只执行一次,类似于初始化的功能
类加载
举个例子:
一个Person类:
test主函数
我们这里故意执行了两次 person的构造方法
我们看static静态代码块执行的次数??
调用类中静态方法也可以出发static 的执行:
注意 只有静态属性、静态方法 没有静态类,类只有抽象类
总结:
- static修饰的成员为静态成员,无需创建对象,可直接通过类名访问
- 静态方法不能直接访问非静态成员
- 静态方法中不能使用this或super
- 静态方法可以继承、不能重写、没有多态
- 静态代码块在类加载时被执行,且只执行一次