爱吱声

标题: 简单聊聊Java 7吧 [打印本页]

作者: 老兵帅客    时间: 2011-8-10 01:05
标题: 简单聊聊Java 7吧
本帖最后由 老兵帅客 于 2011-8-9 12:35 编辑
3 w$ o0 }  u' E/ b1 Y1 p
, |+ a3 Y$ j6 e4 f# T9 Y$ [" ]咱们这里没有科技版面,那我就把这个帖子发在天下杂谈的科技分类里面好了。
: s. U6 f; z+ n) B2 e# J( j! H1 T6 H" n
Java 7已经于7月28日终于正式发布了,虽然它之前几次跳票,并且已经有很长时间的测试版存在。我抽时间看了一下这东西的新特性,找自己感兴趣的摸了摸,下面就是一点体会,贴出来抛砖引玉哈。- c7 o( G3 K' p# K& K# {

1 V- E% q; {3 Y0 O' |Java 7的新特性有很多,但是我只关心它语言级别上的新特性,其它的我用不着,于是略过,有兴趣的读者可以补充哈。下面就是我关心的新特性:
+ p, A, I1 `: X2 j; H% ~6 k1 h7 F7 T5 P; u: e9 C! U; H
一。switch可以用string类型的数据作分类了。这点很好,因为有很多的时候,我们得到的是string类型的数据,希望用它来直接获得对应分类的相关处理。在以前这是不可能的,你需要把它转化为int/long这类类型,否则switch是不干活的,现在你则可以一步到位了。我没有对该特性做实现方法分析,但是我怀疑它只是用string的hash code来做障眼法,因为这样就无须在字节码方面作任何修改,直接可以用以前的jvm。' c/ u8 O- `. K# g2 E. `5 t

. g2 f! i/ m2 f% e& R2 |' j5 N" R二。多个Exception的同时处理。以前你需要对同级的不同Exception单个处理,现在则可以一起处理了,也就是一次写一样的代码来处理它们,而不象以前那样需要把这些代码放到一个method来重用。这个特性的具体实现我估计也是障眼法,也就是实际上还是老的字节码处理办法,只是在源程序级的编译方作了些手脚而已,但是无论如何还是方便了许多。
, D" D7 e5 H( f, {5 p
7 A0 v$ Z% j9 T0 f/ k, |( F6 Z三。数字常量的二进制/十六进制易读表示,它指的是你可以用0x16bc_1a32来表示一个十六位整数。用这样的写法你可以方便自己的阅读,可以按照字节(八位)甚至四位的方式来阅读。但是个人感觉这属于锦上添花,有没有都差不多的事情,重要性远没有前两个高。
* g0 s; L, Q' a5 p
; T  Y6 K+ ~5 U1 A7 {( F/ q个人感觉,这个版本的语言级新特性并不很多,完全没法和Java 5那样的大手笔相比,但是很实用,这个版本的关键好处在于性能提高。
! T* G. z+ _3 \# R
7 Y! G+ C# J. {1 U% _顺便说一下目前Java IDE对它的支持程度,Netbeans据说已经正式支持它了,这里的意思是对语言特性的编辑级支持。Eclipse Indigo/3.7目前的正式版本还不行,你需要用它的nightly build,这个从7月29日的nightly build开始就可以了。但是nightly build只提供基本版,其它的版本估计要等到3.7.1出来了。
4 T8 O* n- b. N8 P; T1 W& w: [
作者: 赫然    时间: 2011-8-10 02:42
IT门外汉仰望一下!
作者: 明月回春    时间: 2011-8-10 08:55
混JAVA饭的码农飘过~1 P1 W) b. x/ v  q

作者: 不感冒    时间: 2011-8-10 10:10
一.switch 支持string了,挺好。
0 _; N7 O. `- \, d9 U8 N, |二.多个异常同时处理,不太明白。8 t5 z: u. ^+ r
是下面形式?# U# O$ k# j& ~8 K2 s7 w& a3 q
try {7 Z0 T0 }- ?! s) E; v7 W: ?6 X" Z
...
" [: y7 h% v  |}
: K3 Z" U9 ?2 |6 Y7 _9 Bcatch (XxxxException A, YyyyException B, ZzzzException C) {; m% d" V. p; W4 s' i: E
....$ m' k1 M5 ^6 f, q1 }' a
}/ G+ z3 D9 ^6 N$ `5 g8 J5 I, @
- n- C8 Q9 |- J
第三个同感,可有可无。。。
作者: qqq54    时间: 2011-8-10 10:15
最中意第一条特性,不过等单位用java7得800年后,俺这里还有的项目还是1.4的呢···
作者: 老兵帅客    时间: 2011-8-10 10:15
回复 不感冒 的帖子- z2 l, N2 p1 _% d5 b+ g, S

$ X1 m1 ~4 ^) I# p/ r; z1 j0 Z对,就是你想象的那样。前两个很有用,第三个多余。
作者: 老兵帅客    时间: 2011-8-10 10:16
回复 明月回春 的帖子  P+ X. X3 b) w- I2 [
8 a! }) k9 w! }0 I6 N/ r
多说两句嘛
作者: 明月回春    时间: 2011-8-10 11:14
其实吧,我最近在想.net和java平台的区别到底是什么。每次做一个基于java平台的系统,最先面对的问题就是架构。开源的,商业的,山寨的,根据预算规模和项目级别先挑一个。而.net只有一个问题就是用还是不用。多则惑,少则灵。选择太多也不好,而且java人员的技术背景也是五花八门。
4 ]' p6 q4 n1 Q# k$ N. G9 x. C, |  ]我以为.net的优势在于时间快,人员素质整齐。虽然单一,但是熟练度也高,学习曲线不是那么陡峭。适合中小项目的开发,不过受平台限制,一般也就仅限于此。
0 y8 e/ {$ q" v6 l2 C) I' f而java的优势在于空间。能够在各种平台灵活部署,甚至各种平台间形成集群,这个好像别的还真不行。只是流派太多,如果一直使用开源框架,上手别的分支还好。可是如果一开始就使用的山寨的封装框架,可能换个环境就不知所措了。。。大型的政府或银行机构的项目至少我见到过的多是java的系统。还有一些老的系统是C的,都处于维护期。! o" k3 d# n% \' h* o3 [) l. o
不过java或者其他的新语言发展的确实比较快,很多新概念都是首先提出来的。如果是用来学习和研究,再好不过了。$ g( ?) z1 G+ A
至于语言本身倒是差别不大,区别在于用途。每次我想给自己做个什么小东西自己用的时候,面对java都有无所适从的感觉。。。
作者: 老兵帅客    时间: 2011-8-10 21:55
回复 明月回春 的帖子( Q. p- a$ E0 n4 N% O: H6 V- j
, @* e: o/ _" J# s& F- O. p) y  L
嘿嘿,探讨一下哈。
, @6 r6 i1 O3 M% O. n# Z5 u* @4 R. f5 T. N) h
其实Java和C#的设计理念相当不同,早先的后者只是前者的微软抄袭版本,但是后来则完全不同了,微软加进去了很多很奇怪的特性,例如在语言级别提供数据访问能力,而该类功能传统上是由类库或者函数库来提供的。也就是说,微软的设计理念出了问题,它违反了语言的基本设施应该尽可能简练,而附加的功能通过类库或者函数库来提供这一原则。
6 F. T2 A8 w3 |  W, o- y) m7 J  y4 B9 ~6 S7 M: `$ W8 [( j
Java和.Net的本质区别在于思想,前者是自由民主、自由竞争那套,它来自于unix世界,而后者则是唯一可用的官方资源,这里咱们不涉及政治而只论技术。其结果就是前者有大量的可替代选择,也就是第三方类库,而后者则基本没有。对于技术人来说,其实只要你掌握了思想,那些可替代资源的掌握以及选择都不困难;但是如果连选择都没有的话,有些事情就很难作了。! A+ @6 Q( t# t# P5 Z1 J: l

7 |& q" |, {. u& B) M至于开源,其实那只是个神话,它的主要用处是方便偷东西,对于客户化和修复错误用处并不大,因为适应曲线和regression test都是问题。
作者: 老兵帅客    时间: 2011-8-11 08:49
回复 qqq54 的帖子# Q0 a: V$ a& X7 h2 t

7 o5 [) L3 w% ~9 j  P3 F我这里也一样,从1.4到java 6,用上7起码是明年的事情了。另外,目前支持java7的java ee服务器只有glassfish 3.1.1,因此要等到websphere和weblogic都支持了,它才会有市场吸引力。
作者: 明月回春    时间: 2011-8-11 13:44
回复 老兵帅客 的帖子
" u, I0 a4 Q! r3 w6 C5 E8 J9 \
, y" y$ e, c( {* m; c# ~4 H呵呵,我主要是从项目与用途的角度看的。
2 \# a) U) Y5 ?7 `4 z6 U9 E具体到技术层面,我只会用java。。。而且水平一般。.net的感受来自对其他人与项目的观察与交流。基本就是上面说的那些。
2 [- O, B$ j6 v# E; K( ~* W.net基本上是一个封闭的平台,也没有考虑过跨平台。所以,在效率上具有优势,你说的那个语言级访问数据库,我真不知道。不过这个也可以看作是一种效率的优化,至少是一种尝试。. T) F! {7 C$ N+ \8 J5 h) \; V. w8 V
java最初也是面向桌面应用的,我当初学的时候没事就画个图神马的,虽然后来就再也没有用到过。在我看来,java真正的革命性特性是反射(具体哪个版本出现的已经想不起来了)。没有反射,jdbc、参数化配置以及各种华丽的框架就都扯淡了。没有了框架后来的主战场——企业级应用也就不可能出现了。现在吃java饭的基本都是J2EE,主要的推手就是18M。开源社区也有18M的影子,比如eclipse是哪来的?而且开源社区开花多,结果少。营利模式基本靠着被收购,否则就是练手,赚吆喝。: ~: K1 Q9 o2 H4 f
虽然java是SUN发明的,但是真正赚到钱的却是18M与Oracle。现在,18M的股价已经超过M$了。SUN去那里了呢 ?4 M$ c6 n  n$ z. O$ j
java技术上百花齐放,业务上一枝独秀。实际上本来就是在90年代中后期抬出来对抗M$的。一种语言范围内的自由是假自由,平台的自由更自由,至于什么是真自由,这个我也不知道。。。  ?; U' x  p% z6 x8 f' k. d

作者: 四处张望    时间: 2011-8-12 12:28
回复 明月回春 的帖子
) y: E- B8 z% Y9 B* a' I* K+ B8 [! d+ ?+ Y$ ?
主要的问题是可替代性。微软的东西,万一碰到某个东西他不支持或者支持的不好,就很悲痛了。
作者: 老兵帅客    时间: 2011-8-16 03:11
回复 明月回春 的帖子
( D2 x% h$ P3 K6 k
( x4 F2 t* @# N6 s客气了。
: Z9 Z+ [* I8 |8 F+ p" b
* _, ]5 N- D2 i; T1 v8 g" @+ b从运行效率上来看,.Net表现一般,没有Java服务器模式好。语言一级支持数据访问和效率无关,是为了抄袭其他语言的特性,赶时髦而已。
作者: 并非马甲    时间: 2011-8-16 23:06
回复 明月回春 的帖子
" V( N, n+ I2 Y; z7 U9 Z. _  a0 c" Z. M( Z
语言级访问数据库说的是Linq to Sql吧。那东西基本上就是个语法糖,而且微软也已经停止支持了,转而发展Entity Frameworks去了。  |0 _: ?' c& j1 \5 L+ y+ @
Linq用起来还是很爽的,用类似于sql的集合操作语言,用来对付collections和xml dom之类的东西写起来真的很省力(当然效率是个问题)
作者: 老兵帅客    时间: 2011-8-17 10:31
回复 并非马甲 的帖子
( w6 `1 `- A2 U& Y9 d5 K+ z
: i4 T+ ~0 A( h但是从语言设计讲是个败笔,因为数据访问不应该是语言特性。
作者: 老兵帅客    时间: 2011-8-17 10:35
回复 明月回春 的帖子
' ]( p3 ~4 U% s/ P- f0 P
# K0 Q& ]/ y6 u9 L$ |1 s) C顺便说一下,reflection不是java的发明,至迟在C++里面已经有类似的东西了,虽然比较原始。
作者: 明月回春    时间: 2011-8-17 11:02
回复 老兵帅客 的帖子
9 r3 F" y3 K/ D6 Q3 d
# @3 K, W. K( ?  C( r在wikipedia上搜了一下reflection C++。6 i; U/ ?4 ]' m/ t; A6 v
Qt/C++
: ]8 _2 h0 `+ h7 }6 v. I
! F6 ]% p; a" H! h& JQt framework extends C++ with its meta-language and provides reflection ability of member/method reference and query by name for Qt objects with QMetaObject class, which contains meta-information about the Qt objects.
Objective-C is a reflective, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.
- a0 i8 a# _! J5 z/ O! O; j' F1 h
貌似并不能直接支持,但是可以实现类似效果。2 n* f' b$ [5 W2 C/ {5 Y
c++ reflection9 d; X  H! q' @8 s/ M  s

作者: 老兵帅客    时间: 2011-8-17 11:22
回复 明月回春 的帖子
+ E& F6 v' B3 v( C4 \- W
  l* P! i& l2 n$ ^& }: d& a我指的是C++/RTTI
作者: 并非马甲    时间: 2011-8-17 12:58
回复 老兵帅客 的帖子
) w& H; i2 j( Y* B+ E% o5 G% P, n0 ]! k9 g. m
澄清一点,Linq和Linq to Sql不是同一个东西。8 P9 `# P- Z) r5 N* r+ \
Linq是.NET引入的一种新的语言特性,是一种类似于sql的集合操作语法。Linq是个有意义的尝试,有了它对集合操作的coding效率大大提高了。Linq可以操作所有集合类型(例如System.Collections命名空间下的所有集合类),除了Linq to Sql之外,还有Linq to Xml, Linq to Dataset等等。
* o, V: z. r- C) a7 U3 E  T1 W+ Y' x1 e
Linq to Sql是架构在Linq上的一层对数据库访问的支持。对数据库的访问还是通过API来做的。微软停止的是API的开发,Linq的语言特性是保留的。
作者: 四处张望    时间: 2011-8-17 13:30
回复 老兵帅客 的帖子1 d- H/ z& A9 Q/ ~7 S/ f' v

' g; ^. Z4 f1 c5 u* Q其实我仅对java 7 jvm虚拟机的性能改进有兴趣,大规模网站访问,有5%-10%提高就很高兴了。
作者: 老兵帅客    时间: 2011-8-17 21:24
回复 四处张望 的帖子
2 G4 @0 ]4 W* F  U7 Q# x+ D+ j
. T- B3 F2 E3 ~# w: [( Z8 p8 K: U这点目前似乎有争议,据说目前的参数设置会导致问题,因此这个版本的这方面事情最好再等等看。
作者: 老兵帅客    时间: 2011-8-17 21:26
回复 并非马甲 的帖子4 B8 ]; D/ j1 h5 s

5 S: E8 L) i2 C9 |+ w' ^6 g" {& t4 z我说的就是linq,因为集合操作应该是类库的功能而非语言特性。
作者: 并非马甲    时间: 2011-8-18 00:07
回复 老兵帅客 的帖子8 t5 d& L% L) s$ W, D% k5 M% y
  P8 t0 @1 ]) l% j! p
