static关键字
- 被static修饰的成员变量属于类,不属于这个类的某个对象.
- 多个对象在访问或修饰static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值也会跟着改变,即多个对象共享同一个static成员变量.
public class Demo{
public static int num = 100;
}
public class Test{
public static void main(String[] args){
Demo d1 = new Demo;
Demo d2 = new Demo;
d1.num = 200;
System.out.println(d1.num);
System.out.println(d2.num);
}
}
- 被static修饰的成员可以并且建议通过类名直接访问.
- 类名:静态成员变量名.
- 类名:静态成员方法名(参数)
- 对象名:静态成员变量名–不建议使用该方式,会出现警告
- 对象名:静态成员方法名(参数)–不建议使用该方式,会出现警告
public class Demo{
public static int num = 100;
public static void method(){
System.out.println("静态方法");
}
}
public class Test{
public static void main(String[] args){
Demo.method();
System.out.println(Demo.num);
}
}
static 注意事项!
- 静态内容是优先于对象存在,只能访问静态,不能使用this/super.静态修饰的内容存于静态区.
class Demo{
public int num= 100;
public static void method(){
System.out.println(this.num);
}
}
public class Demo{
public static int conn=122;
public static void method(){
System.out.println(conn)
}
}
- main方法为静态方法仅仅为程序执行入口,它属于任何一个对象,可以定义在任意类中.
静态代码块与构造代码块
public class Person{
static{
System.out.println("静态代码块");
}
{
System.out.println("构造代码块");
}
}
- 加载顺序:静态代码块 -> 构造代码块 -> 构造代码.