爱吱声

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

作者: 老兵帅客    时间: 2011-8-10 01:05
标题: 简单聊聊Java 7吧
本帖最后由 老兵帅客 于 2011-8-9 12:35 编辑
  T2 I) x  l5 G+ G& R: m2 w. _2 f8 ?/ f" b
咱们这里没有科技版面,那我就把这个帖子发在天下杂谈的科技分类里面好了。
: e; e- p( N+ L- ^, Z: f; P2 F1 B4 k. r5 I: t6 Z: y# Y% ~
Java 7已经于7月28日终于正式发布了,虽然它之前几次跳票,并且已经有很长时间的测试版存在。我抽时间看了一下这东西的新特性,找自己感兴趣的摸了摸,下面就是一点体会,贴出来抛砖引玉哈。
$ a" W  ?2 s/ |
! D2 ?) b% J% V* H, O- FJava 7的新特性有很多,但是我只关心它语言级别上的新特性,其它的我用不着,于是略过,有兴趣的读者可以补充哈。下面就是我关心的新特性:. b$ \/ S# K( w1 z$ E# ^: r

$ r+ e' h( {1 H% z  x/ K一。switch可以用string类型的数据作分类了。这点很好,因为有很多的时候,我们得到的是string类型的数据,希望用它来直接获得对应分类的相关处理。在以前这是不可能的,你需要把它转化为int/long这类类型,否则switch是不干活的,现在你则可以一步到位了。我没有对该特性做实现方法分析,但是我怀疑它只是用string的hash code来做障眼法,因为这样就无须在字节码方面作任何修改,直接可以用以前的jvm。
% O# F* S0 B$ R6 n% i% j# Q- H! [3 V/ T# U9 f& p3 P" @
二。多个Exception的同时处理。以前你需要对同级的不同Exception单个处理,现在则可以一起处理了,也就是一次写一样的代码来处理它们,而不象以前那样需要把这些代码放到一个method来重用。这个特性的具体实现我估计也是障眼法,也就是实际上还是老的字节码处理办法,只是在源程序级的编译方作了些手脚而已,但是无论如何还是方便了许多。: R4 m' O3 T& p  n, i- a

