[问题] 共用物件

楼主: largesperm (reindeer)   2016-12-22 22:48:33
请教一下 假设一个类别里面的很多方法
都会使用到 classExample 的物件好了
每个方法都去 new 一个 跟 共用同一个会有什么优缺点吗
前提是如果假设很确定每个方法不会同时启动的话
因为我一直在想 一直 new 东西
会不会用很多内存或是拖慢速度
还是拖慢的速度几乎是不影响的
为了避免方法之间互相影响 最好都是 new 一个
谢谢
譬如
1. 都 new 一个
methoA
{
classExample example = getObjectFromSomeWhere();
classExample.doSomething();
}
methoB
{
classExample example = getObjectFromSomeWhere();
classExample.doSomething();
}
2. 共用
classExample sharedExample = new classExample()
methoA
{
sharedExample = getObjectFromSomeWhere();
doSomething();
}
methoB
{
sharedExample = getObjectFromSomeWhere();
doSomething();
}
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:12:00
这取决于那个物件是干嘛用的 所以你这个sample没有意义,不过我想原因在于你还不太了解物件导向举设物件是一个人,跳舞的时候手要做动作,吃饭的时候手也要做动作,但你手都是同一个手,不会在你跳舞或吃饭的时候就产生一个新的手
楼主: largesperm (reindeer)   2016-12-22 23:16:00
methodA 我想收集很多个 classExample 物件的A属性methodB 我想收集很多个 classExample 物件的B属性所以可能在 for 的循环中 我还是得有类别是 classExample 的物件来让我存取 我才能下 .PropertyA or B想问的是这个物件或者就像你讲的 methodA 是让某个人的手动
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:20:00
举实际的例子会比较好懂..
楼主: largesperm (reindeer)   2016-12-22 23:20:00
methodB 是让某个人的脚动 但是取得 classExample 物
作者: testPtt (测试)   2016-12-22 23:23:00
共用 一般是A new了 B就判断sharedExample是否为空
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:28:00
这不做实际的例子..
楼主: largesperm (reindeer)   2016-12-22 23:28:00
沙米@@ 拍谢 实际例子就如同推文那样只有类别名称跟方法名称不一样而已
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:32:00
如果你的例子 我不会共用 因为根本没必要共用我的意思是 看你doA 和 B到底做了啥 你的human到底干
楼主: largesperm (reindeer)   2016-12-22 23:33:00
是 我的问题就是 一直 new 会不会有何影响
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:33:00
和male到底是干嘛的
作者: GoalBased (Artificail Intelligence)   2016-12-22 23:39:00
这个状况 我不会共用 你是methodA 有一个for B也是对吧
楼主: largesperm (reindeer)   2016-12-22 23:41:00
对都是要从一串 classHuman 中去捞东西假设这一串有两万个好了 那就要 new 两万次如果重复使用的话 那只需要 new 一个
作者: james732 (好人超)   2016-12-22 23:48:00
你有实际测试发现这会造成效能问题吗?
楼主: largesperm (reindeer)   2016-12-22 23:57:00
目前遇到第一个这种情况 肉体感觉不出来有道理 明天来算秒数看看
作者: neo5277 (I am an agent of chaos)   2016-12-23 17:55:00
写成抽象类别做静态方法?
作者: Litfal (Litfal)   2016-12-23 23:26:00
实际上要看你class要做什么啊...例如human有个别的身高体重,而doA()会用到,那势必得new且个别赋值阿。而且我还是看不懂你在做什么,你如果classHuman已经有一串两万个了,都要去捞了干嘛还new?你后来补充的 classMale male = new classMale();male = (classMale)human;第一行的new根本没意义
楼主: largesperm (reindeer)   2016-12-24 00:00:00
因为都要转型才能拿到他的属性原本的 classHuman 没有这属性 要转成 classMale想到较容易举例的例子再来请教
作者: Litfal (Litfal)   2016-12-24 11:25:00
那还是不用new阿 classMale male = (classMale)human;一行就好
作者: ssccg (23)   2016-12-24 14:29:00
你的例子根本没有办法说明你的使用情境啊...一般instance method的逻辑会跟instance state有关系,所以本来就一定要去取得要做事的那个instance来执行你先讲清楚doA是干麻、doB是干麻再说吧刚才看到你后来补充的,你可能要先分清楚reference跟你的例子不管是共用还是不够用,new classMate()都是多余的只有共到reference变量,并没有用到任何new出来的instance你的例子直接改成classMale male; 结果完全一样* 分清楚reference跟instance的差别
楼主: largesperm (reindeer)   2016-12-24 15:05:00
好的 感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com