呃,有不同意见——这么说让SQL情何以堪啊~
作者: 老兵帅客    时间: 2011-8-18 01:31
回复 并非马甲 的帖子
4 M+ z9 d) p! x, m2 n2 n5 m. g0 M, }; V; {6 s# ~
SQL是数据库操作语言而非编程语言,不是一码事
作者: 四处张望    时间: 2011-8-18 10:11
回复 老兵帅客 的帖子2 s8 v' l" U7 P  F1 {7 j4 m# R
5 T. M( C) S" z2 d5 n; t2 j5 E
我下过java 的beta版试用过一下,没有发现很明显的区别,短期内也不可能升级的。很多地方还是用java5
作者: 老兵帅客    时间: 2011-8-18 21:12
回复 四处张望 的帖子% D% }, ]9 E2 k) ^. |2 e

6 }5 ^! E  A) e9 u, @4 @6 z当然不会有很明显的变化,历史上最大的变化是Java 5,那几乎是革命性的变化,虽然很多其实都是实现上的障眼法,但是在语言设施上进步巨大。跟它相比,后来的6和7的语言变化都远没有那么大,主要变化集中的其他方面,是否用得到就是你的事情了。
1 k, f' D+ H3 ]; K
4 Y( }8 f$ L: I8 K7 `) h' n) a  |至于现实使用,6已经用得比较多了,虽然1.4也还有不少地方在用。
作者: 并非马甲    时间: 2011-8-19 22:14
回复 老兵帅客 的帖子
+ J7 U! h" \. @. Z! U3 ^! y/ e& S! X
) M( L$ ?" L3 i5 l/ Y咳,我不觉得把集合操作提升到语言层面去做有什么不妥。集合操作在实际应用中太常见了,使用Linq对coding效率的提高是显著的。
作者: 老兵帅客    时间: 2011-8-19 22:40
回复 并非马甲 的帖子; {9 M8 O; S- n* X

2 n+ a+ _9 `: N1 q) f! u5 ~6 A集合操作应该是类库级别的,而在哪个级别与性能无关,体现的是设计思想。
作者: 定风波    时间: 2011-8-21 23:09
回复 老兵帅客 的帖子
$ G# X& Q- I$ ], x# F$ O% k! f( P  \; b
用过c#,目前用乱七八糟的好几种脚本和语言,唯独不用java
作者: 李根    时间: 2011-8-26 02:54
回复 老兵帅客 的帖子4 b! i) ?9 a& N$ l) \7 h8 P* J
8 B1 p! k& o9 d
IntelliJ支持了吗?还是要等新版本的IntelliJ?
作者: 老兵帅客    时间: 2011-8-26 03:03
回复 李根 的帖子
' z9 r8 K7 @/ T% V
& y0 Y; @5 j1 i3 K+ a10.5支持了
作者: 老兵帅客    时间: 2011-8-26 03:22
回复 定风波 的帖子  @1 ]( Z, V/ H5 i+ K3 P

) Y" `$ G' |- s8 ]; C不用Java你进来干什么,轰了出去!
作者: 定风波    时间: 2011-8-26 09:06
回复 老兵帅客 的帖子% c( F7 t, E7 W. |8 ^
1 I, v3 V5 g: k) ]; l0 T& s: A3 \! T
好歹也曾经用过仨月写过一个控制台程序呢
作者: 老兵帅客    时间: 2011-8-26 09:10
回复 定风波 的帖子
& W4 [( o$ G3 L. y: b, \: d( t$ A) U& }
就这也好意思说,赶紧讥笑楼上一把
作者: 定风波    时间: 2011-8-26 09:23
回复 老兵帅客 的帖子
+ {8 `. x  t. K
2 J4 f( e) b% P: ~- k, W! I哈哈,难得的是就这一个简单程序竟然商用了1年多才被忍无可忍的领导换掉,哈哈,很搞笑
作者: 大道至简    时间: 2011-8-26 10:42
对JAVA一窍不通的人先晕一会。
) e9 N- Z; \, @3 m坐等更多的IT知识普及贴。
作者: 老兵帅客    时间: 2011-8-26 18:15
回复 定风波 的帖子/ `1 n& X3 e* i* J

- G; }& Z5 l' |" g$ w  m- _8 S你们也忒能欺负领导了
作者: 老兵帅客    时间: 2011-8-26 18:16
回复 大道至简 的帖子; J* J* i9 d6 H! r+ z

0 B5 |1 o5 U4 A) d: [) A好,好,慢慢等,俺会写的哈
作者: 的名    时间: 2011-9-23 00:53
7,8 年没有碰过Java了,看了老兵的帖子才知道自己忘的有多干净。真是汗哪。
作者: 老兵帅客    时间: 2011-9-23 01:10
的名 发表于 2011-9-22 11:53
$ D" n% W  ]. F$ m7,8 年没有碰过Java了,看了老兵的帖子才知道自己忘的有多干净。真是汗哪。 ...

