java static作用体_Java:static的作用分析

static表示“静态”或者“全局”的意思,但在Java中不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。

一、静态变量

1. Java中存在两种变量,一种是static修饰的静态变量,又称为类变量。另一种是没有被static修饰的变量,称为实例变量。

2. 被static修饰的成员变量或成员方法独立于该类的任何对象(实例),被所有类对象共享。如果一个实例对象对静态成员变量做了修改,其他实例对象访问该静态成员变量也会受到影响。

1 packagecom.huiAlex;2

3 public classCat {4 privateString name;5 private static intage;6 privateString color;7

8 public static voidmain(String[] args) {9 Cat cat1 = newCat();10 Cat cat2 = newCat();11

12 cat1.color = "white";13 cat1.name = "小花";14 cat1.age = 4;15

16 cat2.color = "black";17 cat2.name = "小黑";18

19 System.out.println("小黑的年龄是: "+cat2.age);20 }21 }

以上代码中,cat1对静态变量age进行了修改,cat2访问age时,age已经被修改过了。在实际应用中,一定要小心使用静态变量。虽然可以达到共享成员变量的目的,但是也使得成员变量难以控制,可能带来意想不到的问题。

60079a4b5cd290aa72fdf3459305b5b1.png

3. 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)

二、静态方法

1. 静态方法可以直接通过类名进行调用,也可以通过任何实例对象进行调用(不推荐)

1 packagecom.huiAlex;2

3 public classCat {4 privateString name;5 private static intage;6 privateString color;7

8 public static voidmain(String[] args) {9 Cat cat1 = newCat();10

11 System.out.println(Cat.Meow());12 System.out.println(cat1.Meow());13 }14

15 public staticString Meow(){16 return "猫都会喵喵叫~";17 }18 }

a7d1046d99f758318f025450e974c174.png

2. 静态方法必须被实现,不能是abstract类型

3. 静态方法中不能使用this和super关键字

49e78a14dfc71290f9d71520561f31ca.png

4. 静态方法中只能直接访问静态变量和其他静态方法,如果需要访问其他非静态成员变量或成员方法,必须先实例化一个对象,再通过对象进行访问。

1 packagecom.huiAlex;2

3 public classCat {4 privateString name;5 private static intage;6 privateString color;7

8 public static voidmain(String[] args) {9 System.out.println(Cat.Meow());10 }11

12 publicString likeWarm(){13 return "猫都喜欢暖和的地方";14 }15

16 public staticString likeFish(){17 return "猫都喜欢吃鱼";18 }19

20 public staticString Meow(){21 Cat.age = 8; //直接访问静态成员变量

22 Cat cat2 = newCat();23 cat2.name = "小花"; //通过实例化后的对象访问非静态成员变量

24 System.out.println("这只猫叫 "+cat2.name);25 System.out.println(Cat.likeFish()); //直接访问静态方法

26 System.out.println(cat2.likeWarm()); //通过实例化后的对象访问非静态方法

27

28 return "猫都会喵喵叫~";29 }30 }

ca5699f0f645cae7befe9855d9d566a8.png

三、static代码块

1. static代码块也叫静态代码块,是在类中独立于类成员的static语句块

2. 可以存在多个静态代码块,不能放在任何的方法体内

3. JVM加载类时会执行这些静态的代码块

4. 如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

1 public classCat {2 privateString name;3 private static intage;4 privateString color;5

6 static{7 Cat.age = 2;8 System.out.println(age);9 Cat cat = newCat();10 System.out.println(cat.likeWarm());11 }12

13 public static voidmain(String[] args) {14

15 }16

17 publicString likeWarm(){18 return "猫都喜欢暖和的地方";19 }20

21 static{22 Cat.age = 4;23 System.out.println(age);24 Cat cat1= newCat();25 cat1.name = "小花";26 System.out.println(cat1.name);27 }28 }

运行结果:

a13136d5b49cbbcfa3a1539b853b683e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值