static:静态的,和对象无关的
1.修饰成员变量(类属性)
1.1 代码示例:
public class StaticDemo {
private static int age = 18;
private String name = "待取" ;
public static void main(String[] args) {
StaticDemo girl1 = new StaticDemo();
System.out.println(girl1.name); //待取
System.out.println(girl1.age); //18
System.out.println(StaticDemo.age); //18
// System.out.println(StaticDemo.name); 不允许
girl1.name = "小美";
girl1.age = 20;
//此时修改了年龄则其他对象都会同步此属性
StaticDemo girl2 = new StaticDemo();
StaticDemo boy = new StaticDemo();
System.out.println(boy.age); //20
System.out.println(girl2.age); //20
System.out.println(boy.name); //待取
System.out.println(girl2.name); //待取
}
}
1.2 内存分析图:
- 一般属性,保存在堆内存中,且每个对象独享属性。
- 属性加上static后,为共享属性;static属性又称类属性,保存在全局的内存中,所有的对象都可对其访问。
1.3 结论
- 访问static属性(类属性)应使用类名称.属性名(PS:static可以被类或者对象访问,但static表示的意义是这个成员属于类而不是实例,所以应使用 “类名称.属性名” 。 代码中是为了好区分举例使用)
- 所有的非static属性(实例变量) 必须在对象实例化后使用,而static属性不受对象的控制。
2.修饰成员方法(类方法)
2.1 代码示例:
class Animal {
private static String settle;
private String name;
private String color;
public Animal(String name, String color) {
this.color = color;
this.name = name;
}
public static void setSettle(String m) {
settle = m; //不能是name = m;
}
public void getInfo() {
System.out.println("姓名:" + this.name +
"颜色:" + this.color + "居住地:" + this.settle);
}
}
public class StaticDemo2 {
public static void main(String[] args) {
Animal.setSettle("zoo");
Animal animal = new Animal("兔子","white");
animal.getInfo();
}
}
2.2 总结
- 调用static方法时,可以直接使用类名称.方法名(static修饰的方法是类的方法,不需要定义对象就可以直接被调用;非static方法是对象的方法,需要 对象名.方法名 来调用方法。)
- 所有的static方法不允许调用非static定义的属性或方法。
- 所有的非static方法允许访问static方法或属性
- 即静态方法中,无法直接使用this关键字和super关键字;无法直接访问普通属性;无法调用普通方法。
除此之外,类还在类和静态代码块中使用。