JAVA菜鸟入门篇 - static关键字 (十三)

一.static关键字的用途

static关键字解释:


   在java类中,用static声明的成员变量为静态变量,或者叫做:类的属性,类变量
   它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化,
   对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象所共享!!

   static的调用方法: 

可以使用“对象.类属性”来调用。不过,一般都是用“类名.类属性”

    static存放位置:

static变量置于方法区中

   用static声明的方法为静态方法

- 不需要对象,就可以调用(类名.方法名)

- 在调用该方法时,不会讲对象的引用传递给它,所以在static方法中不可访问非static的成员

   很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要通过类加载器(Class Loader)加载类之后,就可以通过类名去进行访问。

1)static方法

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

  但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

    class Simple{  
  <span style="white-space:pre">	</span>static void go(){   
  <span style="white-space:pre">		</span>System.out.println("Go...");  
  <span style="white-space:pre">	</span>} 
  } 
  public class Cal{ 
  <span style="white-space:pre">	</span>public static void main(String[] args){  
   <span style="white-space:pre">	</span>     Simple.go(); 
   <span style="white-space:pre">	</span>} 
  } 
在上面的代码中,由于go()方法是独立于对象存在的,可以直接用过类名调用。

调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法经常为应用程序

中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。 

2)static变量

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

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

      静态变量初始化顺序探讨,可以看看这篇文章

3)static代码块

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

4)静态类 


  通常一个普通类不声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个

普通类来使用,而不需实例一个外部类。如下代码所示:

public class StaticCls {
	 public static void main(String[] args){ 
		 <span style="white-space:pre">	</span>OuterCls.InnerCls oi=new OuterCls.InnerCls(); 
		}
	 } 
	class OuterCls{
			public static class InnerCls{
			<span style="white-space:pre">	</span>InnerCls(){
				<span style="white-space:pre">	</span>System.out.println("InnerCls!");
		} 
	}
}

总结:

如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main()。因为在程序开始执行以main()方法为入口,所以它被声明为static。


有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。


声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。


声明为static的方法有以下几条限制:

◆它们仅能调用其他的static 方法。 
◆它们只能访问static数据。 
◆它们不能以任何方式引用this 或super


本文参考: http://www.cnblogs.com/dolphin0520/p/3799052.html

                   http://home.cnblogs.com/group/topic/38753.html

      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值