static的作用
static是静态的意思,可以修饰成员变量和成员方法。
static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改。
static修饰成员变量的用法
成员变量分为两种
- 静态成员变量(有static修饰,属于类,内存中加载一次): 常表示如在线人数信息、等需要被共享的信息,可以被共享访问。
- 实例成员变量(无static修饰,存在于每个对象中):常表示姓名name、年龄age、等属于每个对象的信息。
static修饰成员变量的内存原理
第一步,会加载类到方法区,并且同时将静态成员变量也加载到堆内存中。此时是不加载普通成员变量的,因为普通成员变量是隶属于对象级别的,只有创建了对象才可以生成普通成员变量。
第二步,当代码中有类名直接打点调用静态成员变量时候,直接到堆内存中找就行。
第三步,当new对象的时候,此时栈内存中会有一个地址,同时堆内存中也会开辟一块空间给对象,当然,静态成员变量也是可以通过对象打点调用的,只不过不推荐。
static修饰成员方法的基本用法
成员方法的分类
- 静态成员方法(有static修饰,属于类),建议用类名访问,也可以用对象访问。表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法。
- 实例成员方法(无static修饰,属于对象),只能用对象触发访问。如果该方法是以执行一个通用功能为目的,或者需要方便访问,则可以申明成静态方法。
static修饰成员方法的内存原理
静态方法最初就加载到了方法区了,普通方法没有是因为普通方法隶属于对象级别的。当类名打点调用方法时候,直接就可以找到方法,同时也是可以通过对对象打点调用的。
static实际应用案例:定义工具类
- 工具类中定义的都是一些静态方法,每个方法都是以完成一个共用的功能为目的。
- 工具类的好处:一是调用方便,二是提高了代码复用
- 为什么工具类中的方法不用实例方法做?
- 实例方法需要创建对象调用,此时用对象只是为了调用方法,这样只会浪费内存。
- 建议将工具类的构造器进行私有,工具类无需创建对象。
- 里面都是静态方法,直接用类名访问即可。
static应用知识:代码块
1.代码块概述
代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外。
在Java类下,使用 { } 括起来的代码被称为代码块 。
2.代码块分类
3.静态代码块的作用
如果要在启动系统时对静态数据进行初始化。
建议使用静态代码块完成数据的初始化操作,代码优雅。
总结
不管是static修饰的成员变量还是成员方法,都是隶属于类级别的,都是可以实现共享的,相反的是隶属于对象级别的,根据不同的场合做出不同的选择。