您的位置:首页 > 编程语言 > Java开发

Java Static关键字

2016-04-08 01:58 405 查看
通常来说,当创建类的描述的那个对象的外观和行为的时候,除非用new创建那个类的对象,否则,实际上并未获得任何对象,执行new来创建对象的时候,数据存储空间才会被分配,其方法才能供外界调用。

但是有两种情况是无法得到解决的:第一,只想为特定域分配单一存储空间而不去考虑究竟要创建多少对象,甚至根本不创建任何对象,另一种情况就是,希望某个方法不与包含它的类的任何对象关联在一起,也就是说,即时没有创建对象,也能够调用这个方法。

通过static关键字可以满足这两方面的需求,当声明一个事务是static时,就意味着这个域或方法不会与包含它的那个类的任何实例对象关联在一起,即便没有创建这个类的实力对象,也可以说使用static方法或者static域,但是要注意的是:由于在static方法前不需要创建任何对象,因此对于static方法不能简单的调用其他非static域或方法而没有指定某个命令对象,来直接访问非static域或者方法。

下面我们来看一个例子:

public  class  Main{

public  static  void  main(String[] args){
StaticTest staticTest1=new StaticTest();
System.out.print(staticTest1.i);
StaticTest staticTest2=new StaticTest();
System.out.print(staticTest2.i);
staticTest2.i++;
System.out.print(staticTest1.i);

}

}


输出是:474748

由这个例子可以知道即便创建了两个对象,但是i只有一份存储空间,这两个对象共享同一个i,注意:使用类名是引用static变量的首选方式,这不仅仅因为它强调了变量的static结构,而且在某些情况喜爱它还为编译器进行优化提供了更好的机会。

类似的逻辑也应用于静态方法,既可以像其他方法一样,通过类创建一个对象来引用该方法,也可以通过过特殊的语法形式CLASSNAME.METHOD()加以引用,定义静态方法的方式也与定义静态变量相似。

public  class  Main{

public  static  void  main(String[] args){
StaticTest staticTest1=new StaticTest();
System.out.print(staticTest1.i);
StaticTest staticTest2=new StaticTest();
System.out.print(staticTest2.i);
staticTest2.i++;
System.out.print(staticTest1.i);
StaticTest.increment();
System.out.print(staticTest1.i);

}

}


  

public class StaticTest {
public   static  int i=47;
public  static  void  increment(){
i++;
}
}


输出47474849

从而可以知道在static方法中不像static字段那样更改数据创建的方法,static方法的一个重要的用法就是在不创建任何对象的时候就可以调用它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: