static关键字(java)

本文转载自:xiaolu602的博客  http://blog.sina.com.cn/xiaolu602
网上关于java static关键字的文章很多,但是很多都篇幅很长,对新手来说,理解困难。本人也是新手,看了这篇文章,觉得言简意赅,很不错,所以转载来标记之,作为分享。

static关键字标记的属性或方法由整个类共享,如果访问控制权限允许,可以不必创建对象,直接用类加“.”调用。因此static成员也成为“类成员”或“静态成员”,如"类属性"、"类方法"、"静态方法"等。

  理解static成员的关键点在于:它只有一个拷贝存在,是与类相关联的,不是与类的实例相关联。说到这里不得不说一下程序内存的分配问题了,在程序中, 内存总共分为四个区,分别为:栈内存区,堆内存区,全局代码区,全局变量区。其中,栈内存区中存放的是变量名称,实际上就是对于堆内存中内容的引用地址; 堆内存中存放的是属性;全局代码区存放的是整个程序中的方法;全局变量去存放的就是所有的static属性。

  另一个问题是:为什么要使用static关键字来定义一些由整个类共享的属性或方法呢?这是因为,有些属性或方法是为所有类的实例所共有的,如果声明为实例属性或实例方法,就相当于每个实例都会有一份相同的属性或方法,这不但照成了代码的冗余,更为以后的维护照成了麻烦。

  这里要注意一个问题,就是在使用static成员的时候有一定的限制:static方法只能使用static的静态属性,只能调用static的静态方 法,不能使用非静态属性,不能调用非静态方法。这就解释了为什么在主方法(main)中如果想直接调用一个方法,只能将该方法定义成static的静态方 法了。因为主方法(main)就是一个静态方法。

  那么为什么要有这么一个限制呢?因为static属性或方法是为类所调用的,也就是说在类的实例没有生成以前就可以调用这些成员,而非静态成员必须在类的 实例生成之后才能由这些实例来使用,所以在static方法中不能使用非静态成员,但是在非静态的方法中可以使用静态的属性或方法。

  说到这里又涉及到另外的一个问题了,大家都知道,实例属性都是在对象生成的时候,调用构造函数的时候初始化的,那么static的静态属性是在什么时候初 始化的呢?因为即使没有一个实例生成,这些静态的成员也是和类相关联的,所以需要在调用构造函数之前初始化这些成员。java为了保证这一点,为程序设定 了一个类初始化方法,这些静态的属性就是在这个类初始化方法的主体部分得到初始化的。java语言保证这个类初始化方法在第一次使用这个类(通常是第一次 加载这个类)的时候调用一次。因为这个类初始化方法是内部方法,所以对java程序员是不可见的。

  最后分析一下主方法吧:public static void main(String[] args)

public:表示最大的访问权限

static:因为执行的执行的就是类的名称,表明这个方法可以由类直接调用,因此为一个静态的方法;

void:因为主方法是程序的入口,是一切的开始,因此不会有返回值;

main:系统内建的方法名称

String[] args:用来接收参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值