这是一个经常被时时提出来的问题,很多时候我们以为理解了、懂了,但深究一下,我们却发现并不懂。
方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用实例化方法需要new了以后才可以使用。。。。我们真的理解了吗?
从实际项目开发说起,这里有开发项目的三种方式:
开发项目中把BLL和DAL分开,在BLL调用DAL的代码。
一、在DAL中使用静态方法,不创建实例直接调用(大概有很多人都使用这种方式开发 )
class DAL
{
public static string GetUserName(...);
}
在BLL中调用:
DAL.GetUserName();
二、在DAL中使用实例方法,采用静态成员模式(或Singleton)通过实例来调用:
class DAL
{
public static readonly DAL dal = new DAL();
public string GetUserName(...);
}
在BLL中调用:
DAL.dal.GetUserName();
三、在DAL中使用实例方法,每次调用之前先创建DAL对象的实例:
class DAL
{
public string GetUserName(...);
}
在BLL中调用:
DAL dal = new DAL();
dal.GetUserName();
---------------------------------------------------------------
开发方式一:我以为在一些情况下(比如调用多个数据库、GetUserName(...)内部处理操作部分)会出现线程安全的嫌疑。这种开发方式不用New出对象,所以很普遍。
开发方式二:应该多是应用在cs模式下,DAL在整个项目只会有一个对象存在,如果出现在B/S 我想不能兼容多种问题情况。而且也有线程安全的问题。
开发方式三:应该是普遍使用的,能够兼容各种问题,也不会有线程不安全的嫌疑出现。
特别说明一下:在MS的pet3.0以前的版本 都采用了方式二,而到pet3.0和以后的版本都采用了方式三,而且特别在开发说明文档中明确的解释了一下。我想应该是从兼容性上考虑的,从性能上方式二并不比方式三真正的高多少。
-------------------------------------------------------------------------
我特意以“你怎么理解并使用静态方法和实例化方法的?”这样的问题询问了多位程序员,他们开发的语言也不尽相同(c 、c++、java、c#)
以下是他们的回答:
海龙说:
公用的方法,而且是一些零散的 一般用静态方法
张伟说:
几乎没有区别,如果不需要实例化,就用静态方法;如果为了稳妥,就用实例方法,这样才可调用其他实例方法和变量 。
萧远山说:
静态方法比较少用,因为他在一启动就实例化了,比较占资源,当然,,配合单例模式还是比较好用的
比较多的用在数据连接上,我避免使用的原则就是减少资源消耗。
张新波说:
静态方法意味着我在调用前不需要进行对其所属的类进行new操作,我主要会在工具类里面用到静态方法。
向详说:
静态就是类的,实例就是对象的。
静态方法和实例方法的区别之处还有一个地方:静态方法不需要依赖类当中的属性,能在这个方法中封闭的完成一个功能。实例方法更多的会使用到类当中的属性。
winson_张林说:
最大的区别在于内存。
静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,
所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。
任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。
静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,
而且静态内存是有限制的,太多了程序会启动不了。
showlover说:
静态方法与实例方法各有自己的用处...
是定义成静态方法,还是定义成实例方法,还要看具体情况,比如方法本身与类型没有太大的关系,可以定义成静态方法..
用实例方法,当然需要你先创建实例,才能调用实例方法,而静态方法则不需要..
从性能上说,静态方法效率要稍微高一些,但是它会常驻内存...
一些情况下使用静态方法是有好处的,因为对于静态方法无论你有多少个实例,
内存中要维护的一份拷贝。同时,某些方法,确实使用静态是比较恰当的..
Q.yuhen说:
这个问题牵扯到的东西比较多,诸如设计模式等等。简单点说,静态方法用来执行无状态的一个完整操作,实例方法则相反,它通常是一个完整逻辑的一部分,并且需要维护一定的状态值。
如果用内存和效率来区分使用Static Method、Instance Method
就回到过去结构化编程了。使用那种方法的根本出发点还是围绕面向对象来进行的。
陈亮说:
静态方法和全局函数差不多的,实例方法是一个类里面的方法。
总结:大家对这个问题都有一个共识:那就是实例化方法更多被使用和稳妥,静态方法少使用。
有时候我们对静态方法和实例化方法会有一些误解。
1、大家都以为“ 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。”
事实上,他们都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
2、大家都以为“ 静态方法在堆上分配内存,实例方法在堆栈上”
事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。
方法占不占用更多内存,和它是不是static没什么关系。
3、大家都以为“实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单”
事实上如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。
当然你完全可以把所有的实例方法都写成静态的,将实例作为参数传入即可,一般情况下可能不会出什么问题。
从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象
如果从线程安全、性能、兼容性上来看
我们为什么要把方法区分为:静态方法和实例化方法 ?
如果我们继续深入研究的话,就要脱离技术谈理论了。早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情了,区分静态方法和实例化方法不能单单从性能上去理解,创建c++,java,c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方法和实例化方式的区分是为了解决模式的问题。
拿别人一个例子说事:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dwzsq/archive/2008/02/15/2097783.aspx
|
标签:杂谈 |
|
标签:杂谈 |
1、听力难点(自己的发音误区)
malnutrition nutrition(一直没有听出来)
resource中s有点发z的音
raise [reiz]我总是发[raiz]
2、生词
papaya[pə'paiə]
n、木瓜
3、有用的表达
The fruit can stay good for months without cold storage.
Ebony trees are valued for their black hardwood.
学到的新词汇
1、reindeer['reindiə]
In far northern Mongolia, the survival of the smallest ethnic group in the country depends on reindeer.
在遥远的蒙古北部(此处In far不是词组,far 修饰northern Mongolia),国家最小的一个民族依靠驯鹿生活着。
![]() |
| Morgan Keay, right, with members of the Tsaatan community in Mongolia |
An American named Morgan Keay visited the Tsaatan community when she was studying in Mongolia in two thousand two. Leaders told her that the animals were not healthy and the number of reindeer was getting too small to support the community.
一个名叫Morgan Keay 的美国人2002年在蒙古学习时来到Tsaatan社区(不知道蒙古是不是称为社区,我想部落更恰当吧)。部落的首领告诉她这里的动物不太健康并且部落赖以生存的麋鹿的数量正在逐渐减少。
When she left, the chief gave her his grandfather's smoking pipe. That way she would remember the Tsaatan and try to help them. The Tsaatan have about five hundred members. About half are reindeer herders up in the Taiga mountains. The other half live in a town.
Back in the United States, Morgan Keay and a friend who had also studied in Mongolia started an organization. They named it Itgel -- the Mongolian word for hope.
当她离开时,首领讲他祖父的烟斗送给了她。这个行为让她记住了Tsaatan并且试图帮助这个部落。Tsaatan大约有500个村名。约一半的人是生活在Taiga山上的驯鹿人。另一半生活在村子里。通过美国的支持,Morgan Keay 和一个在蒙古学习的朋友成立了一个组织。他们命名为Itgel,在蒙古语里意思是希望。
The Itgel Foundation has helped bring foreign scientists to Mongolia to research and treat reindeer diseases. Itgel also helped Tsaatan workers build a community and visitor center. The building includes guest rooms for tourists.
Itgel基金带来一些外国科学家到蒙古进行研究,并治疗麋鹿的疾病。Itgel同时还帮助Tsaatan的工人们建立一个交流访问中心。这个中心包括对游客开放的会客区。
The Tsaatan not only work as guides, they now provide all services for travelers. The community works in partnership with international tour operators. Those tour operators had formerly been in control of the services.
Tsaatan人不仅可以做向导工作,现在还为旅游者提供所有服务。这个社区与一个国际旅游运营商合作。那些旅游运营商之前一直控制着这些服务。
![]() |
| Tsaatan volunteers and members of the Itgel Foundation in front of the community and visitor center |
People in the community designed the center, which they also own and manage. Before the visitor center was built, families earned an average of one hundred dollars a year. Now Morgan Keay says the average is three to four times that. Money also goes into a community fund.
Four years ago the Tsaatan had fewer than five hundred reindeer. Now Morgan Keay says the herd has just reached nine hundred.
Last year, the Tsaatan learned that the government of Mongolia planned to spend one and a half million dollars on their community. But no one had talked to the Tsaatan about the plans. The Itgel Foundation organized a meeting between community members and government representatives.
Morgan Keay says the Tsaatan are becoming economically independent for the first time. The Mongolian government is now considering a development plan written by the community. The plan deals with education, health, the environment and economics.
|
标签:杂谈 |
|
标签:校园 |
|
标签:校园 |
|
标签:校园 |
第一步:准备好阅读材料训练阅读速度
在阅读英语报刊(推荐阅读Time, Newsweek, the Economist等)或者真题的时候,第一遍都必须首先注意提高阅读速度。对报刊上的文章,第一遍读的时候不要查字典,记下起止时间,计算单位时间的阅 读量。这时的重点放在训练速度,掌握文章大意、结构,以及作者和专家等的观点。
第二步:总结文章中词汇使用特点
总结文章中词汇使用的准确性、形象性、多样性和感情色彩及语气,复合词的使用,总结各类重要搭配,对各类重要词汇进行扩展,正确识别代词与抽象名词的指代,并记忆和运用可以在作文中使用的词汇。
1.从文章中词汇使用的准确性、形象性、多样性和感情色彩及语气角度,复合词的使用进行总结。
2.总结文章中动词和名词(动宾)搭配、形容词和名词的搭配、副词和动词、形容词的搭配、各类介词搭配(动词和介词、形容词和介词、名词和介词、介词和名词)。
3.注意对文章中重要词汇进行一定的扩展。我们可以从词汇的同义词、反义词,同根词、相关性等等角度进行扩展,让你的词汇形成一个网络,而不是孤立的个体。
4.正确识别代词与抽象名词的指代,如果无法正确识别指代,读者就无法把句子和句子连接成具有连贯意义的整体,就无法把握作者的思路延展。
第三步:总结文章中的好的短句、长难句
总结文章中句子如何开头,句子之间的关系、衔接,段落之间的衔接,并记忆和运用可以在作文中使用的句型。
例1:He is a big spender. 他花钱大手大脚。
运用:Many young adults are big spenders. 许多年轻人花钱大手大脚。
例2:1949 witnessed the liberation of China.
运用:The dawn of the new century witnessed the increasing popularity of the web.
例3:He got off the plane. Reporters surrounded him.
这两个句子没有语法问题,但放在一起就显得缺乏连贯性。如果改成He got off the plane and was surrounded by reporters 或者He got off the plane. And he was surrounded by reporters 就可以了。所以平时要多研究英文句子是如何衔接的。
第四步:总结文章主要讨论对象、关键词
作者、专家的观点以及语篇及段落发展模式。对考试类文章而言,还要总结文章的考点、题目的定位、答案的替换、正确和干扰项的规律、特征。
例 2000年1月四级阅读第二篇
Some studies suggest that straight, horizontal bars painted across roads can initially cut the average speed of drivers in half. However, traffic often returns to full speed within months as drivers become used to seeing the painted bars.
30. What does the author say about straight, horizontal bars painted across roads?
A) They cannot be applied successfully to traffic circles.
B) They tend to be ignored by drivers in a short period of time.
C) They are falling out of use in the United States.
D) They are applicable only on broad roads
请用心体会initially 这个词的内涵,其实,你一看到这个词,就应该准确predict后面可能会有考点,而且肯定会出现but, however, ultimately 一类的转折、对比词。答案B)。
第五步:翻译文章或者与译文(如果有)对照学习
这一步最具有挑战性,但可以使你对英文的理解更准确,可以让你更自由地在中英文之间驰骋。
同学们在进行超精读时,可以参考以上五个步骤进行。如果还有什么问题,或者我说的不当的地方,欢迎一起讨论!我的博客地址为: (xzding.diandian.net) 另外同学们也可以到点点英语超精读专版(bbs.diandian.net/index.asp?boardid=147)和广大英语爱好者一起对“超精 读”进行学习、训练、讨论,共同提高英语水平,英语学习的道路是永无止境的!
最后引用一个我与一个网上同学的对话来结束这篇文章,希望各位同学都能早日视深刻地理解英语为一种享受,并顺利攻克英语这个堡垒。