在Java中,static可以用来修饰成员变量和成员方法。
修饰成员变量,称为静态成员方法
修饰静态方法,称为静态成员方法
搞清楚用法和区别之前,先搞清static声明的变量和普通非静态变量在内存的分布是怎样的,这样的话,理解起来会事半功倍的。
代码测试如下:
public class Person { static String firstName; String lastName; public void showName(){ System.out.println(firstName+lastName); } public static void viewName(){ System.out.println(firstName); } }
public static void main(String[] args) { Person p =new Person(); //p.firstName="张"; Person.firstName = "张"; p.lastName="三"; p.showName(); Person p2 =new Person(); //p2.firstName="王"; Person.firstName="王"; p2.lastName="隔壁"; p2.showName(); }
运行结果:
张三 王隔壁
在内存的结果分析如下:
静态成员变量加载在方法区,声明一次,即可被所有类对象所使用
非静态成员变量加载在堆内存,是每个对象内部维护的独立变量,互相之间没有影响
具体测试如下:
用法一:Static修饰成员变量
(1)修饰成员变量,叫做静态成员变量
作用:静态成员变量被当前所有类对象所共享
内存:存储在方法区内
调用:A:类名.静态成员变量 推荐使用
B:对象.静态成员变量 不正规
public static void main(String[] args) { Person p =new Person(); //p.firstName="张"; Person.firstName = "张"; p.lastName="三"; p.showName(); Person p2 =new Person(); //p2.firstName="王"; Person.firstName="王"; p2.lastName="隔壁"; p2.showName(); } 运行结果: 张三 王隔壁
(2)修饰成员方法,叫做静态成员方法
作用:静态成员方法中只能直接的使用静态成员方法和调用其他静态成员方法
调用:A:类名.静态方法 推荐使用
B:对象.静态方法 不正规
public static void main(String[] args) { Person p =new Person(); //p.firstName="张"; Person.firstName = "张"; p.lastName="三"; p.showName(); Person p2 =new Person(); //p2.firstName="王"; Person.firstName="王"; p2.lastName="隔壁"; Person.viewName(); } 运行结果: 张三 王
区别:非static修饰的成员变量和成员方法
(1)非static修饰的成员变量 也称实例变量
作用:是每个对象内部维护的独立变量,互相之间没有影响
内存:存储在堆内存中
调用:对象.成员变量 唯一方式
(2)非static修饰的成员方法 也称实例方法
作用:方法中可以使用静态和非静态的成员方法和成员变量
调用:对象.成员方法