11 static关键字

2020-02-07  本文已影响0人  ca8519be679b

我们之前定义的方法有的有static,有的没有,到底什么时候加呢

1

如上图,我们定义学生类,实例可能每个人有不同的姓名年龄学号,但是他们同班同学拥有同一个教室,如果我们给每个人都单独分配教室的空间就浪费了,static的作用是,成员变量变成类所属,而不再是实例所属,多个对象共享同一个数据

同样,static也可以修饰方法,修饰后方法变成了静态方法而非实例方法

2 3

如上2,3图,我们定义个类MyClass里面定义了静态方法,我们实例和类都可以调用,但是比较推荐的是使用类,使用实例的调用静态方法经过javac编译后也会变成类,对于本类中的调用静态方法,可以省略类名称

4

注意事项1,静态方法只能访问静态变量,不能访问非静态变量(静态先创建,非静态后创建,先人不知道后人,而后人知道先人)

5

如上,我们定义了静态方法,也定义了静态变量,我们静态方法调用非静态变量会标红,非静态方法是可以调用非静态变量和静态变量的

注意事项2,静态方法里不能使用this,因为this表示当前对象,而静态方法是针对类的

静态方法内存分析

6

在内存中,我们知道方法区,对于实例,不额外分配静态空间,而是在方法区内又开辟了静态区存储静态变量,如上图,当我们尝试使用类名或者实例访问静态属性时(实例会被编译成类),就会直接在静态区去找这个静态变量

静态代码块

格式   类内static{代码块}        效果当类第一次使用时,运行唯一的一次

7 8

当我们如上定义了MyClass,可以看到我们对静态代码块和构造方法都设置了打印,如果我们在Demo的main里没写MyClass相关,是不会打印任何东西,但是我们实例后会执行构造方法,我们这里查看哪个先运行,可以看到静态代码块先于构造方法执行

9

如上,我们又创建了实例,可以看到静态代码块只执行了一次,静态代码块在严格要求执行一次的场合很有用

上一篇下一篇

猜你喜欢

热点阅读