关于static关键字的理解
static英文意思就表示精致的,不变的,在编程语言中表示静态的意思,用在类的属性方法前面,主要用来修饰成员变量和成员方法。被static修饰的变量叫类变量或和静态变量,没有被static修饰的叫实例变量。
对于静态方法,不需要创建实例对象就可以直接访问,不依赖于任何实例,被类的所有实例共享,在Java中,java虚拟机只为其及分配一次内存,在类的加载过程中完成内存的分配,静态变量可以通过类名直接访问,比如
public class test
{
private static int i;
private string j;
}
在你调用i时,只需通过test即可访问,你不必再去为此为实例一个对象就可以去调用。假如你实例了两个对象,一个叫apple,一个叫bananas,他们都有一个叫name的属性,但是他们这两个name都是属于自己的,是不相同的,如过name是静态属性,则这两个name只会被分配一次内存,java不会因为你创建了第二个对象而再次分配内存,这样的话,你第二次为name赋值,则之前的name属性就会被覆盖,概括以上两点好处就是,static可以省内存,而且调用时会很方便。
对于静态方法,只能通过类名直接调用而不是通过实例对象。静态方法不能访问所属类的实例变量的方法和属性,因为实例对象与特定的属性相关联,它们是对象私有的,而静态方法是全局的,静态方法中引用任何实例变量都是非法的。打个比方:类就相当于一个餐馆,静态方法就相当于一个服务员,对象的方法就相当于顾客,服务员和顾客都在类里面,对象方法(顾客)可以直接调用(呼叫服务)静态方法(服务员),而服务员则不能随意叫你做什么,因为顾客是局部的私有的,各个顾客互不相干的,但是服务员是所有顾客共享的。当然,比喻可能不是很恰当,也许你会有更好的方法去理解他们之间的关系。
是不是把所有的方法或变量声明成静态的好呢?当然不是,而且正好相反,只有在需要的时候才把对应的方法声明成静态的,一个类内部的方法一般都是非静态的。一下几种情况就是静态方法使用的一些限制:
1. static方法只能调用其他的static方法;
2. 他不能引用this和super关键字

浙公网安备 33010602011771号