javaSE.静态变量和静态方法

类就像一个模板,(摸具) ,可以根据模板弄出一个个对象。

static

静态的内容,我们可以理解为是属于这个类的,也可以理解为是所有对象共享的内容。

我们通过使用static关键字来声明一个变量或一个方法为静态的,一旦被声明为静态,那么通过这个类创建的所有对象,操作的都是同一个目标,也就是说,对象再多,也只有这一个静态的变量或方法。即 静态变量或静态方法是属于类的。

一个对象改变了静态变量的值,那么其他的对象读取的就是被改变的值。即共享的。

 

静态方法是属于类的,而不是属于某个对象的

静态变量属于类的,无法调用成员变量

成员变量

成员变量是某个具体对象拥有的属性,就像小明这个具体的人的名字才叫小明。

而静态变量是类具有的,并不是具体对象,肯定没办法访问到的。

同样的,在静态方法中,无法使用this关键字,因为this关键字代表的是当前的对象本身。

但是静态方法是可以访问到静态变量的。

静态变量是在什么时候初始化的?

实际上是将.class 文件丢给JVM去执行的,而每一个.class 文件其实就是我们编写的一个类,我们在java中使用一个类前,JVM并不会在一开始就去加载它,而是在需要使用时才会去加载(优化)

一般遇到以下情况时才会会加载类:

  • 访问类的静态变量,或者为静态变量赋值
  • new 创建类的实例(隐式加载)
  • 调用类的静态方法
  • 子类初始化时
  • ......

所有被标记为静态的内容,会在类刚加载的时候就分配,而不是在对象创建的时候分配,所以说静态内容一定会在第一个对象初始化之前完成加载

public class Person {
    String name = test();
    int age;
    String sex;

    {
        System.out.println("我是普通代码块");
    }

    Person() {
        System.out.println("我是构造方法");
    }

    String test() {
        System.out.println("我是成员变量初始化");
        return "小明";
    }

    static String info = init(); //init静态方法的返回值作为变量的初始化,便于观察

    static {
        System.out.println("我是静态代码块");
    }

    static String init() {
        System.out.println("我是静态变量初始化");
        return "test";
    }

}

先将静态内容初始化之后,才得到值的.

如果压根没有使用这个类,也就不会被初始化.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值