JiveJdon Community Forums
在线205人 Home | 论坛 | 培训咨询 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 8 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
yinyousong

发表文章: 15
注册时间: 2008年03月21日 10:11
给他发消息
java的new真的给我们带来了麻烦吗? 发表: 2008年04月08日 21:28 回复
很多程序员多在抱怨java的new浪费了太多的内存,应该大量的使用static。但依据我观察banq老师的文章来看,banq老师似乎对这些看的不太重。我不知道是不是因为banq老师了解OO思想的真谛。
而在我看来我觉得Thinking in java 的第一章的对象导论给了我很大的启发。书中提到:汇编语言是对底层机器的轻微抽象,C语言是在汇编语言的基础上再次的对机器低层的抽象,而OOP是对低层的完全抽象;对事物的抽象程度决定了代码了优劣(书中原话不太记得了,据我的理解是这样的)
正因为OOP能够使程序员享受最大的快乐!
而java是OO现在的最佳解决方法,那么我们又何必只挑它的刺呢?
再而有了java程序员才有时间享受java(咖啡).

以上只是一个初学者的一点愚见中的遇见而以,如有出错望请大家指出。
如有理论性错误,望大家不要只顾笑顺便提出!。
banq

发表文章: 9074
注册时间: 2002年08月03日 17:08
给他发消息
回复:java的new真的给我们带来了麻烦吗? 发表: 2008年04月09日 09:54 回复
>抱怨java的new浪费了太多的内存,应该大量的使用static
前半句在某些情况下正确,后半句绝对错误。

说这话的是完全不懂对象,完全没有OO基础知识,但是这些人还在从事Java/.NET等OO软件开发,相当于外行人冒充内行,可见当前中国软件业水平多么低下。

为什么说这些程序员完全不懂OO呢?
因为他们只知道对象两个表面含义,却不懂对象背后的含义,对象重要特征是什么?对象重要的特征就是有生命的,有scope的,有生命周期的,这其实是一个很朴素的哲学思想,没有永垂不朽的东西,任何物体都是有生命的。

既然,对象有生命,那就当然有生有死,在java中,对象什么时候死已经无需我们操心,因为有垃圾回收机制,我们程序员只要决定对象什么时候生就可以,也就是对象什么时候创建,以何种方式创建。

对象可以new方式创建,也可以使用创建模式创建,方式很多,Ioc模式的诞生,特别是自动配对auto wiring的IOC诞生,让对象的创建也无需我们来编码了,这更大大解决程序员的软件开发生产力,这也就是Jdon On Rails为什么快速的原因之一。

回到对象的生命周期上来,使用静态实际就是变态的延长对象的生命周期,虽然也解放了程序员,无需程序员照顾对象创建,但是这是一种错误的解放,是一种虽然简单,但是方向完全错误,可能导致更大性能陷阱的解决方式,这个我已经在单例是邪恶等帖子中反复表述,因为我们现在的软件是一个多线程环境,如果你使用静态,不但导致非OO系统,到处是长命百岁的对象,系统难于维护;更重要不小心就导致多线程变成单线程系统,也就是单用户系统,某个时刻只能一个用户操作这个系统。换句话说:就是系统缓慢,人操作一多就死机。

[该贴被banq于2008-04-09 09:56修改过]
saharabear

发表文章: 25
注册时间: 2007年02月15日 13:25
给他发消息
回复:回复:java的new真的给我们带来了麻烦吗? 发表: 2008年04月09日 13:22 回复
对象重要的特征就是有生命的,有scope的,有生命周期的,这其实是一个很朴素的哲学思想,没有永垂不朽的东西,任何物体都是有生命的。


顶这句话!
yinyousong

发表文章: 15
注册时间: 2008年03月21日 10:11
给他发消息
re:java的new真的给我们带来了麻烦吗? 发表: 2008年04月09日 14:11 回复
果然一针见血!讲得太好了,这是在书本上学不到了东西呐.
该珍惜jdon!
killer

发表文章: 106
注册时间: 2007年07月17日 15:40
给他发消息
re:java的new真的给我们带来了麻烦吗? 发表: 2008年04月10日 18:51 回复
非常同意banq的观点,这里说说我个人的另外一点看法,大量使用static是对static的误用,我们学习编程语言的时候往往只注重了语法和语义,而忽视了语言的另一个重要要素“语用”,也就是该在什么情况下使用。楼主说的这种情况就是对static的语用不了解而造成的。

Static的语法就不用说了,语义就是不用创建类而可以直接使用,是类所共有的东西,所有的类的实例都共用的。但语用是什么呢?该在什么情况下使用呢?还是先了解一下语义和语用吧,语义是反映结构内部的关系,而语用则反映了结构成分同外部世界具体事物之间的联系,是结构外的关系。也就是说关系到对象内部状态的属性或操作就不能是static的,而与外部对象的操作不会涉及到对象内部状态的就可以是static的,所以有一些工具类方法就是static的,java本身也有这样的例子,如Integer.parseInt,System.out.print等。
Jimny

发表文章: 2
注册时间: 2008年04月11日 16:53
给他发消息
re:java的new真的给我们带来了麻烦吗? 发表: 2008年04月11日 16:55 回复
killer 这么一说明白多了!
sclsch

发表文章: 1
注册时间: 2008年04月03日 11:31
给他发消息
re:java的new真的给我们带来了麻烦吗? 发表: 2008年04月12日 11:42 回复
请教banq
我看过一些开源的系统,把一些公用的信息,如数据库连接url等放到配置文件中,在系统启动的时候,用一个单例的类加载配置文件,读取url等信息.因为这个类是单例的,所以url等信息也在整个系统中只有一份.取省资源.但有一疑问,单例的对象不会被回收吗?
zhengguo07q

发表文章: 9
注册时间: 2008年03月19日 04:54
给他发消息
re:java的new真的给我们带来了麻烦吗? 发表: 2008年04月14日 18:38 回复
我觉得new是完全的自由,无论是各种创建模式还是IOC,都只是实现了一种规范,规范让人好理解,一定制度的遵守可以更好的发挥出面向对象的技巧,但规范是建立在自由基础上的~~
所以不怎么认为是new的问题,个人设计风格与技巧的作用而已


楼上的问题我也想问题我也想知道答案,singletom的static方法的自身引用算不算在gc的引用之内,GC的引用是不是只有栈里引用才算
confuse

发表文章: 19
注册时间: 2006年10月09日 23:24
给他发消息
re:java的new真的给我们带来了麻烦吗? 发表: 2008年04月16日 00:00 回复
个人感觉,由于静态成员存储位置的不同,应当是不会被垃圾回收的;
它的生命周期应当随着所在类被java类装载器装载的时候开始,随该类的释放而释放,跟实例没关系;
一般来讲类装载进来了,如果不去改变它的话,
基本上是不会被释放了,直到整个进程的结束。
[该贴被confuse于2008-04-16 00:21修改过]
这个主题有 8 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam