static静态方法和静态变量

  静态方法和静态变量就是那些用static关键字修饰的方法或者变量,如private static String university就声明了一个静态成员变量。

  静态成员变量是属于整个类的,而不是属于有某个具体的实例对象。对于静态成员变量,在内存中只会有一个副本,所有的对象共享这个副本,如果尝试改变这个变量的值,那么将会对所有共享它的对象都产生影响。比如,如果尝试修改上述定义的university,则对于其所有的实例对象student都将起到作用。而非静态的变量则为每个对象独有,改变其值对于其它对象没有影响。

  静态方法与静态变量一样,也是属于整个类的,而非属于具体的对象。静态方法是类方法,可以不用声明对象,直接通过“类名.方法名”来调用,也可以声明对象后,用“对象名.方法名”来调用;而非静态的方法则只能用“对象名.方法名”进行调用。

  此外,在非静态的方法中可以直接调用静态的成员变量,也可以调用静态的方法tai=,而在静态的方法中不能直接调用非静态的方法和变量。这是因为静态的变量、方法都是在类加载时就分配了内存空间,而非静态则要在创建对象时才分配。这导致在静态方法中调用非静态时无法找到非静态的位置信息,无法调用。因此,在静态方法中,不能用this或者super在静态方法中可以直接使用静态方法和静态变量,也可以使用本方法内的局部变量和方法,也即在方法内创建一个对象后,对该对象用其非静态方法。

  由于static方法、变量属于类,非static属于对象,二者的生命周期也是不同的。静态方法的生命周期跟相应的类一样长,静态方法和静态变量会随着类的定义而被分配和装载入内存中。一直到线程结束,静态属性和方法才会被销毁。而非静态方法的生命周期和类的实例化对象一样长,只有当类实例化了一个对象,非静态方法才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁。

posted @ 2022-06-06 21:41  地瓜丸  阅读(146)  评论(0)    收藏  举报