Java中static关键字的使用
- 修饰内容:
可以修饰属性、方法、代码块、内部类 - static修饰属性
称为静态属性:所有对象都共享同一个静态变量;当通过某一个对象修改静态变量时,其他对象调用改对象时,也是修改之后的
① 静态属性随着类的加载而加载,非静态属性随着对象的实例化而加载
② 静态属性的加载早于对象的创建
③ 类只会加载一次,所以静态变量也只存在一份,存在方法区的静态域中 - static修饰方法
称为静态方法:通过类调用
① 随着类的加载而加载,通过"类.静态方法"或者”对象.静态方法“的方式调用
② 静态方法中,只能调用静态的方法或属性
③ 非静态方法中,既可以调用非静态方法或属性,也可以调用静态的方法或属性 - 如何确定一个属性是否要声明为一个静态属性?
当属性是可以被多个对象所共享的,不会随着对象的不同而不同 - 如何确定一个方法是都要声明为一个静态方法?
① 操作静态属性的方法,设置为static的
② 工具类中的方法,比如Math、Arrays等 - 常见问题
① 在静态的方法内,不能使用this和super关键字
② 关于静态方法和属性的使用,从声明周期考虑比较好理解;
public class statictest {
public static void main(String[] args) {
Chinese c1 = new Chinese();
c1.name = "刘翔";
c1.age = 35;
Chinese c2 = new Chinese();
c2.name = "姚明";
c2.age = 40;
c1.nation = "中国国籍";
System.out.println(c2.nation);
//类直接调用静态方法
Chinese.show();
c2.show1();
c2.show();
}
}
class Chinese{
String name;
int age;
static String nation;
public void show1() {
System.out.println("我是中国人");
}
public static void show() {
System.out.println("中国");
}
}
上述代码执行结果:
中国国籍
中国
我是中国人
中国