(java面向对象)static认知(not completed)

Preface:

修饰符:

修饰符用来定义类、方法或者变量,通常放在语句的最前端[1]

Java语言提供了很多修饰符,主要分为以下两类:

  • 访问修饰符
  • 非访问修饰符  √    static​​​​​​​

目录

Preface:

修饰符:

static:

静态成员变量

静态成员方法

静态代码块

静态内部类 

静态导包      

总结:

static与非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

上一篇:Java 8 并发编程


下一篇:CCF 201703-2 学生排队(C++)