大家好,我是良辰丫,今天我和大家分享的是java中的static成员,static说难不难,说简单也不简单,主要是细节,很多情况下,你使用了static,却不知道为什么会报错,嘿嘿嘿,细节决定成败,不要着急,我们慢慢往下说。💖💖💖
🧑个人主页:良辰针不戳
📖所属专栏:EveryDay学java
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💞愿与君为伴,共探Java汪洋大海。
目录
- 1、简述static
- 2、static修饰成员变量
- 3、static修饰成员方法
- 4、static成员变量初始化
- 5、总结static
1、简述static
static在英文中的意思是静态的,因此呢,它也具有了很多静态的属性,但是它和大家所学的C语言里面的static是不同的,为什么呢?因为java中的static属于类,而C语言没有类这个概念。文字说的再多也不够生动,大家也不能够理解,那我们先拿例子简单理解一下。
①没有static修饰的成员属性被func方法调用,即使num是public,它也没有直接调用的权利。
②调用前new一个对象,通过对象进行调用就不会报错,理解困难的话大家可以想象成你要向别人借东西,必须先和别人说一下,new可以理解为申请权限。
③是不是突然发现很神奇,num被static修饰后,可以直接调用了,这就验证了static修饰的成员属性属于类,而不是对象,为什么可以直接调用呢?因为对象也属于类,他们两个平起平坐。
看完上面,想必大家已经对java中的static有了一定的了解,我们接下来继续介绍static的具体用法。
2、static修饰成员变量
static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。还是那句话,可以理解为static修饰的成员变量和对象平起平坐。
- 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中。
- 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问。
- 类变量存储在方法区当中。
- 生命周期伴随类的一生(类结束生命周期,static也将结束)
①name和main方法在同一个类中,直接通过name就可以调用。
②main方法和name在不同的类中,只通过name调用会报错。
③static修饰的成员属性,通过类名.属性名字就可以调用,通过对象也可以调用,但是介意大家使用类名调用,因为static修饰的属性本来就属于类。
④static修饰的属性通过对象进行访问。
3、static修饰成员方法
一般而言,我们在类中定义成员属性的时候,我们总会把属性弄成私有的private,保证程序的安全。那么我们如何调用这个属性呢?
①把该属性的值传给一个静态方法,通过调用该方法达到传值目的。
②方法不是静态的时候,直接调用时会报错,注意是直接调用报错,而不是不能调用。
③通过对象调用方法,也能达到调用的目的。
静态方法特性:
- 不属于某个具体的对象,是类方法。
- 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者。
- 不能在静态方法中访问任何非静态成员变量(或者成员方法)。
- 静态方法无法重写,不能用来实现多态。
4、static成员变量初始化
- 静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性。
- 静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。
- 就地初始化
就地初始化指的是:在定义时直接给出初始值。
- 静态代码块初始化。
- 下面的初始化就会报错。
5、总结static
看了上面那么多,其实内容没大家想的那么理解,熟悉了就会很简单,谁一生下来就会跑呢?那么我们简单的做一下总结。
- 静态方法不能直接调用非静态变量(成员方法),若用,通过对象调用。
- 非静态的方法可以使用类的静态或非静态成员。
- 在方法中,static不能修饰属性,如 static int num = 10;
- 系统仅为系统单元分配一个存储单元,所有对象共享这个静态成员变量,若某个对象修改了静态成员变量的值,所有对象使用的都将是修改后的静态成员变量值。
- 静态成员方法可以通过类名访问,即不需要实例化就可以调动静态成员方法,同时也可以通过对象名访问。