很有名的一个系列书籍叫做Think in XXX 我想说的是,如果学习某种语言,或者框架,就按照它的方式来思考。如果你学习英文,人家英语有动词变位、名词单复数什么的,而且语法结构也和汉语后很大差别,你一定要按照汉语的语法来说英语吗?就是按照java的思路来,比较两个对象,永远用equals。可能.NET的用户,习惯了.NET的语法糖,但是我想说,过多的operator override最终会让代码无法理解。但是反过来想,微软为何不让VB.NET实现if (condition) {}而是仍然要IF (condition) THEN END IF???当年第一次用VB.NET,网上资料全C#的,我就对我同事说“真TMD白痴,新出现的关键字,为什么c#和vb.net不能统一”——如果没记错的话是override/Overrides。但是只要习惯了,没什么问题啊。
哪个svn插件? BTW,建议直接用eclipse for j2ee框架的问题是这样。没有一个尽善尽美的框架。作为一个习惯了“自己动手,丰衣足食”的javaer,使用.NET也有不方便的时候,也有一大堆不满意的牢骚。可这并不影响.NET及其广大用户。做多了项目,自然会总结出一套自己定制过的框架,也可能是基于SSH,也可能是不基于任何框架。.NET也一样,很多公司,时间久了也会有字节的控件库、框架的。
public class test { public static void main(String[] args) { String str1 = new String("abc"); String str2 = new String("abc"); System.out.print(str1 == str2); }}public class test { public static void main(String[] args) { String str1 = "abc"; String str2 = "abc"; System.out.print(str1 == str2); }}大家看看这两个代码的执行结果,再批判lz,武断的批判lz,只能说明你们java基础更是半杯水,认为你还可以的话,把出现上面的原因解释下。
《Think in Java》里把这个问题分析得很详细了;因为它们是引用,两个引用是不同的,你用== 来比较,默认比较的是引用,而不是引用的内容
头一次听说,你连一门语言的数据结构都不懂,还大言不惭的谈起十宗罪!
比如 TMD的myeclipse
在java里"abc"=="abc"确实是返回false,按常规思维理解,它应该要返回true才对,你所说的什么数据结构,什么机制的,我不管,我也不想管,我只知道一门语言应该要人性化。不要把它的不人性化用一句:“这就是我的机制”来掩盖。
这个"常规思维"往往咱们想当然了。
楼主先把这个代码执行一遍再来说话:public class Test {
public static void main(String[] args) {
System.out.println("abc"=="abc");
}
}
比如说结果集,当初我也想获取结果集的count,然后我就想当然的应该有一个getCount()或getRows()
TNND找死找不到
另外对于ssh这些框架,没人说一定要你用,我做java这么多年,从来没有用过ssh,也不写jsp。从此看来,楼主的眼界有些狭隘
这个返回的是true吧。难道我们的JAVA不一样吗?
现在国内大项目也好,小项目也好,都用java来做了(也有.net或别的),悲剧的是,我就是做小项目。小项目的话,用存储过程还是很方便的。
我想说的是,如果学习某种语言,或者框架,就按照它的方式来思考。如果你学习英文,人家英语有动词变位、名词单复数什么的,而且语法结构也和汉语后很大差别,你一定要按照汉语的语法来说英语吗?就是按照java的思路来,比较两个对象,永远用equals。可能.NET的用户,习惯了.NET的语法糖,但是我想说,过多的operator override最终会让代码无法理解。但是反过来想,微软为何不让VB.NET实现if (condition) {}而是仍然要IF (condition) THEN END IF???当年第一次用VB.NET,网上资料全C#的,我就对我同事说“真TMD白痴,新出现的关键字,为什么c#和vb.net不能统一”——如果没记错的话是override/Overrides。但是只要习惯了,没什么问题啊。
我说的是myeclipse的插件,比如svn插件,那个比较难搞懂到底怎么安装。对于你说的第2个问题,也正是我想说的问题,搞java的人就喜欢说java百花齐放,有很多选择,这也为其逃避问题提供了很好的借口。
当我觉得某个开源框架不好,批评一下,立马就有人来说,没人让逼你用这个框架,你不知道用另个框架啊,而其实,当我真正去用另个框架的时候,依旧会出现这样那样的问题,是不是再换个框架?
这个东西返回啥貌似是和JVM的实现是有关系的。String s1 = "abc";
String s2 = "abc";s1==s2;//这个结果在不同的JVM下是不一样的
而且ECLIPSE的方式本来就是这样,用着用着就惯了,又不是很大问题,
不用十宗罪那么严重吧
Java世界和.NET理念不一样。Java并不是属于SUN/现在的Oracle的,靠JCP投票表决。
由此带来以下区别:
1 更新速度没有.NET快,不过也不会像.NET用户一样,从1.0开始每次要跟在屁股后面不停的学习
2 .net一家独大,所有东西都ms帮你解决了,一站式,点wizard即可。而java这边,好多配置文件之类的要弄(当然,项目做久了,没那么吃力),但是反过来,要在使用不同于微软的解决方案,可能会大费周章。不是不可能,而是资料难找,独立第三方库很少
Java世界和.NET理念不一样。Java并不是属于SUN/现在的Oracle的,靠JCP投票表决。
由此带来以下区别:
1 更新速度没有.NET快,不过也不会像.NET用户一样,从1.0开始每次要跟在屁股后面不停的学习
2 .net一家独大,所有东西都ms帮你解决了,一站式,点wizard即可。而java这边,好多配置文件之类的要弄(当然,项目做久了,没那么吃力),但是反过来,要在使用不同于微软的解决方案,可能会大费周章。不是不可能,而是资料难找,独立第三方库很少
也沒有那麼多心思回復 找一個10.out输出参数,部分类,扩展方法,lamuda表达式这些非常好的东西,java都没有,还是我不会吗?望指正。
spring,其实我现在还不知道它是干嘛的,好吧,这是我的罪。首先要評判java的話,java是什麽?java的類庫能不能代表java,因為類庫是一直在不斷發展完善中的,我想這裡java本身的那些相對穩定的機制才能真正代表java,或者說java的理念out輸出參數,利用輸出參數的形式來進行結果輸出我覺得不太好,因為它有違直覺,方法返回值進行結果輸出比它要好,這種人性化地關注程序設計者(程序員)使其提高工作效率的理念我覺得是更應受到肯定的,其實整體效率也是更高的,對象語言的流行就證明了這一點,我不清楚部分类,扩展方法,lamuda表达式這些是什麽,可能java有替代的吧,不清楚
1。已经说过了,不重复。
2。getXX()只不过是JAVA Bean 规范,没人规定非得那样写。自己实现get(XXX)不就好了。
3。JSP Tag 2。0 可以不写tld
4。Hibernate 有SQLQuery。
5。Hibernate 有beginTransation等一系列事务控制,是你不会用。
6。Hibernate SQLQuery有addEntity和addScale方法,可以Mapping任意schema的结果集到实体或者List
7。楼主是不是不懂SQL?行数统计应该用SQL count()集合函数,关JAVA屁事。Count完,Hibernate query uniqueResult()拿结果呗
8。struts干JDK何事,JAVA的基本概念都不懂,在这纯扯淡。
9。别人说过了,花钱办事呗。
10。不知道你在说什么。这些JAVA都有,或是有等价替代方法,只是你菜而已。
能否说说你用纯jdbc的思路呢?以前我也是想用纯jdbc,然后觉得太麻烦,就想着自己写些辅助方法,想着想着就觉得:我这样做了还不如去用hibernate了
String a = new String("abc");
String b= new String("abc");
System.out.println(a==b);
返回false
“abc”=="abc"
返回true,那别谈什么基础,
也别说JAVA的不是。
非常感谢dracularking(苦行魔君 更爱顽强) 的回复,我的标题虽然写的是java十宗罪,但其实隐含的意思,还包括java相关的一些开源框架,它们也能从侧面反应java体系的问题。
我来替lz说句公道话:
public class test { public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.print(str1 == str2);
}}public class test { public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
System.out.print(str1 == str2);
}}大家看看这两个代码的执行结果,再批判lz,武断的批判lz,只能说明你们java基础更是半杯水,认为你还可以的话,把出现上面的原因解释下。
还硬要加个
每种语言都有自己的优势。
先去找下JAVA和C++的比较
就知道了
非常感谢beowulf2005 的回复,正是需要您的批评1.这个确实我没有经过实验就这么说了,非常抱歉
2.这个只是语法糖,有没有也无所谓,只是为了凑满十大,呵呵。
3.嘿嘿,我开这个贴,就是骗你们这些懂的人出来教我呗,现在我学到了,我会去了解JSP Tag 2.0的
4.Hibernate是有sql查询,这个我知道,但查询出来的结果集类型是 ArrayList<Object[]>,这丢失了列名。另外,Hibernate要用到我的项目当中,还是需要很多配置文件的,感觉头痛,难道不应该是只需要有个接字符串的配置文件就行了吗?
5.额,这个真没用过,我是水啊。关键看着hibernate这么多配置文件,就很反感了。
6.要映射到实体类,你首先要有这个实体类才行啊,要有这个实体类就要提前知道结构,如果前提不知道结构,就不太好办了。
7.从而向对象的角度出来,我做为一个结果集,我就应该能查出我有多少行结果,而不是通过别的方法,让别人去完成这个工作。
8.只想说,这一点上,你只想反驳而反驳,那我也纯反驳一个,呵呵。
9.你的意思就是说免费的本来就应该不好罗?收费的东西本来应该好罗?那我说java是个垃圾,你就应该承认嘛,就不要来反驳我了,因为你就是这个观点嘛。
10.这个是java的硬伤,我之所以都总结在最后一点,是因为不想拿很多人都认可,以前也大量讨论过的东西,再拿来多说,我要把前9点留下写自己的感想。你不知道什么是部分类,什么是扩展方法,什么是lamuda表达式就不要讨论这一点了。
关于第1点,的确是我的错误,我没有经验实验就这么说了,非常抱歉。但事实上,这里只是我的表达错误,为了简单表达,我就直接写下了"abc"=="abc"返回的是false
却不知,这样返回的结果是true,这一点我真的搞错了。而我真正的想表达的意思,正是mni2005所说的:
String str1 = "abc";
String str2 = "abc";
System.out.print(str1 == str2);这样会返回false。
String str2 = "abc";
这样子还是会true的。
String str1 = new String("abc");
才是false