Java基础突击第四天0008(static关键字)

static主要应用于修饰被很多对象共享的属性,比如所属城市属性,国家属性。

某城市更名后为了不至于所有的对象一个个修改城市属性,所以把该属性设置为全局属性(静态属性)。

不过作为大家共享的公共属性由一个对象来修改很明显是不合理的,一般情况下直接用类名对其调用。(static声明的属性又称作类属性)

这类全局属性和全局方法用static进行修饰。


Java中主要分为4块内存空间,栈内存保存所有对象的名称,堆内存保存对象的具体属性内容,全局数据区保存static类型的属性,全局代码区保存所有的方法定义。


在前面经常会用到在主类中,main方法中会调用的方法前面都有static修饰。这是因为static方法是不能调用非static声明的属性和方法。而非static声明的方法可以调用static声明的属性和方法。

这样考虑:程序中类的属性和方法需要在对象开辟堆内存之后才能调用,而static类型的方法在对象未被实例化时就可以被调用了。

因此,能够被主方法调用的方法必须用static进行修饰。毕竟静态方法是不能调用非静态方法的。

由于static属性是所有对象共享的,则可以应用static属性统计一个类到底生成了多少个对象。也可以对自动生成的对象自动编号命名。

class Demo{
    private String name;
    public static int countUnnaming = 0;
    public static int count = 0;
    public Demo(){
        count++;
        countUnnaming++;
        this.name = "Unnaming-No."+countUnnaming;
    }
    public Demo(String name){
        count++;
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    
}
public class HelloWorld{
    public static void main(String []args){
        System.out.println(new Demo().getName());
        System.out.println(new Demo("FangXy").getName());
        System.out.println(new Demo().getName());
        System.out.println(new Demo("FuXs").getName());
        System.out.println(new Demo().getName());
        System.out.println("There are "+Demo.count+" objects has been generated!");
    }
}

猜你喜欢

转载自blog.csdn.net/u012144068/article/details/80906617