static关键字
一:static修饰方法
static修饰方法的特点:
①若一个方法被static修饰,则这个方法属于类的方法,此方法可以通过 类名.方法名的方式直接调用,不用创建对象后再进行调用
②static方法是类级别的,优于对象存在,被对象共享。
③static方法不能直接调用非static方法,非static方法可以直接调用static方法;
④static方法只能访问static的属性,非static方法可以访问到所有的属性。
public class Man {
public static String sex;
private String name;
private int age;
public Man(String name, int age) {
this.name = name;
this.age = age;
}
public static void A(){
// Man.B(); 若调用方法B,系统报错,将B改为static方法后才能调用
sex="男";//可以直接访问静态属性
// name="KIM"; 不可以直接访问非静态属性
// age=12;
System.out.println("静态方法");
}
public void B(){
A(); //可以直接调用static方法
sex="男";
name="jack";
age=12; //可以调用static和非static属性
System.out.println("非静态方法");
}
二:static修饰属性
static修饰属性的特点:
若一个属性被static修饰,则这个属性属于类的属性,全局共享,若在调用时改变它,则会将其他对象的此属性也改变。
public class Chinese {
public static String country="CN";
private String name;
private int age;
public Chinese(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return age+"岁的"+name+"是"+country+"人";
}
}
class ChineseTEST{
public static void main(String[] args) {
Chinese p1=new Chinese("JACK",12);
Chinese p2=new Chinese("ROSE",23);
System.out.println(p1);
System.out.println(p2);
//此时输出结果为:12岁的JACK是CN人
// 23岁的ROSE是CN人
p1.country="US";
System.out.println(p1);
System.out.println(p2);
//此时输出结果为:12岁的JACK是US人
// 23岁的ROSE是US人
}
}
上述代码可以看出,改变static变量country的值后,其他对象该属性的值也随之变化,验证了上述结论。
三:static修饰变量
常见一个对象时,如果这个对象中某个变量是固定不变的值的时候,可以将这个变量用static修饰,让所有对象共享。