5 D+ u* P! e8 O$ u6 b: L7 d无所谓,就是个饭碗技能而已
作者: 的名    时间: 2011-9-23 01:56
老兵帅客 发表于 2011-9-22 12:10 * h. b' B  t! ]/ e# }3 k* A
无所谓,就是个饭碗技能而已

! X8 k( S- D% t) |5 f说是这样啊,可是总觉得自己现在没有了技能,回头饭碗不好找啊。5 i4 \7 {  o; I) y% J

作者: 老兵帅客    时间: 2011-9-23 02:02
的名 发表于 2011-9-22 12:56 8 w" X8 {9 W1 g. N+ B; ^8 @
说是这样啊,可是总觉得自己现在没有了技能,回头饭碗不好找啊。
- R# b+ B0 D8 g* }# ~
不会吧,你现在应该有了更好的饭碗,否则为什么丢掉以前已经有了的呢
作者: 老兵帅客    时间: 2011-9-24 20:38
更新一下,现在eclipse升级到3.7.1,已经支持java 7了。
作者: 的名    时间: 2011-9-27 04:15
老兵帅客 发表于 2011-9-22 13:02 4 ~  d6 P" R  A! O
不会吧,你现在应该有了更好的饭碗,否则为什么丢掉以前已经有了的呢

* s9 v7 [3 k7 Y: R/ M调头回来当学生了。而且学的不是CS了,所以正在为饭碗发愁呢。




欢迎光临 爱吱声 (http://aswetalk.net/bbs/) Powered by Discuz! X3.2