static的作用:由于类是对象的模型,基于一个类可以生成多个对象,每个对象都有自己的成员变量和方法,每个对象之间是相互独立的,但是有的时候我们希望这些对象可以共享一个成员变量,那么在这种情况下使用static。
static可以修饰变量、方法、代码块。静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载!
- 修饰变量
修饰变量时,使用变量的方法:
public class Vehicle {
static int engineNum = 1;//static修饰的变量
public int wheel;
public void func() {
System.out.println("便于出行!");
}
}
public class TestStatic {
public static void main(String[] args) {
System.out.println("引擎数量:" + Vehicle.engineNum);//使用类名访问
Vehicle v = new Vehicle();
System.out.println("引擎数量:" + v.engineNum);//使用对象名访问
}
}
可以使用类名直接访问静态变量,也可以通过新建对象,然后通过对象调用变量。
- 修饰方法,static修饰方法,则方法就被称为静态方法,经常使用的main方法就是静态方法。静态方法可以访问同类中的静态变量,无法直接访问非静态变量。同理,静态方法中可以直接调用本类中静态方法,但是不能直接调用非静态方法。在静态方法中访问静态变量和静态方法只能通过创建对象来访问。
public class TestStatic {
public static String brand = "made in China";
public String color = "red";
public static void main(String[] args) {
System.out.println(color); //编译出错
show();//编译出错
TestStatic ts = new TestStatic();
System.out.println(ts.color);//通过对象访问
ts.show();//通过对象调用
}
public void show() {
System.out.println("出行工具!");
}
}
- 非静态方法可以直接访问或者调用本类中的静态或者非静态的变量和方法
public class TestStatic {
public static String brand = "made in China";
public String color = "red";
public static void main(String[] args) {
}
public void show() {
System.out.println("出行工具!");
System.out.println(brand);//可以访问静态变量
System.out.println(color);//可以访问非静态变量
start();//访问非静态方法
main(new String[]{});//访问静态方法
}
public void start() {
System.out.println("发动!");
}
}