Java static关键字修饰成员变量和成员方法 调用

【摘要】 在Java中,static关键字可以用来修饰成员变量、成员方法、静态代码块、静态内部类、静态导包等*。 能力所限,本篇目前仅能讨论static修饰成员变量、成员方法时的使用情况。
静态变量
在一个java类中,可以用static关键词来修饰成员变量,该变量被称作静态变量。
此静态变量在内存中只有一份,并且能够被一个类中的所有实例对象共享。也正因为在一个类的内存中只…

在Java中,static关键字可以用来修饰成员变量成员方法静态代码块静态内部类静态导包等*。
能力所限,本篇目前仅能讨论static修饰成员变量成员方法时的使用情况。

静态变量

在一个java类中,可以用static关键词来修饰成员变量,该变量被称作静态变量。

此静态变量在内存中只有一份,并且能够被一个类中的所有实例对象共享。也正因为在一个类的内存中只有一份,所以也可直接使用”类名.变量名“的方式进行访问。
访问值和修改值都是可以进行的。

该静态变量有两种访问形式:
(1)类名.变量名
(2)实例对象名.变量名

代码示例:

package com.company;

class City{ static String CountryName;
}

public class Main { public static void main(String[] args) { City Beijing = new City(); City Shanghai = new City(); City.CountryName = "China";//类名.变量名    System.out.println(Beijing.CountryName);//实例对象名.变量名 System.out.println(Shanghai.CountryName); Shanghai.CountryName = "中国"; System.out.println(Shanghai.CountryName); System.out.println(City.CountryName); }
}
  
 

运行结果:

China
China
中国
中国

  
 

另外static关键字只能用于修饰成员变量,不能用于修饰局部变量,如下代码会编译报错:

class City{ static String CountryName; public void setCountryName(){ static String countryname = "China";//错误使用 }
}

  
 

报错:

java: 非法的表达式开始
IDE提示:Make 'countryname' not static

  
 

静态方法

同样的,静态方法有两种调用形式:
(1)类名.方法名
(2)实例对象名.方法名

代码示例:

package com.company;

class City{ static String CountryName = "China"; public static void getCountryName(){ System.out.println("country name is:" + CountryName); }
}

public class Main { public static void main(String[] args) { City Beijing = new City(); City Shanghai = new City(); City.getCountryName();//类名.方法名    Beijing.getCountryName();//实例对象名.方法名 Shanghai.getCountryName(); }
}
  
 

###关于静态方法、静态变量、非静态方法及非静态变量之间访问的关系:
1.静态方法只能访问静态变量,而不能直接访问非静态变量:
原因:非静态变量需要先创建对象才能访问,而静态方法在被调用时可能没有对象被创建,在这种情况下静态方法就不能访问非静态变量。
如下代码会报错:

class City{ static String CountryName = "China"; int PeopleNum = 0; public static void getCountryName(){ System.out.println(PeopleNum);//错误使用 }
}

  
 

2.如上所属,如果我们想要在静态方法中调用非静态变量,则只能在对象被创建后访问,即将对象作为静态方法的形参:

class City{ static String CountryName = "China"; int PeopleNum = 0; public static void getPeopleNum(City x){ x.PeopleNum = 900000;//在静态方法中调用非静态变量 System.out.println("PeopleNum is:" + x.PeopleNum); }
}
public class Main { public static void main(String[] args) { City Beijing = new City(); City.getPeopleNum(Beijing); }
}
  
 

运行结果:

PeopleNum is:900000

  
 

3.我们可以使用同样的原理,在静态方法中调用非静态方法:

class City{ static String CountryName = "China"; int PeopleNum = 0; int Yonger = 20000; int Older = 70000; public void getPeopleSum(){ PeopleNum = Yonger + Older; } public static void getPeopleNum(City x){ x.getPeopleSum();//在静态方法中调用非静态方法 System.out.println("PeopleNum is:" + x.PeopleNum); }
}
public class Main { public static void main(String[] args) { City Beijing = new City(); City.getPeopleNum(Beijing); }
}
  
 

运行结果:

PeopleNum is:90000

  
 

4.众所周知,静态方法调用静态变量、静态方法,非静态方法调用静态变量、静态方法、非静态变量、非静态方法,都是可行的,在此就不再用代码演示。

最后我们使用表格展示他们之间的调用关系:

静态方法 非静态方法
被调用者
静态变量
非静态变量 将对象作为静态方法的形参 ,在方法中通过“形参对象名.变量名.”访问
静态方法
非静态方法 将对象作为静态方法的形参 ,在方法中通过“形参对象名.方法名.”调用
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享