Java中的static关键字解析

static关键字:静态


1)static方法

  static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。(static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的)

  1. Static修饰方法:方法可以直接被类名点出
  2. 基本作用:方便在没有创建对象的情况下来进行调用(方法/变量)

2)static变量

  static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

  1. static成员变量的初始化顺序按照定义的顺序进行初始化。
  2. static修饰变量:变量可以直接被类名点出,是一个静态变量 在内存中的方法区中 如果常量池中有该变量 那么有且只有一个

注意:被static所修饰 可以直接通过类名点出 数据存放在方法区 数据是整个项目公用的

 

3)static代码块:{}

  static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

  1. {}定义在方法中:普通代码块
  2. {}定义在类中:构造块
  3. {}定义在类中并且被static所修饰:静态代码块

    执行顺序:静态代码块——构造块——普通代码块


 

注意:

  1. 在我们程序启动的时候 static所修饰的会先被创建 而没有被static所修饰会后加载 被static所修饰 会优于类的创建
  2.  static所修饰的变量和方法 只能 被static修饰的方法所调用  不能调用非static修饰的方法
  3. static的方法 可以代用 static修饰的方法

常见的笔试面试题

 下面列举一些面试笔试中经常遇到的关于static关键字的题目,仅供参考,如有补充欢迎下方留言。

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


结果是:

base static
test static
base constructor
test constructor

解析:代码块执行顺序:静态代码块——构造块——普通代码块,所以在我们程序启动的时候 static所修饰的会先被加载, 而没有被static所修饰会后加载Test类继承自Base类,因此会转去先加载Base类的static块,再加载Test类中的static块,然后依照顺序加载父类和子类的其他代码块

 
原文地址:https://www.cnblogs.com/huan-guo/p/8350862.html