概述
该单词是“静态”的意思,可以用来修饰成员变量和方法
为什么出现static?
比如:
有一个Person类代表所有的男人,这个类的所有对象的性别属性的值是 “ 男 ” ,类中按正常的属性描述 “ 男 ” ,创建具体的人 对象的时候,每一个对象的空间中都得开辟一个属性空间用来存放 “ 男 ” 这个性别。不同的对象开辟了相同属性的空间,用来存放相同的值,是一个重复的动作,而且占用了内存空间,有点多余,浪费资源【时间和空间】。static解决这个问题:所有的对象都是一样,把这个属性在类描述的时候单独拧出来放一个地方【不属于任何的对象】所有的对象不需要开辟空间存放属性(存在于方法区的静态区),都来共享一个数据就可以。
类描述的时候把属性单独化,不是普通的描述,体现单独性,java就使用关键字static来修饰这个属性
static修饰的内容
成员变量: 类变量
成员方法: 类方法
static修饰的成员变量:
该变量叫静态变量(类变量),静态变量被该类下所有的对象所共享
注意事项:
随意修改静态变量(类变量)的值是有风险的,为了降低风险,可以同时用final关键字修饰,即公有静态常量(注意命名的变化)
static修饰成员方法
静态方法
静态方法中没有对象this,所以不能访问非静态成员
静态方法使用场景
只需要访问静态成员时;
不需要访问对象状态,所需参数都由参数列表显示提供
共性特点:
1、属于类
2、可以被所有的对象共享
3、优先于对象存在
4、随着类的加载而加载【创建】
5、使用:类名调用
调用方式
类名.成员变量名
类名.成员方法名(参数)
为什么静态成员访问不了非静态成员?
类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问(类名.方法|类名.变量);
非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。