Preface:
修饰符:
修饰符用来定义类、方法或者变量,通常放在语句的最前端[1]
Java语言提供了很多修饰符,主要分为以下两类:
- 访问修饰符
- 非访问修饰符 √ static
目录
static:
static: (例)main方法都被标记为static修饰符
静态修饰符: 标识成员 可以被 类 直接调用
static:可以被类名直接调用 类名.属性名 类名.方法名
静态域:如果将域定义为static,每个类中只有一个这样的域。每个对象对于所有的实例域却都有自己的一份拷贝。即所有实例共享一个静态域。即使没有对象,静态域也存在,它属于类,而不属于任何独立的对象[2]
static声明的
-
静态成员变量
声明为static关键词修饰的变量叫做静态成员变量,也叫全局变量
静态成员变量的访问方式:
(1)直接通过类名调用类的静态成员变量: 类名.静态成员变量名
(2)通过对象名调用类的静态成员变量: 对象名.静态成员变量名
-
静态成员方法
声明为static关键词修饰的方法叫做静态成员方法,静态方法是一种不能向对象实施操作的方法,如:Math类的pow方法就是一个静态方法,表达式
Math.pow(x,a)
计算x的a次幂。在运算时,不适用任何math对象,换言之没有隐式参数。也可以理解为,静态方法是没有 this 的方法(非静态方法中,this表示该方法的隐式参数)
静态成员变量的访问方式: [3]
(1)通过类名调用类的静态成员方法: 类名.静态成员方法名(成员方法调用参数列表)
(2)通过实例对象名调用类的静态成员方法: 对象名.静态成员方法名(成员方法调用参数列表)
在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。所以,当一个数据需要给同一类的所有对象使用时,需要用static修饰
-
静态代码块
执行优先级最高
-
静态内部类
(to be continued)
-
静态导包
静态导包就是java包的静态导入,用import static代替import静态导入包是JDK1.5中的新特性,一般我们导入一个类都用 import com…..ClassName;而静态导入是这样:import static com…..ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个.* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用[4]
总结:
static与非static区别
- static修饰的成员是随着 类 的加载而加载(优先)
非static成员是随着 对象 的创建而加载
- 静态方法、静态代码块只能调用 静态 成员,非静态成员是不能直接调用的,创建对象(不能使用this关键字)
非静态方法可以直接调用非静态成员,也可以调用静态成员.类的对象进行调用静态成员
- 静态成员对于多个对象而言是 共享 的
非静态成员对于多个对象是彼此独立的
引用:
[1] haiguiking 创建.Java 修饰符[OL],北公爵无欢 最后一次修改 2015-09-09,https://www.w3cschool.cn/java/java-modifier-types.html
[2]Horstmann,C.S.,Cornell,G.著;周立新等译.Java核心技术 卷Ⅰ 基础知识(原书第9版)书名原文:Core Java Volume Ⅰ——Fundamentals(Ninth Edition)[M].北京:机械工业出版社,2013.11:P 131-134.
[3]热血小码哥.static的用法(一):静态成员变量和静态成员方法[OL],2018年03月15日 18:02:47,https://blog.csdn.net/mmayanshuo/article/details/79571795
[4] Leon_zx.static特别用法【静态导包】——Java包的静态导入[OL],2016年03月29日 23:25:35,https://blog.csdn.net/u012338954/article/details/51010337