小猿圈java之static关键字

static静态方法学java的都很熟悉,那static有什么作用、又是怎么用的呢?使用过程中应该注意什么呢?小猿圈加加详解一下static,对static模糊的朋友看到这篇文章,清晰透彻,下面进入整题。

static方法

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

Static修饰方法:方法可以直接被类名点出

基本作用:方便在没有创建对象的情况下来进行调用(方法/变量)。

2、static变量

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

static成员变量的初始化顺序按照定义的顺序进行初始化。

static修饰变量:变量可以直接被类名点出,是一个静态变量 在内存中的方法区中 如果常量池中有该变量 那么有且只有一个

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

3、static代码块:{}

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

{}定义在方法中:普通代码块

{}定义在类中:构造块

{}定义在类中并且被static所修饰:静态代码块

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

在我们程序启动的时候 被static所修饰的会先被创建 而没有被static所修饰会后加载 被static所修饰 会优于类的创建

static所修饰的变量和方法 只能 被static修饰的方法所调用  不能调用非static修饰的方法

非static的方法 可以代用 static修饰的方法

面试真题练习:

下面是一道面试当中,出现频率很高的一道关于static的面试题:

这段代码的输出结果是什么?

class Base{

    static{

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

        }

    public Base(){

        System.out.println("base constructor");

        }

    }

public class Test extends Base{

    static{

        System.out.println("hello static");

        }

    public Test(){

        System.out.println("hello constructor");

        }

    public static void main(String[] args){

        new Test();

        }

    }

result:

base static

test static

base constructor

test constructor

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

看完小猿圈写的这篇文章,是不是感觉赚到了,static写的一目了然,最后面试题也是相当重要的,是static知识点出的,做错的朋友可以看看解析,希望大家可以通过小编这篇文章,对static好好理解了,想了解其他知识点的朋友,可以看看小猿圈加加的前几篇文章哦。

你可能感兴趣的:(小猿圈java之static关键字)