首页 > 技术文章 > java-static

zimo-bwl1029-s 2019-07-30 20:22 原文

1.static是Java中的一个关键字,单词本身是静态的含义

2.使用static修饰的成员成为静态成员,是属于某个类的;而不使用static修饰的成员成为实例成员,是属于类的每个对象的。

3.一个类的成员包括:成员变量,成员方法,构造方法,代码块,内部类·;

static可以修饰除了构造方法之外的成员(成员变量,成员方法,,代码块,内部类·);

一一说明

1.static修饰成员变量

static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。

static变量和非static变量都是成员变量,这是共同点,区别主要有:

1).在内存中份数不同

不管有多少个对象,static变量只有1份。对于每个对象,实例变量都会有单独的一份

非static变量好比是水杯,1个学生1个;static变量好比是饮水机,大家共享

2.在内存中存放的位置不同

静态变量存在方法区中,     实例变量存在堆内存中 

3.访问的方式不同

实例变量: 对象名.变量名

静态变量:对象名.变量名,不推荐如此使用;类名.变量名,推荐使用

4.在内存中分配空间的时间不同

实例变量:创建对象的时候才分配了空间。

静态变量:第一次加载类的时候;

 

2.static修饰成员方法

可以通过对象名.方法名类名.方法名两种方式来访问

). 1.static变量
). 2.static方法

总结1:static方法的作用
访问static变量和static方法

总结2:static方法的调用方式
1.通过类名调用 Student.showClassRoom(); 推荐该方式
2.通过对象名访问 stu1.showClassRoom();

总结3:不可以
静态方法中不可以访问非静态变量
静态方法中不可以访问非静态方法
静态方法中不可以访问this
理解:加载类的时候就加载静态变量和静态方法,此时可能还没有创建对象,所以非静态变量和非静态的方法还没有分配空间,
无法访问
总结4:可以
非静态方法中可以访问静态变量
非静态方法中可以访问静态方法
非静态方法中可以访问this
理解:加载类的时候就已经加载静态变量和静态方法,创建对象后,非静态变量和非静态的方法才分配空间,
此时静态变量和静态方法已经存在,可以访问

3.static修饰代码块

).1.static变量
).2.static方法
).3.static代码块

总结1:代码块
1.位置:类中
2.数量:多个
3.执行顺序:依次执行
4.执行时间:每次创建对象的时候都执行;先执行代码块,再执行构造方法
5.作用:实际开发中很少用;
可以将各个构造方法中公共的代码提取到代码块
匿名内部类不能提供构造方法,此时初始化操作放到代码块中

总结2:static代码块
1.位置:类中
2.数量:多个
3.执行顺序:依次执行
4.执行时间:第一次加载类的时候执行,只执行一次
5.作用:给静态变量赋初始值
实际开发中使用比较多,一般用于执行一些全局性的初始化操作
1.创建工厂
2.加载数据库初始信息
.....
总结3:一个类的成员
三大成员
1.成员变量(非静态、静态的)
2.成员方法(非静态、静态的)
3.构造方法(全部都是非静态的)
三小成员
4.代码块
5.静态代码块
* 6.内部类(非静态的,静态的)

4.static修饰内部类

属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),.可以访问外部类的静态成员

5.静态导入

import static java.lang.Math.*; 非导入类和接口,而是导入类和接口的静态成员

推荐阅读