1,静态变量
例1:
静态变量是属于类的,和对象没有关系。不管哪个对象操作静态变量,类中的静态变量都会改变,而其他类在调用该变量时都相应改变了。
非静态变量是属于某个对象的,一个对象赋值后,另一个对象调用不会相应改变。
public class StaticDemo {
int commonint = 0;
static int staticint = 0;
public static void main(String[] args) {
StaticDemo sd1=new StaticDemo();
StaticDemo sd2=new StaticDemo();
//为普通变量赋值
System.out.println("sd1被赋值前,sd1的普通变量值为:"+sd1.commonint);
System.out.println("sd1被赋值前,sd2的普通变量值为:"+sd2.commonint);
System.out.println("为普通变量sd1赋值为666");
sd1.commonint=666;
System.out.println("sd1被赋值后,sd1的普通变量值为:"+sd1.commonint);
System.out.println("sd1被赋值后,sd2的普通变量值为:"+sd2.commonint);
System.out.println("\r\n");
//为静态变量赋值
System.out.println("sd1被赋值前,sd1的静态变量值为:"+sd1.staticint);
System.out.println("sd1被赋值前,sd2的静态变量值为:"+sd2.staticint);
System.out.println("为静态变量sd1赋值为666");
sd1.staticint=666;
System.out.println("sd1被赋值后,sd1的静态变量值为:"+sd1.staticint);
System.out.println("sd1被赋值后,sd2的静态变量值为:"+sd2.staticint);
}}
输出结果为:
sd1被赋值前,sd1的普通变量值为:0
sd1被赋值前,sd2的普通变量值为:0
为普通变量sd1赋值为666
sd1被赋值后,sd1的普通变量值为:666
sd1被赋值后,sd2的普通变量值为:0
sd1被赋值前,sd1的静态变量值为:0
sd1被赋值前,sd2的静态变量值为:0
为静态变量sd1赋值为666
sd1被赋值后,sd1的静态变量值为:666
sd1被赋值后,sd2的静态变量值为:666
例2:
public class Student {
int id;// 学号
static int num = 0;
public Student(int id) {
this.id = id;
num++;
}
public static void main(String[] args) {
Student s1 = new Student(1);//调用一次有参构造方法,num加1
Student s2 = new Student(2);//调用一次有参构造方法,num加1
Student s3 = new Student(3);//调用一次有参构造方法,num加1
System.out.println("s1的学号:" + s1.id);
System.out.println("s2的学号:" + s2.id);
System.out.println("s3的学号:" + s3.id);
System.out.println("学生的个数为" + Student.num);//num是静态变量,属于类,故使用Student.num。
}
}
输出结果为:
s1的学号:1
s2的学号:2
s3的学号:3
学生的个数为3
2,静态方法
用static 修饰的方法称为静态方法
静态方法属于类,访问静态方法是通过(类名,方法名)