9 s8 Y( G8 x" Y$ l- Z$ h三。数字常量的二进制/十六进制易读表示,它指的是你可以用0x16bc_1a32来表示一个十六位整数。用这样的写法你可以方便自己的阅读,可以按照字节(八位)甚至四位的方式来阅读。但是个人感觉这属于锦上添花,有没有都差不多的事情,重要性远没有前两个高。- ]: F/ p& x6 a( z" i! a
9 C/ R7 K0 H7 o" Z5 l0 ~8 L
个人感觉,这个版本的语言级新特性并不很多,完全没法和Java 5那样的大手笔相比,但是很实用,这个版本的关键好处在于性能提高。; `3 T) `  x: q3 X  X+ B

  F5 |4 w/ T8 L' C0 b顺便说一下目前Java IDE对它的支持程度,Netbeans据说已经正式支持它了,这里的意思是对语言特性的编辑级支持。Eclipse Indigo/3.7目前的正式版本还不行,你需要用它的nightly build,这个从7月29日的nightly build开始就可以了。但是nightly build只提供基本版,其它的版本估计要等到3.7.1出来了。
: `) C- D+ [. v" e
作者: 赫然    时间: 2011-8-10 02:42
IT门外汉仰望一下!
作者: 明月回春    时间: 2011-8-10 08:55
混JAVA饭的码农飘过~
( A. Y* d$ w/ d$ C0 O
作者: 不感冒    时间: 2011-8-10 10:10
一.switch 支持string了,挺好。+ b7 s$ p1 n& K2 c; l
二.多个异常同时处理,不太明白。3 ^. v* U; j4 K# s0 `& X! x+ B  g
是下面形式?
+ _, ]4 l, A  etry {
  T0 {3 L6 R0 ?9 `& ]) x3 R5 U...& e: S- E  g3 V- p4 S/ r
}, L$ Z* e) C$ x+ O# _/ A( _8 j# X
catch (XxxxException A, YyyyException B, ZzzzException C) {" h! _6 P: g# t( Z" D8 z/ W
....
1 b# N5 H6 X: D5 I3 j  O9 w+ J3 }}6 N. a; e8 T6 r! g0 |: T' R3 r7 b3 \
: l+ N: z: I! _2 M; v, J% w* C
第三个同感,可有可无。。。
作者: qqq54    时间: 2011-8-10 10:15
最中意第一条特性,不过等单位用java7得800年后,俺这里还有的项目还是1.4的呢···
作者: 老兵帅客    时间: 2011-8-10 10:15
回复 不感冒 的帖子
& x/ l* X$ U$ w1 ~5 ?
3 r$ ~; ^  [( x) v对,就是你想象的那样。前两个很有用,第三个多余。
作者: 老兵帅客    时间: 2011-8-10 10:16
回复 明月回春 的帖子
/ ~2 t' I) ]. f4 h6 Q* B
. T2 q( q0 Q4 G: J7 E多说两句嘛
作者: 明月回春    时间: 2011-8-10 11:14
其实吧,我最近在想.net和java平台的区别到底是什么。每次做一个基于java平台的系统,最先面对的问题就是架构。开源的,商业的,山寨的,根据预算规模和项目级别先挑一个。而.net只有一个问题就是用还是不用。多则惑,少则灵。选择太多也不好,而且java人员的技术背景也是五花八门。) w/ s8 q5 i9 s$ @
我以为.net的优势在于时间快,人员素质整齐。虽然单一,但是熟练度也高,学习曲线不是那么陡峭。适合中小项目的开发,不过受平台限制,一般也就仅限于此。
- U3 \# K! e; s) t) p而java的优势在于空间。能够在各种平台灵活部署,甚至各种平台间形成集群,这个好像别的还真不行。只是流派太多,如果一直使用开源框架,上手别的分支还好。可是如果一开始就使用的山寨的封装框架,可能换个环境就不知所措了。。。大型的政府或银行机构的项目至少我见到过的多是java的系统。还有一些老的系统是C的,都处于维护期。
# f! w. _& ~# |/ K& k: ^不过java或者其他的新语言发展的确实比较快,很多新概念都是首先提出来的。如果是用来学习和研究,再好不过了。" q0 c& G5 c! T8 \/ p
至于语言本身倒是差别不大,区别在于用途。每次我想给自己做个什么小东西自己用的时候,面对java都有无所适从的感觉。。。
作者: 老兵帅客    时间: 2011-8-10 21:55
回复 明月回春 的帖子1 B: f) Q& G9 t1 ^4 b$ l& r# j
$ i) P# }' d2 J, L3 n- r
嘿嘿,探讨一下哈。
; M# p5 x! Z) I7 u4 e
& i- q0 I, P, M* Z( B: N, u  a9 J其实Java和C#的设计理念相当不同,早先的后者只是前者的微软抄袭版本,但是后来则完全不同了,微软加进去了很多很奇怪的特性,例如在语言级别提供数据访问能力,而该类功能传统上是由类库或者函数库来提供的。也就是说,微软的设计理念出了问题,它违反了语言的基本设施应该尽可能简练,而附加的功能通过类库或者函数库来提供这一原则。
. ?. {+ ?+ a# \8 d& w2 h% D$ g- v$ O( |5 G3 n3 `
Java和.Net的本质区别在于思想,前者是自由民主、自由竞争那套,它来自于unix世界,而后者则是唯一可用的官方资源,这里咱们不涉及政治而只论技术。其结果就是前者有大量的可替代选择,也就是第三方类库,而后者则基本没有。对于技术人来说,其实只要你掌握了思想,那些可替代资源的掌握以及选择都不困难;但是如果连选择都没有的话,有些事情就很难作了。
+ W* c6 f. q: f  ~3 l/ {! |9 u, @% e$ ~/ O2 `$ Q* D2 M% \
至于开源,其实那只是个神话,它的主要用处是方便偷东西,对于客户化和修复错误用处并不大,因为适应曲线和regression test都是问题。
作者: 老兵帅客    时间: 2011-8-11 08:49
回复 qqq54 的帖子- K. S% j0 u0 q8 T0 x

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

作者: 四处张望    时间: 2011-8-12 12:28
回复 明月回春 的帖子
( Q' H, y& {! g8 `( R' T. k9 ?3 L$ x6 N; q) V1 {, A( p$ D
主要的问题是可替代性。微软的东西,万一碰到某个东西他不支持或者支持的不好,就很悲痛了。
作者: 老兵帅客    时间: 2011-8-16 03:11
回复 明月回春 的帖子
7 C9 g6 H# Z3 @% e& M
: N" d- M6 @, E# h& u7 x% n' M6 n客气了。  {. v. \5 M% w7 j' Q

. w; k1 a5 |5 j- r) z' u从运行效率上来看,.Net表现一般,没有Java服务器模式好。语言一级支持数据访问和效率无关,是为了抄袭其他语言的特性,赶时髦而已。
作者: 并非马甲    时间: 2011-8-16 23:06
回复 明月回春 的帖子! d$ L  h; e( r  \
9 f# P0 J6 X4 E% ~
语言级访问数据库说的是Linq to Sql吧。那东西基本上就是个语法糖,而且微软也已经停止支持了,转而发展Entity Frameworks去了。- _- y" F. Z2 ]( T$ r2 u) A
Linq用起来还是很爽的,用类似于sql的集合操作语言,用来对付collections和xml dom之类的东西写起来真的很省力(当然效率是个问题)
作者: 老兵帅客    时间: 2011-8-17 10:31
回复 并非马甲 的帖子
: I8 C- N) V( h! ?& A. b) k; y
/ P2 W3 Y+ M# i8 V但是从语言设计讲是个败笔,因为数据访问不应该是语言特性。
作者: 老兵帅客    时间: 2011-8-17 10:35
回复 明月回春 的帖子
4 U0 B& j: v7 y& e+ s+ y+ D1 y
8 H; q2 [+ D3 U5 }) x4 E0 h顺便说一下,reflection不是java的发明,至迟在C++里面已经有类似的东西了,虽然比较原始。
作者: 明月回春    时间: 2011-8-17 11:02
回复 老兵帅客 的帖子
: G1 d* W4 ^+ Y' \/ {  ?
& Z% j0 H( S- j1 H- s* Z在wikipedia上搜了一下reflection C++。6 X/ d+ y! E! ^7 r7 T4 o
Qt/C++
- |/ q) R) I9 A" J6 |/ C; [( B" R8 @" G" D
Qt 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.

7 t) M$ V1 H7 i# |5 P7 s貌似并不能直接支持,但是可以实现类似效果。5 Y  ^3 o& j! O) C2 u) W
c++ reflection
- _& w. k) s* P# Q! I
作者: 老兵帅客    时间: 2011-8-17 11:22
回复 明月回春 的帖子& f& K, a5 f+ E0 x. F% B: R, P
; c  q' Q% e3 y- u
我指的是C++/RTTI
作者: 并非马甲    时间: 2011-8-17 12:58
回复 老兵帅客 的帖子9 S( H3 O# Z, C+ W: \* a9 D
5 }& T" o9 k1 e8 C
澄清一点,Linq和Linq to Sql不是同一个东西。
8 P! T+ L* N3 K/ ?  D  r$ x" JLinq是.NET引入的一种新的语言特性,是一种类似于sql的集合操作语法。Linq是个有意义的尝试,有了它对集合操作的coding效率大大提高了。Linq可以操作所有集合类型(例如System.Collections命名空间下的所有集合类),除了Linq to Sql之外,还有Linq to Xml, Linq to Dataset等等。# L( v, z" ^4 z# W" ?1 t
* X9 I! s. X, I6 J7 G
Linq to Sql是架构在Linq上的一层对数据库访问的支持。对数据库的访问还是通过API来做的。微软停止的是API的开发,Linq的语言特性是保留的。
作者: 四处张望    时间: 2011-8-17 13:30
回复 老兵帅客 的帖子
2 L( D& N% j' a1 l# X4 U7 ?- A  J& P8 n# i) e
其实我仅对java 7 jvm虚拟机的性能改进有兴趣,大规模网站访问,有5%-10%提高就很高兴了。
作者: 老兵帅客    时间: 2011-8-17 21:24
回复 四处张望 的帖子
) L' o' L  F) }% i, I
) [- U  X, _5 G6 {! h4 f这点目前似乎有争议,据说目前的参数设置会导致问题,因此这个版本的这方面事情最好再等等看。
作者: 老兵帅客    时间: 2011-8-17 21:26
回复 并非马甲 的帖子
4 b% K  z* |$ F, t" G. R% ^$ R* b1 ~8 @, s
我说的就是linq,因为集合操作应该是类库的功能而非语言特性。
作者: 并非马甲    时间: 2011-8-18 00:07
回复 老兵帅客 的帖子
9 E; A: j* ~9 _6 g# ^% N" a+ `1 [6 G0 p) F9 S1 B6 b# s
呃,有不同意见——这么说让SQL情何以堪啊~
作者: 老兵帅客    时间: 2011-8-18 01:31
回复 并非马甲 的帖子
" I. W9 X4 q6 w+ i- S3 g5 K5 m5 h& f# ^
SQL是数据库操作语言而非编程语言,不是一码事
作者: 四处张望    时间: 2011-8-18 10:11
回复 老兵帅客 的帖子
7 @- \$ a9 u: o; x$ \% Z# R; _) @5 a" _$ x: M" ^9 X  o& ~2 H! K! N2 k
我下过java 的beta版试用过一下,没有发现很明显的区别,短期内也不可能升级的。很多地方还是用java5
作者: 老兵帅客    时间: 2011-8-18 21:12
回复 四处张望 的帖子' x. G8 ~& N& Q6 k* U# U
% C2 v# q* Y& e. N5 F' ~4 l( H
当然不会有很明显的变化,历史上最大的变化是Java 5,那几乎是革命性的变化,虽然很多其实都是实现上的障眼法,但是在语言设施上进步巨大。跟它相比,后来的6和7的语言变化都远没有那么大,主要变化集中的其他方面,是否用得到就是你的事情了。/ `! d$ p1 K3 @1 E

4 l8 ~$ k! Y& I' \% W: E至于现实使用,6已经用得比较多了,虽然1.4也还有不少地方在用。
作者: 并非马甲    时间: 2011-8-19 22:14
回复 老兵帅客 的帖子
; J3 b" |1 A; y& u$ O1 z3 L/ l
+ X( t  K( m7 s, S$ ~咳,我不觉得把集合操作提升到语言层面去做有什么不妥。集合操作在实际应用中太常见了,使用Linq对coding效率的提高是显著的。
作者: 老兵帅客    时间: 2011-8-19 22:40
回复 并非马甲 的帖子
3 s* ]" D0 }8 E; M+ ?, k* q& b1 T8 t( ]" L, @- A
集合操作应该是类库级别的,而在哪个级别与性能无关,体现的是设计思想。
作者: 定风波    时间: 2011-8-21 23:09
回复 老兵帅客 的帖子
; M2 [& _+ [6 P) t$ S
8 I( V1 e8 F, z% ]1 }用过c#,目前用乱七八糟的好几种脚本和语言,唯独不用java
作者: 李根    时间: 2011-8-26 02:54
回复 老兵帅客 的帖子5 i3 l6 O. m2 `" K' ?

* x( O, i$ X5 m# }) e8 Z+ ~! v  rIntelliJ支持了吗?还是要等新版本的IntelliJ?
作者: 老兵帅客    时间: 2011-8-26 03:03
回复 李根 的帖子
& p7 g# f9 p# T) J0 G! X" C. `+ D2 i0 U" ]  u9 U
10.5支持了
作者: 老兵帅客    时间: 2011-8-26 03:22
回复 定风波 的帖子- @$ X. k8 ~' S+ j

7 ^) }! g: s) d% C不用Java你进来干什么,轰了出去!
作者: 定风波    时间: 2011-8-26 09:06
回复 老兵帅客 的帖子
" r& ^. U. }" y9 z% t& i, @
+ n2 b7 B" |  k2 w, N% [好歹也曾经用过仨月写过一个控制台程序呢
作者: 老兵帅客    时间: 2011-8-26 09:10
回复 定风波 的帖子
- }( A5 A/ S) R# ?. a/ e: ^0 x, S$ q8 |6 C3 F3 u
就这也好意思说,赶紧讥笑楼上一把
作者: 定风波    时间: 2011-8-26 09:23
回复 老兵帅客 的帖子* i9 g) K  u- s5 s' u' L+ W/ p
% [7 W  ]5 G: n( T9 A' e8 i
哈哈,难得的是就这一个简单程序竟然商用了1年多才被忍无可忍的领导换掉,哈哈,很搞笑
作者: 大道至简    时间: 2011-8-26 10:42
对JAVA一窍不通的人先晕一会。
( N5 D& w% n& @' r坐等更多的IT知识普及贴。
作者: 老兵帅客    时间: 2011-8-26 18:15
回复 定风波 的帖子2 m0 e4 ?( X- @6 W: P3 _% N
6 B  E- S- U+ T+ ]+ j1 l* X: w
你们也忒能欺负领导了
作者: 老兵帅客    时间: 2011-8-26 18:16
回复 大道至简 的帖子& m/ a% X- Q* t# `8 n3 T. J
4 p2 x  t7 p7 D# j
好,好,慢慢等,俺会写的哈
作者: 的名    时间: 2011-9-23 00:53
7,8 年没有碰过Java了,看了老兵的帖子才知道自己忘的有多干净。真是汗哪。
作者: 老兵帅客    时间: 2011-9-23 01:10
的名 发表于 2011-9-22 11:53
# |! r+ Q: l5 X; W. b( m7,8 年没有碰过Java了,看了老兵的帖子才知道自己忘的有多干净。真是汗哪。 ...

8 c( E% N2 i1 s* [无所谓,就是个饭碗技能而已
作者: 的名    时间: 2011-9-23 01:56
老兵帅客 发表于 2011-9-22 12:10
" k" k) a! v- |& l& A无所谓,就是个饭碗技能而已
& Q6 R, d/ p9 N+ E7 S
说是这样啊,可是总觉得自己现在没有了技能,回头饭碗不好找啊。1 W& y: D2 S9 B. [7 m# \8 z* a; j/ x

作者: 老兵帅客    时间: 2011-9-23 02:02
的名 发表于 2011-9-22 12:56 ; r$ r& \* p* S% }  C2 q
说是这样啊,可是总觉得自己现在没有了技能,回头饭碗不好找啊。
  V5 [* }  \. h, O) K2 T
不会吧,你现在应该有了更好的饭碗,否则为什么丢掉以前已经有了的呢
作者: 老兵帅客    时间: 2011-9-24 20:38
更新一下,现在eclipse升级到3.7.1,已经支持java 7了。
作者: 的名    时间: 2011-9-27 04:15
老兵帅客 发表于 2011-9-22 13:02
) I# Z- ^" l! i8 O$ ]/ G5 |不会吧,你现在应该有了更好的饭碗,否则为什么丢掉以前已经有了的呢
7 j' M; [0 X' p
调头回来当学生了。而且学的不是CS了,所以正在为饭碗发愁呢。




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