static关键字初步认识:
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
举个例子:
<span style="font-size:18px;">class Person{
static String name ;
String sex;
public void eat(){
System.out.println("真好吃");
}
public void paly(){
eat();
Person.say();
this.sex = "男";
this.name = "胡博君";
}
public static void say(){
System.out.println("我要说话了");
}
public static void talk(){
eat(); //这里会报错
this.sex = "女"; //这里会报错
Person.name = "胡博君";
Person.say();
}
}</span>
总结说明:
根据上面的例子我们可以总结static的几个特性:
1、被static修饰的方法或者属性可以直接用类名来调用,当然也可以用对象来调用,最好用类名来调用。【play()方法里面就充分的证实了这一点】
2、被static修饰的方法中不能出现非static修饰的方法或者属性只能调用static修饰过的属性或方法,因为非static修饰的方法是属于对象的,而static修饰过的方法是在编译时期就产生的,static中不能出现未来的对象的方法也是符合逻辑的,因为我们无法调用未来的方法。【非static修饰的方法属于普通方法,也属于对象的方法。上面的talk()方法支持了此论述】
3、被static修饰的方法中不能出现this或者super,因为这些都是对象,static属性编译时期的产物,原因和第二点一样,编译时期的东西不能调用以后才能出现的对象的方法,就是说现在无法调用未来的方法或者说非static修饰的方法。【上面的talk()方法中支持了此论述】