zoukankan      html  css  js  c++  java
  • java静态方法和非静态方法

    3月31号面试,被面试官问到static 和非static 的问题。

    首先,了解static关键字:在java编程思想里,是这么说的:

       通常,创建类的时候,就是在描述这个类的外观行为,除非用new创建那个类的对象,否则实际上并没有获取任何对象,new来创建对象时,数据存储空间才被分配,其方法才供外界调用。

    但是,有两种情形是上述方法无法解决的。一种情形是,只想为某特定域分配单一存储空间而不去考虑究竟要创建多少对象,甚至是根本不创建任何对象;另外一种情形是,希望通过某个方法而不与包含他的类的任何对象关联在一起。也就是收即使没有创建对象,也能够调用这个方法。

        这样通过static就能满足以上的要求。当被声明为static时,就意味着这个域或者方法不会与包含他的类的任何对象关联在一起。因此即使没有创建这个类的对象,也可以调用static方法或者static变量。

    另外就是,不论创建多少个类的实例,静态变量和静态方法,只会占用一份内存。

    因此,当一个方法会被反复调用的时候,我们可以考虑将他申明为static,这样,不必每次调用的时候,都初始化类实例,分配内存空间。

    static变量在java中的初始化顺序?

    依然引用java编程思想里面的介绍:(不得不说这本书经典啊,基本很多细节都藏在小段里了,没事拿出来翻翻总没错!)

    静态初始化只会在有必要的时候进行。也就是说,如果不需要创建静态对象所在的类,也不需要以类+"."的形式应用静态变量或者方法,那么,静态变量永远都不会被创建的。

    一旦静态对象被初始化了,那么他们永远也不会再被初始化,也就是初始化只会执行一次!只会分配一次空间。

    初始化的顺序:

     首先是静态对象(如果他们尚未因为前面的对象创建过程被初始化),然后是非静态对象。无法阻止初始化的进行,他在构造器被调用之前就已经发生了。

    在类的内部,变量定义的顺序决定初始化的顺序,变量定义散布于各个地方,仍然会在任何方法(包括构造方法)调用之前被初始化。

    在子类继承父类的时候,初始化的顺序如下:

    在实例化子类的时候:

    1.首先会执行父类的初始化代码块(先静态),实例变量的初始化

    2.执行父类的构造函数

    3,子类的初始化代码块

    4,子类的构造函数。

    如果类还没有被加载:那么子类通过类名加点的形式调用对象的时候,首先会执行父类的静态代码块和静态变量,顺序就是他们出现的顺序,然后在执行子类的静态代码块和静态变量。

    如果类以及被加载过了,那么静态的变量和静态的代码块就不会被重复执行,再创建对象的时候只会执行与实例相关的变量初始化和构造函数。

    以上为static关键字与初始化的相关知识,至于类的加载过程,会在以后的博客中单独介绍。

  • 相关阅读:
    EBS SQL > Form & Report
    oracle sql 优化分析点
    MRP 物料需求计划
    MRPII 制造资源计划
    Barcode128 应用实务
    Oracle SQL语句优化技术分析
    APPSQLAP10710 Online accounting could not be created. AP Invoice 无法创建会计分录
    Oracle数据完整性和锁机制
    ORACLE Responsibility Menu Reference to Other User
    EBS 常用 SQL
  • 原文地址:https://www.cnblogs.com/CongLollipop/p/6662958.html
Copyright © 2011-2022 走看看