Java static关键字总结

左手的ㄟ右手 2022-10-08 00:58 295阅读 0赞

static 关键字


在Java中,被static声明过的成员变量称为静态成员变量,也称为类变量。如果一个成员使用了static关键字修饰,那么这个成员就不在属于对象了,而是属于类,在这个类中的所有对象实例所共享,可以节省很多内存空间;
也可以用一句话来总结,就是方便在没有创建对象的情况下来进行调用,也就是说,被static所修饰过的成员变量或者成员方法,不需要去new一个实例对象,然后再进行调用,而是可以直接通过 类名就可以去访问,举个例子:

  1. public class student{
  2. //定义一个静态变量
  3. static String school;
  4. }

然后直接通过类名去进行访问

  1. Student.school = "XXX";

这个就是static的关键用法,只要这个类被加载,那么这个静态变量也会跟着一起加载,而且这个静态成员被该类的所有对象所共享;这里可以得出以下结论:

  • 静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化
  • 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
  • static成员变量初始化顺序按照定义的顺序来进行初始化

啥时候需要用到static关键字呢?有什么好处?
就拿上面的例子来说,共性(共享)的属性使用静态,特性使用非静态

  1. class Student {
  2. //因为同一个学校的学生类,school属性是相同的,所以用静态修饰,可以节省内存
  3. static String school;
  4. String name;
  5. int age ;
  6. }

static的注意事项:

  1. 可以调用静态的成员变量,成员方法
  2. 不能调用非静态的成员变量,成员方法
  3. 只能在静态方法中调用静态的成员

如图所示,还是上面的例子:
在这里插入图片描述
name这个属性我们没有用static来修饰,所以是属于对象的,要对象实例化之后才可以访问,继续如下所示
在这里插入图片描述
对象实例化之后是可以正常访问的;

static常见笔试面试题

1、下面这段代码的输出结果是什么?

  1. public class Student extends Person{
  2. static{
  3. System.out.println("Student static");
  4. }
  5. public Student(){
  6. System.out.println("Student constructor");
  7. }
  8. public static void main(String[] args) {
  9. new Student();
  10. }
  11. }
  12. class Person{
  13. static{
  14. System.out.println("Person static");
  15. }
  16. public Person(){
  17. System.out.println("Person constructor");
  18. }
  19. }

输出结果:
Person static
Student static
Person constructor
Student constructor

这是为什么呢,让我们来看看原因:

  1. 首先执行这块代码的时候,一般是先找程序的入口,也就是main方法,但是在执行main方法之前,首先要加载Student类
  2. 加载Student类的时候,发现这个类继承Person类,所以就会优先父类
  3. 加载Person类,发现Person类有static模块,会优先加载,所以这里输出:Person static
  4. 加载完Person类之后加载Student类,也发现有static模块,也会优先加载,接着输出:Student static
  5. 两个类都加载完之后,执行主方法里面的new Student(),调用子类构造器之前会先调用父类构造器,这里输出:Person constructor
  6. 最后调用子类的构造器,最后输出:Student constructor

总结:

  • 静态内容总是优先于非静态,所以静态代码块比构造方法优先执行
  • static块可以出现类中的任何地方,并且执行是按照static块的顺序执行的。

发表评论

表情:
评论列表 (有 0 条评论,295人围观)

还没有评论,来说两句吧...

相关阅读

    相关 static关键字作用总结

    前言 之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static。final和static一样,都是一个小问题可以看到

    相关 java关键字static完全总结

    1.static修饰属性 1. static修饰属性表示该属性是静态属性(静态变量),类属性(类变量)。 2. 静态属性由该类的所有实例所共享,属于类本身,可用类名.

    相关 javastatic关键字总结

    JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配,会执行静态的代码块    在类加载的init阶段,类的类构造器中会收集所有的static块和字段并执