在初学java时,是通过马士兵老师的J2SE视频入门的,老师从java环境的配置,编译和运行,一步步的引领我们走向java的世界。随着课程的深入,发现还是有一些与之前学习相类似的内容,当时没有总结的,现在拿出小demo来弥补一下。本篇博文主要复习一下static关键字的使用。
先上例子:
public class Cat{
private int sid=0;
private String name;
int id;
Cat(String name){
this.name =name;
id=sid++;
}
public void info(){
System.out.println("My name is " + name + " No." + id);
}
public static void main(String arg[]){
Cat.sid=100;
Cat mimi =new Cat("mimi");
Cat pipi=new Cat("pipi");
mimi.info();
pipi.info();
}
}
例子中没有使用static关键字,在运行时,Cat.sid=100;会报错,显示错误信息为Cannot make a static reference to the non-static field Cat.sid。
这是因为在主方法中使用了static关键字来声明,该方法就是静态方法,在调用时,不再针对某个对象调用,也就不会将对象的引用传递给它,所以在static方法中不可访问非static的成员变量。
例子中sid专属于某个对象的,只有实例化出某个对象后,该对象才会具有sid,若不实例化,则这个对象就不存在,该sid就不能使用。于是就可引出static关键,修改如下。
public class Cat{
private static int sid=0;
private String name;
int id;
Cat(String name){
this.name =name;
id=sid++;
}
public void info(){
System.out.println("My name is " + name + " No." + id);
}
public static void main(String arg[]){
Cat.sid=100;
Cat mimi =new Cat("mimi");
Cat pipi=new Cat("pipi");
mimi.info();
pipi.info();
}
}
在类中,只需将sid用static声明为静态成员变量,它为该类的公有变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。静态方法不会针对某个对象,没有对象照样可以调用。(类.方法名即Cat.静态方法名,不用写对象的名字,)也正因此,在static方法中不能访问非静态(非static)成员,上述例子的运行结果为:
My name is mimi No.100
My name is pipi No.101