java中静态关键字static

一、、有无static修饰的区别

static修饰 无static修饰 备注
归属 单个对象
属性 类属性、类变量 实例属性、实例变量
方法 类方法 实例方法
调用方法 类名.属性;类名.方法;对象.属性;对象.方法 对象.属性;对象.方法 创建对象时,数据存储空间才可以被分配,才可以外界调用

二、基本知识点
(一)使用
(1)将static关键字放在定义之前,就可以将字段或方法设定为静态变量或静态方法。
eg:
class Person{
static int age = 18;//就是将age这个字段定义成了静态变量
Static void NewYear{
Person.age++;}
}
Person p1 = new Person();
Person p2 = new Person();
(2)引用static变量
可以类名直接引用:Person.age
可以对象进行定位:p1.age,p2.age
(3)引用static方法
可以类名.方法()直接引用:Person.NewYear()
可以对象进行定位:p1.NewYear(),p2.NewYear()
(二)存储空间
(1)类变量
在类中,使用static声明的成员变量称为静态成员变量,是该类的公用变量,在第一次使用时进行初始化,对于该类的对象来说,static成员变量只有一份。字符串常量和静态变量均存放在数据区。
在这里插入图片描述
(2)实例变量
在这里插入图片描述
个人理解:
static变量-静态变量:就像图书馆中供同学们传阅的一本书籍一样,如一个人对书籍进行了笔记则影响到后来看的每一位同学。
非static变量-成员变量:可理解每位同学上课均有一本自己的教科书,每一个人都可以在自己课本上进行笔记,对其他同学没有影响。
(三)应用场景
当遇到如下情况需要使用static:
1.只想为特定域分配单一存储空间;
例如签到系统,定义静态变量sumPerson,可以每来一个人就++
//定义初始值为0
public static sumPerson =0;
public void person(string name){
this.name = name;
id = sumPerson++;
}
则每当调用一下person,sumPerson将进行+1操作

2.即使没有创建对象,可以被调用;(非static域和方法必须与某一特定对象关联,才可以访问数据或方法)
在这里插入图片描述
三、静态与非静态实例对比
(一)静态变量实例
(1)非静态变量
在这里插入图片描述
(2)静态变量
静态变量的对象引用
在这里插入图片描述
静态变量的类引用
在这里插入图片描述
(二)静态方法实例
(1)非静态变量
此处特意引用上面创建的A类静态变量,以此来说明在不同类中变量,静态变量也可以通过ClassName.VariableName的方式进行调用。
在这里插入图片描述
(2)静态变量
在这里插入图片描述
(三)静态代码块实例
1)非静态变量(2)静态变量
由上可以看出静态代码块在类加载的时候就执行了,即静态代码具有最高执行的优先级。

猜你喜欢

转载自blog.csdn.net/qq_44801116/article/details/105586632