黑马程序员技术交流社区

标题: 什么时候定义静态函数呢?求通俗易懂详细的解答 [打印本页]

作者: 20140829    时间: 2014-10-19 14:29
标题: 什么时候定义静态函数呢?求通俗易懂详细的解答
什么时候定义静态函数呢?求通俗易懂详细的解答

作者: nyk    时间: 2014-10-19 14:34
静态方法属于类,不想创建对象直接使用方法时
作者: cxdzh    时间: 2014-10-19 14:53
一个类创建的所有对象都共有的数据或方法,用静态修饰.

比如一个 Person类,一共有 姓名,年龄,国籍 三个成员变量,都有走路和说话这两个方法.

创建对象时每一个对象的 姓名 和 年龄 都不同,但是 国籍 都一样,
每个对象说话方法都不同,但是走路的方法都一样.

那这样国籍这个变量和走路这个方法,在每次创建一个对象时都要占据一部分内存来存储就浪费资源了,十个对象就有十份内存资源是储存国籍和走路的.

将这个变量用静态修饰的话,所有对象都可以使用同一个变量,就是说所有成员都是同一国籍的,所有对象都用同一个方法走路.

这样可以节省很多资源.但也会因为这个变量一变动,所有对象都受影响,所以要确定是所有对象都统一的数据或方法才可以设置为静态.

而且静态方法不可以访问其他非静态的成员变量.
作者: treanow    时间: 2014-10-19 15:36
cxdzh 发表于 2014-10-19 14:53
一个类创建的所有对象都共有的数据或方法,用静态修饰.

比如一个 Person类,一共有 姓名,年龄,国籍 三个成员 ...

楼主问的是静态函数。。。
作者: treanow    时间: 2014-10-19 15:42
如果类中定义了函数和非静态变量。

当主函数调用了类中的函数,但是这个函数却没有访问(用到)类中的非静态变量时,这个类中的函数就是静态函数。

简单的说就是    主函数功能内部没有访问到类中的非静态变量(数据)
作者: 20140829    时间: 2014-10-19 16:08
treanow 发表于 2014-10-19 15:42
如果类中定义了函数和非静态变量。

当主函数调用了类中的函数,但是这个函数却没有访问(用到)类中的非静 ...

能举例说明一下吗?字面意思已经理解,
作者: 森屿北巷    时间: 2014-10-19 16:12
要看该函数内是否访问了对象中的特有数据:
如果有访问特有数据,那方法不能被静态修饰。
如果没有访问过特有数据,那么这个方法需要被静态修饰。
作者: 祁连山下的哨兵    时间: 2014-10-19 16:13
当函数中没有访问到非静态成员是,就可以把函数定义为非静态函数,静态函数是随着类的加载而被加载到方法区。可以创建对象调用,也可以使用类名直接调用,ok
作者: 饼子    时间: 2014-10-19 16:35
又涨知识了
作者: fly_saint    时间: 2014-10-20 10:45
本帖最后由 fly_saint 于 2014-10-20 11:15 编辑

我的理解,使用或表达共享方法时,定义静态函数。比如说我们中国(类)使用筷子(方法),那么有个使用筷子(方法),并没有必要创建一个中国人(对象)再去使用筷子(方法);可以直接在中国(类)里定义一个静态的筷子(方法)调用。调用时,用 中国(类).使用筷子(静态方法)直接调用即可。至于静态变量,因为我们调用的是  使用筷子(静态共享方法),如果筷子本身被藏起来了(非静态),那么大家如何使用。因此使用筷子(方法)时,筷子本身(变量)也必须是共享的(静态)。
作者: 进击的大鹏    时间: 2014-10-20 14:02
一般老说方法为共享数据设置为静态方法,比如说Arrays类是数组操作工具类,Collections是集合操作工具类,他们里面方法都是静态方法,可以直接类名调用。还有如果一个抽象类或者接口如果没有子类一般会提供静态方法返回本类对象。 再者被静态方法调用的方法必须是静态方法。
作者: wf111sxwf    时间: 2014-10-20 20:15
最简单的没有访问到非静态成员的函数就可以定义成静态函数。可否撸主~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2