zoukankan      html  css  js  c++  java
  • java中的static详解(转载)

    《java编程思想》:

      通常,我们创建类时会指出那个类的对象的外观与行为。除非用new 创建那个类的一个对象,否则实际上并未得到任何东西。只有执行了new 后,才会正式生成数据存储空间,并可使用相应的方法。

      但在两种特殊的情形下,上述方法并不堪用。一种情形是只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。

      为满足这两方面的要求,可使用static(静态)关键字。一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static 方法,或访问一些static 数据。而在这之前,对于非static 数据和方法,我们必须创建一个对象,并用那个对象访问数据或方法。这是由于非static 数据和方法必须知道它们操作的具体对象。

      注:分析static的时候,抓住存储区的特点。

    (1)静态方法

      来源:http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html

      在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:

      public static int maximum(int n1,int n2)

      使用类的静态方法时,注意:

      a 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。(还是存储区的问题)

      b 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。

       静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:
      fun()
      {
        static int i=0;//非法。
      }

    (2)静态代码块

      来源:http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html

      一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:
      static
      {
      }

      类装载步骤
      在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:

      装载:查找和导入类或接口的二进制数据;
      链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
      校验:检查导入类或接口的二进制数据的正确性;
      准备:给类的静态变量分配并初始化存储空间;
      解析:将符号引用转成直接引用;
      初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
      初始化类中属性是静态代码块的常用用途,但只能使用一次。

    (3)代码分析

      

    package org.jilichuan.www;
    
    public class test {
    	{
    		System.out.println("NoStatic Block");
    	}
    	static{
    		System.out.println("Static Code Block");
    	}
    	public static void main(String args[])
    	{
    		System.out.println("Main Function");
    		test t = new test();
    		System.out.println("End");
    	}
    
    }
    

      打印如下:

      

    Static Code Block
    Main Function
    NoStatic Block
    End
    

      启动项目的时候,类装入,会引发“Static Code Block”

      启动main函数的时候,会打印“Main Function”

      调用类的时候,创建对象,会出现每个对象都有的“NoStatic Block”

          最后打印“End”

  • 相关阅读:
    docker 安装es
    Redis 和 Zookeeper 到底谁更牛?
    Redisson 看门狗
    记一次线上服务CPU 100%的处理过程
    必须了解的mysql三大日志-binlog、redo log和undo log
    python学习笔记 -- reduce合并减少
    Python学习笔记 -- 列表2: 遍历:嵌套列表, 将其中同位置的元素组成新的列表
    python学习笔记 -- filter() 过滤符合条件的可迭代序列
    python学习笔记 -- map() 操作可迭代序列
    python学习笔记
  • 原文地址:https://www.cnblogs.com/jilichuan/p/2938938.html
Copyright © 2011-2022 走看看