java中的static详解(转载)

java

《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”

以上是 java中的static详解(转载) 的全部内容, 来源链接: utcz.com/z/390323.html

回到顶部