A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liqian 中级黑马   /  2012-4-16 18:18  /  1527 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候定义静态变量?什么时候定义静态函数?听的不很清楚~

7 个回复

倒序浏览
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。
通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
  声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共同拥有一个static变量。声明为static的方法有以下几条限制:
  ·
  它们仅能调用其他的static 方法。
  ·
  它们只能访问static数据。
  ·
  它们不能以任何方式引用this 或super(关键字super 与继承有关)。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
定义静态变量(类变量):当对象中出现共享数据时,该数据被static修饰。如是对象中的特有数据就不能用static修饰了。
定义静态方法:当功能内部没有访问到非静态数据 (对象的特有数据),那么该功能可以定义成静态的 。  
静态成员是随类的加载就存在于内存的数据区,这种成员不依赖于特定对象。如工具类中的成员通常定义为静态的,使调用代码简洁,方便使用。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
Static的特点:

1、        随着类的加载而加载,也就是说,静态会随着类的消失而消失,说明他的生命周期最长
2、        优先于对象存在,明确一点:静态是先存在,对象是后存在。
3、        被所有对象所共享。
4、        可以直接被类名所调用

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
当你需要变量、函数不依赖与类的实例化对象的时候,你就可以定义为static,static成员在加载类的时候在内存被分配内存空间,只有一份拷贝,而普通成员是每new一次就分配一次内存空间,对staitc成员可以通过类名直接调用,而普通成员要通过实例对象才能调用。
回复 使用道具 举报
静态变量是可以直接补被类名. 调用的,它是优先于对象存在的。但是生命周期作用于整个类中。
而静态方法是这个方法不依赖于对象的话,就可以定义静态方法。它于本类中可以直接用方法名调用,而在外部类中直接用类名. 调用。
回复 使用道具 举报
林豪 中级黑马 2012-4-16 22:46:34
7#
你可以参考一下下面
Java静态对象和非静态对象有什么区别??

静态对象                                                        非静态对象      
是类共同拥有的.                                          是类独立拥有的,
内存空间上是固定的                                              空间在各个附属类里面分配
先分配静态对象的空间                                            继而再对非静态对象分配空间,也就是初始化顺序是先静态再非静态.


java静态对象和静态属性及静态方法又有什么区别呢?
这三者都和一般的对象属性和方法相似,可以将静态对象看成的静态属性.只不过楼主要注意的是在非静态方法里是不可以使用静态属性的.静态方法里也无法使用非静态属性(是属性不是参数.参数一般是指在方法里临时新建的数值或对象,属性是类声明部分声明的信息).


为什么先声明一个静态对象 static Lefthand left;还要在主函数中再实例化该对象呢left=new Lefthand();?
因为任何对象在使用之前都要进行初始化,new就是进行对象的分配空间后进行初始化.


java静态对象到底有什么好处??
我个人的理解就是静态对象可以让相同类型的类之间共享共同的属性,这个共享是同步的,而且不用new,节省了空间


1、静态对象的数据在全局是唯一的,一改都改。如果你想要处理的东西是整个程序中唯一的,弄成静态是个好方法。
2、非静态的东西你修改以后只是修改了他自己的数据,但是不会影响其他同类对象的数据。
3、静态对象和非静态对象都是对象,是对象都是要实例化的。不同之处就是2者的数据表现和存储方式不一样。
4、静态的好处:
引用方便。对于公用类型的变量,直接用 类名.静态方法名  或者  类名.静态变量名就可引用并且直接可以修改其属性值,不用getter和setter方法。
保持数据的唯一性。此数据全局都是唯一的,修改他的任何一处地方,在程序所有使用到的地方都将会体现到这些数据的修改。
有效减少多余的浪费。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 赞一个!

查看全部评分

回复 使用道具 举报
        1,什么时候定义静态变量?
        当分析对象中所具备的成员变量的值都是相同的。
        这时这个成员就可以被静态修饰。只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
        如果是相同的数据,对象不需要修改,只需要使用即可,不需要存储在对象中,定义成静态的。

        2,什么时候定义静态函数?
        是否使用静态修饰,就看该函数功能是否访问到对象中的特有数据。
        从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的。
        如果不需要,就可以将该功能定义成静态的。当然,也可以定义成非静态,
        但是非静态需要被对象调用,而仅创建对象调用非静态的
        没有访问特有数据的方法,该对象的创建没有意义。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马