static关键字
静态变量
静态变量是属于类的,和对象没有关系。
非静态变量是属于对象的,每一个对象都有一个这个数据的副本,而静态变量只有一个。
对于这个静态变量来说,不同的对象都可以使用引用修改这个静态变量。修改之后所有的对象再访问这个静态变量都是修改之后新的静态变量。
访问静态变量是通过如下方法实现的:
类名.静态变量名
下面具体举例说明:
静态变量类:
public class StaticNum {
public static int staticNum;
public StaticNum(){
super();
}
}
测试类:
public class TestStatic {
public static void main(String[] args) {
StaticNum sn1 = new StaticNum();
sn1.staticNum = 1;
System.out.println("使用sn1这个对象来对静态变量进行赋值:"+sn1.staticNum);
StaticNum sn2 = new StaticNum();
sn2.staticNum = 2;
System.out.println("sn2进行赋值后使用sn1进行访问:"+sn1.staticNum);
System.out.println("类名进行访问:"+StaticNum.staticNum);
}
}
输出结果为:
下面非静态变量就不再举例说明。直白点说就是一个对象就是有这个属性,自然不同对象之间的对象互不影响。
静态方法
用static关键字修饰的方法称之为静态方法,访问静态方法的方式如下:
类名.方法名
静态方法不能访问非静态变量;
非静态方法可以访问静态变量;
静态属性或方法是在类加载的时候产生的。
非静态的属性或方法是在new的时候产生的,而类的加载是优先于构造对象的(new)。
下面举例说明静态方法不能访问非静态变量:
而将num加上static关键字后,没有错误,说明静态方法可以访问静态属性。
public class StaticNum {
public static int staticNum;
public static int num;
public StaticNum(){
super();
}
public static void test(){
System.out.println(num);
}
}
非静态方法访问静态常量:
public class StaticNum {
public static int staticNum;
public static int num;
public StaticNum(){
super();
}
public void test(){
System.out.println(num);
}
}