| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3460 人关注过本帖
标题:类方法与实例方法用的时候到底有什么不同?讨论下
只看楼主 加入收藏
中国
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2009-1-4
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:9 
类方法与实例方法用的时候到底有什么不同?讨论下
class le{
  public int fang(int cent)
{
  return(cent+1);
}
}
public class lei{
  public static void main(String[]args)
{
  le a=new le();
  System.out.println(a.fang(3));
}
}
像这个fang方法不论是定义为类方法还是实例方法结果都一样啊
搜索更多相关主题的帖子: 实例 
2009-07-25 11:36
ET_bug
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:黑侠
帖 子:89
专家分:602
注 册:2009-7-21
收藏
得分:5 
你说的实例方法是什么意思??没听过...
java中的方法都是定义在类中的吧
类被实例化后这个类的对象就可以调用这个类的相应方法了
如果一个类中有静态方法,可以通过"类名.方法名"直接调用,不用创建类的对象

编程之路无止境!
可是小子才入门!
2009-07-25 13:27
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:0 
不懂楼主意思.呵呵,  
    回帖是一种美德!传说每次回
帖即可获得 10 分可用积分!

C#超级群 74862681,欢迎大家的到来!
2009-07-25 14:59
pywepe
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:296
专家分:483
注 册:2009-4-5
收藏
得分:5 
回复 楼主 中国
static 叫静态方法
   若类A里有一个static的方法m()
      调用里就可以直接 A.m() 而不用先new A()
  如果你new了A  这样当然可以用m()呀

   像有类是不用new的,因为你只要用到里面的一个方法,比如Math,你要用random()方法
就直接 Math.random() 就行
   讲到静态 其实有很多知识

java群
62635216
欢迎加入
2009-07-25 16:22
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:10 
有时候我们对静态方法和实例化方法会有一些误解。

1、大家都以为“ 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。”

事实上,他们都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。

2、大家都以为“ 静态方法在堆上分配内存,实例方法在堆栈上”

事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。

方法占不占用更多内存,和它是不是static没什么关系。
因为字段是用来存储每个实例对象的信息的,所以字段会占有内存,并且因为每个实例对象的状态都不一致(至少不能认为它们是一致的),所以每个实例对象的所以字段都会在内存中有一分拷贝,也因为这样你才能用它们来区分你现在操作的是哪个对象。
但方法不一样,不论有多少个实例对象,它的方法的代码都是一样的,所以只要有一份代码就够了。因此无论是static还是non-static的方法,都只存在一份代码,也就是只占用一份内存空间。
同样的代码,为什么运行起来表现却不一样?这就依赖于方法所用的数据了。主要有两种数据来源,一种就是通过方法的参数传进来,另一种就是使用class的成员变量的值……

3、大家都以为“实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单”

事实上如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。

当然你完全可以把所有的实例方法都写成静态的,将实例作为参数传入即可,一般情况下可能不会出什么问题。

从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象 反之使用静态方法。这只是从面向对象角度上来说的。

如果从线程安全、性能、兼容性上来看 也是选用实例化方法为宜。

我们为什么要把方法区分为:静态方法和实例化方法?

如果我们继续深入研究的话,就要脱离技术谈理论了。早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情了,区分静态方法和实例化方法不能单单从性能上去理解,创建c++,java,c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方法和实例化方式的区分是为了解决模式的问题。

拿别人一个例子说事:

比如说“人”这个类,每个人都有姓名、年龄、性别、身高等,这些属性就应该是非静态的,因为每个人都的这些属性都不相同;但人在生物学上属于哪个门哪个纲哪个目等,这个属性是属于整个人类,所以就应该是静态的——它不依赖与某个特定的人,不会有某个人是“脊椎动物门哺乳动物纲灵长目”而某个人却是“偶蹄目”的。

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2009-07-25 16:27
ET_bug
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:黑侠
帖 子:89
专家分:602
注 册:2009-7-21
收藏
得分:0 
lampeter兄又让我开眼了...学习...

编程之路无止境!
可是小子才入门!
2009-07-25 20:57
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:0 
向lampeter学习

C#超级群 74862681,欢迎大家的到来!
2009-07-25 22:02
中国
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2009-1-4
收藏
得分:0 
明白了
2009-07-26 21:52
封闭
Rank: 9Rank: 9Rank: 9
来 自:广东省汕头市
等 级:蜘蛛侠
威 望:1
帖 子:501
专家分:1084
注 册:2007-9-14
收藏
得分:0 
向lampeter123学习了。。
2009-07-26 23:27
紫衫
Rank: 4
来 自:风之谷
等 级:业余侠客
帖 子:126
专家分:211
注 册:2009-6-6
收藏
得分:0 
类方法实际就是静态的方法,直接用类名调用
实例方法,那你就必须生成一个对象,用这个对象去调用

类方法和属性 主要表示的这个类所属的所有对象都有的
而实例的方法和属性就是指 某个对象所特有的

[[it] 本帖最后由 紫衫 于 2009-8-3 19:15 编辑 [/it]]
2009-08-03 19:12
快速回复:类方法与实例方法用的时候到底有什么不同?讨论下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015270 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved