/** 鼠标样式 **/

static关键字

参考链接:
https://blog.csdn.net/kuangay/article/details/81485324

1.特点

static修饰的成员变量和方法,从属于类

普通变量和方法从属于对象

静态方法不能调用非静态成员,编译会报错

2.static关键字的用途

一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)。

显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能
image

同一个类中,非静态可以调用静态,但是静态不能调用非静态

3.区别

static变量也称为静态变量,静态变量和非静态变量的区别:

静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化

非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。可以利用这一点提升代码性能

4.常见易错题:

下面这段代码的输出结果是什么?
public class Test extends Base{

static{
    System.out.println("test static");
}

public Test(){
    System.out.println("test constructor");
}

public static void main(String[] args) {
    new Test();
}

}

class Base{

static{
    System.out.println("base static");
}

public Base(){
    System.out.println("base constructor");
}

}

结果:
base static
test static
base constructor
test constructor

分析:

找到main方法入口,main方法是程序入口,但在执行main方法之前,要先加载Test类

加载Test类的时候,发现Test类继承Base类,于是先去加载Base类

加载Base类的时候,发现Base类有static块,而是先执行static块,输出base static结果

Base类加载完成后,再去加载Test类,发现Test类也有static块,而是执行Test类中的static块,输出test static结果

Base类和Test类加载完成后,然后执行main方法中的new Test(),调用子类构造器之前会先调用父类构造器

调用父类构造器,输出base constructor结果

然后再调用子类构造器,输出test constructor结果

posted @ 2024-06-08 11:29  aliex23k65  阅读(20)  评论(0)    收藏  举报