java关键字static

static关键字有什么用呢?

比如我要定义一个person类,这个类中有一个属性是国籍,而我们需要实例化的对象都是中国人,这里就出现一个问题,难道说我每次new一个对象就得为他赋一个中国吗,这样是不是就没有面向对象的感觉了,这个时候就可以用一个静态修饰符static来修饰这个变量,请看下面这个例子:

public class Person {
    private static String nationality="中国";
    private String name;

    public static String getNationality() {
        return nationality;
    }

    public static void setNationality(String nationality) {
        Person.nationality = nationality;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我建个测试类来测试一下

public class TestPerson {
    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p.getNationality());
        Person p2 =new Person();
        System.out.println(p2.getNationality());
    }
}

运行结果:

中国

中国

 无论哪个对象的nationality属性的值都是中国,上面的那个问题就解决了。

static关键字的特点

1、随着类的加载而加载
2、优先于对象存在
3、被类的所有对象共享
4、被static修饰的方法可以通过类名直接调用无需创建对象。

下面我们就来比较一下他和成员变量的区别 

 所属不同内存中位置不同内存出现时间不同调用方式不同
成员变量属于对象堆内存随对象的加载而加载,消失而消失对象名.变量名
静态变量属性类方法区中的静态区随类的加载而加载,消失而消失对象名.变量名 或者类名.变量名

static关键字修饰的内存图

注意事项

public class Person {
    private static String nationality="中国";
    private String name;

    public static String getNationality() {
        return nationality;
    }

    public static void setNationality(String nationality) {
        this.Person.nationality = nationality;
    }

}

注意看这段程序,他是无法编译通过的。理由很简单,因为在静态方法中出现了this关键字,this就相当于当前这个类的对象,而刚才也说了static修饰的方法是优先于对象加载的,所以相当于对象还没有创建,就使用了,所以会报错。

总结:静态方法只能访问静态的成员变量和静态的成员方法;通俗来说就是静态修饰的方法只能访问被静态修饰的变量或者方法,而非静态方法既可以访问被静态修饰的也可以访问非静态的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值