爱吱声

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

作者: 老兵帅客    时间: 2011-8-10 01:05
标题: 简单聊聊Java 7吧
本帖最后由 老兵帅客 于 2011-8-9 12:35 编辑
* N+ B, S& }  t( w( x/ }6 ~8 {- O2 f+ G" m5 t
咱们这里没有科技版面,那我就把这个帖子发在天下杂谈的科技分类里面好了。
# S7 q: T4 D# ^! Q% |* C1 O
$ |( m$ U2 H) Z$ v1 \, t9 K$ mJava 7已经于7月28日终于正式发布了,虽然它之前几次跳票,并且已经有很长时间的测试版存在。我抽时间看了一下这东西的新特性,找自己感兴趣的摸了摸,下面就是一点体会,贴出来抛砖引玉哈。+ o! ^$ d8 {$ F  s& Z9 [
4 [6 \6 Z6 s/ j! l* n. s5 w( C6 [, Z
Java 7的新特性有很多,但是我只关心它语言级别上的新特性,其它的我用不着,于是略过,有兴趣的读者可以补充哈。下面就是我关心的新特性:
' @* N1 u+ u: `0 e1 H4 \. j# @" }* b9 K3 J- o  d
一。switch可以用string类型的数据作分类了。这点很好,因为有很多的时候,我们得到的是string类型的数据,希望用它来直接获得对应分类的相关处理。在以前这是不可能的,你需要把它转化为int/long这类类型,否则switch是不干活的,现在你则可以一步到位了。我没有对该特性做实现方法分析,但是我怀疑它只是用string的hash code来做障眼法,因为这样就无须在字节码方面作任何修改,直接可以用以前的jvm。
, k5 h! u+ O6 G- k/ p9 A
* B0 `) ~8 V( Z2 B二。多个Exception的同时处理。以前你需要对同级的不同Exception单个处理,现在则可以一起处理了,也就是一次写一样的代码来处理它们,而不象以前那样需要把这些代码放到一个method来重用。这个特性的具体实现我估计也是障眼法,也就是实际上还是老的字节码处理办法,只是在源程序级的编译方作了些手脚而已,但是无论如何还是方便了许多。' k) H+ i$ d: W# t0 I/ ^% r
6 w0 K; e0 _0 K5 w  p) `, Y
三。数字常量的二进制/十六进制易读表示,它指的是你可以用0x16bc_1a32来表示一个十六位整数。用这样的写法你可以方便自己的阅读,可以按照字节(八位)甚至四位的方式来阅读。但是个人感觉这属于锦上添花,有没有都差不多的事情,重要性远没有前两个高。6 m, B  y7 P  a" t3 l* X8 S
1 J5 [. u# ]' S% V: n# q: K
个人感觉,这个版本的语言级新特性并不很多,完全没法和Java 5那样的大手笔相比,但是很实用,这个版本的关键好处在于性能提高。
1 W5 _) Q0 L2 S6 M) [5 g% ~+ F0 R4 \- A& K5 A/ I8 v& ^
顺便说一下目前Java IDE对它的支持程度,Netbeans据说已经正式支持它了,这里的意思是对语言特性的编辑级支持。Eclipse Indigo/3.7目前的正式版本还不行,你需要用它的nightly build,这个从7月29日的nightly build开始就可以了。但是nightly build只提供基本版,其它的版本估计要等到3.7.1出来了。
3 ]2 R) A8 J8 [" F/ `9 i
作者: 赫然    时间: 2011-8-10 02:42
IT门外汉仰望一下!
作者: 明月回春    时间: 2011-8-10 08:55
混JAVA饭的码农飘过~
. R/ m! L' M3 x" R1 G8 C* K) L
作者: 不感冒    时间: 2011-8-10 10:10
一.switch 支持string了,挺好。
- ^( Z0 a2 T: k% k, n7 ~- a二.多个异常同时处理,不太明白。
: \% y& M' K& K& g) _% h2 N9 E+ U是下面形式?
) f. R; Q: Q# b& {+ \0 L7 qtry {( l% A, P% [3 }0 ^. _+ }' T( Y6 g1 ^
...
, Y' v: f' i% v' `}; y/ H& o9 Z; D; A: g9 A  _9 |2 W6 [2 r
catch (XxxxException A, YyyyException B, ZzzzException C) {7 U) j& Z% d+ U" d. ~. g
....
/ ]8 n9 {! ~# q, a1 s}( r8 f# B" k" w4 s  B/ Z) k" [+ i4 @

) d! k9 L* C* E* Y8 u& _9 k第三个同感,可有可无。。。
作者: qqq54    时间: 2011-8-10 10:15
最中意第一条特性,不过等单位用java7得800年后,俺这里还有的项目还是1.4的呢···
作者: 老兵帅客    时间: 2011-8-10 10:15
回复 不感冒 的帖子) ?/ u0 x+ Y" D) k5 Q- z8 k

" s- F% |8 j. a1 b1 ]& G2 H% B+ t对,就是你想象的那样。前两个很有用,第三个多余。
作者: 老兵帅客    时间: 2011-8-10 10:16
回复 明月回春 的帖子% |7 B0 _3 s5 e7 o

& h+ u8 z/ Z2 V$ ^. [/ u4 z多说两句嘛
作者: 明月回春    时间: 2011-8-10 11:14
其实吧,我最近在想.net和java平台的区别到底是什么。每次做一个基于java平台的系统,最先面对的问题就是架构。开源的,商业的,山寨的,根据预算规模和项目级别先挑一个。而.net只有一个问题就是用还是不用。多则惑,少则灵。选择太多也不好,而且java人员的技术背景也是五花八门。
. B1 n0 v, c* n8 v( I2 u6 I我以为.net的优势在于时间快,人员素质整齐。虽然单一,但是熟练度也高,学习曲线不是那么陡峭。适合中小项目的开发,不过受平台限制,一般也就仅限于此。
+ g% u8 v4 K  o+ U0 y3 J而java的优势在于空间。能够在各种平台灵活部署,甚至各种平台间形成集群,这个好像别的还真不行。只是流派太多,如果一直使用开源框架,上手别的分支还好。可是如果一开始就使用的山寨的封装框架,可能换个环境就不知所措了。。。大型的政府或银行机构的项目至少我见到过的多是java的系统。还有一些老的系统是C的,都处于维护期。/ }3 D! Z; v- x$ {4 S7 P
不过java或者其他的新语言发展的确实比较快,很多新概念都是首先提出来的。如果是用来学习和研究,再好不过了。
% K7 l" o9 W2 v* B+ t至于语言本身倒是差别不大,区别在于用途。每次我想给自己做个什么小东西自己用的时候,面对java都有无所适从的感觉。。。
作者: 老兵帅客    时间: 2011-8-10 21:55
回复 明月回春 的帖子4 {2 d8 ]1 n! B% N- O. M/ D0 X4 I
- l% U' a( Z6 M0 N; C
嘿嘿,探讨一下哈。8 T3 ^% N8 \0 V6 L  s; i5 A2 l3 F
; A' N! b, c* ^' I4 i
其实Java和C#的设计理念相当不同,早先的后者只是前者的微软抄袭版本,但是后来则完全不同了,微软加进去了很多很奇怪的特性,例如在语言级别提供数据访问能力,而该类功能传统上是由类库或者函数库来提供的。也就是说,微软的设计理念出了问题,它违反了语言的基本设施应该尽可能简练,而附加的功能通过类库或者函数库来提供这一原则。
! m1 X, F& Y! A+ d
& I: F( l  k& F( k5 r# A) VJava和.Net的本质区别在于思想,前者是自由民主、自由竞争那套,它来自于unix世界,而后者则是唯一可用的官方资源,这里咱们不涉及政治而只论技术。其结果就是前者有大量的可替代选择,也就是第三方类库,而后者则基本没有。对于技术人来说,其实只要你掌握了思想,那些可替代资源的掌握以及选择都不困难;但是如果连选择都没有的话,有些事情就很难作了。
1 m- X8 R5 n* |! @+ ^
" A- }! G& x& \* D& g+ c4 ^. c至于开源,其实那只是个神话,它的主要用处是方便偷东西,对于客户化和修复错误用处并不大,因为适应曲线和regression test都是问题。
作者: 老兵帅客    时间: 2011-8-11 08:49
回复 qqq54 的帖子
6 `. P5 F5 {; Q3 X
7 x( `& u9 K+ U$ B- P我这里也一样,从1.4到java 6,用上7起码是明年的事情了。另外,目前支持java7的java ee服务器只有glassfish 3.1.1,因此要等到websphere和weblogic都支持了,它才会有市场吸引力。
作者: 明月回春    时间: 2011-8-11 13:44
回复 老兵帅客 的帖子( h& c; b  }0 f: x
: h# H6 ~+ p0 d& j
呵呵,我主要是从项目与用途的角度看的。
& B; R$ o. \* R! R+ I* T0 I具体到技术层面,我只会用java。。。而且水平一般。.net的感受来自对其他人与项目的观察与交流。基本就是上面说的那些。
; }8 d9 V1 _& A: V& r/ J.net基本上是一个封闭的平台,也没有考虑过跨平台。所以,在效率上具有优势,你说的那个语言级访问数据库,我真不知道。不过这个也可以看作是一种效率的优化,至少是一种尝试。
! m0 p' ]9 h) A8 F! Q/ i+ \java最初也是面向桌面应用的,我当初学的时候没事就画个图神马的,虽然后来就再也没有用到过。在我看来,java真正的革命性特性是反射(具体哪个版本出现的已经想不起来了)。没有反射,jdbc、参数化配置以及各种华丽的框架就都扯淡了。没有了框架后来的主战场——企业级应用也就不可能出现了。现在吃java饭的基本都是J2EE,主要的推手就是18M。开源社区也有18M的影子,比如eclipse是哪来的?而且开源社区开花多,结果少。营利模式基本靠着被收购,否则就是练手,赚吆喝。9 J; J) V8 _3 {
虽然java是SUN发明的,但是真正赚到钱的却是18M与Oracle。现在,18M的股价已经超过M$了。SUN去那里了呢 ?2 @5 `+ j0 J% `7 k% R; r. u
java技术上百花齐放,业务上一枝独秀。实际上本来就是在90年代中后期抬出来对抗M$的。一种语言范围内的自由是假自由,平台的自由更自由,至于什么是真自由,这个我也不知道。。。
, b2 F' D$ W- F( V, @( c
作者: 四处张望    时间: 2011-8-12 12:28
回复 明月回春 的帖子- h$ m; n5 j3 ]' g1 N" Y
) f0 ^) ^9 t% P: P+ L, O# V
主要的问题是可替代性。微软的东西,万一碰到某个东西他不支持或者支持的不好,就很悲痛了。
作者: 老兵帅客    时间: 2011-8-16 03:11
回复 明月回春 的帖子
% w/ s) h9 M2 {  J* d+ f0 A# G6 l1 X1 d9 n8 i0 k
客气了。
, d/ V) m$ Q( }' |. N' W9 b
% s" X' X5 B4 _: S2 [从运行效率上来看,.Net表现一般,没有Java服务器模式好。语言一级支持数据访问和效率无关,是为了抄袭其他语言的特性,赶时髦而已。
作者: 并非马甲    时间: 2011-8-16 23:06
回复 明月回春 的帖子) Y2 T% \5 W+ B& I
2 P2 ]! z+ ^: v6 o' D8 z0 p
语言级访问数据库说的是Linq to Sql吧。那东西基本上就是个语法糖,而且微软也已经停止支持了,转而发展Entity Frameworks去了。
' W( ?5 p- W/ ^Linq用起来还是很爽的,用类似于sql的集合操作语言,用来对付collections和xml dom之类的东西写起来真的很省力(当然效率是个问题)
作者: 老兵帅客    时间: 2011-8-17 10:31
回复 并非马甲 的帖子
+ h0 k0 I  e6 ~7 x) D) |  @/ X' Z/ f5 v" a; V
但是从语言设计讲是个败笔,因为数据访问不应该是语言特性。
作者: 老兵帅客    时间: 2011-8-17 10:35
回复 明月回春 的帖子7 Z. C6 F, @7 ~
( P# u. C0 f6 O0 E' Z' R+ b* J
顺便说一下,reflection不是java的发明,至迟在C++里面已经有类似的东西了,虽然比较原始。
作者: 明月回春    时间: 2011-8-17 11:02
回复 老兵帅客 的帖子
$ s1 [4 ~5 b- C; e3 S6 ~8 f
; y+ _- P- x/ w  e在wikipedia上搜了一下reflection C++。3 P/ z+ [* h! v: {8 f6 R8 I
Qt/C++# F+ |' o1 U* @$ W8 d
) d7 [  z  a9 T8 H; Z2 w
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.
+ F' ]% s( Y: H  D2 I) L
貌似并不能直接支持,但是可以实现类似效果。& X% y7 V; L! k# j
c++ reflection8 H$ @, _) |9 _9 Y4 V3 J" X+ `

作者: 老兵帅客    时间: 2011-8-17 11:22
回复 明月回春 的帖子
1 V- l: ]$ F/ s) f3 a7 m
$ Y+ q- o& a: f9 W  k0 H  G0 ~我指的是C++/RTTI
作者: 并非马甲    时间: 2011-8-17 12:58
回复 老兵帅客 的帖子1 f( @( @4 j; b

4 w+ q7 T2 D: D! q8 W澄清一点,Linq和Linq to Sql不是同一个东西。
4 A# r+ w7 \6 N& r7 t; `! c8 M4 P; [: ELinq是.NET引入的一种新的语言特性,是一种类似于sql的集合操作语法。Linq是个有意义的尝试,有了它对集合操作的coding效率大大提高了。Linq可以操作所有集合类型(例如System.Collections命名空间下的所有集合类),除了Linq to Sql之外,还有Linq to Xml, Linq to Dataset等等。
- }" B: I. x9 l, v* `1 E- V. r  M" s9 j
Linq to Sql是架构在Linq上的一层对数据库访问的支持。对数据库的访问还是通过API来做的。微软停止的是API的开发,Linq的语言特性是保留的。
作者: 四处张望    时间: 2011-8-17 13:30
回复 老兵帅客 的帖子
9 O) U0 m) S1 H" m' d
/ o0 G6 W- ]" u" @2 O其实我仅对java 7 jvm虚拟机的性能改进有兴趣,大规模网站访问,有5%-10%提高就很高兴了。
作者: 老兵帅客    时间: 2011-8-17 21:24
回复 四处张望 的帖子
, H3 [$ ]: @- k5 z  E% r
$ X1 V: a& r# f/ l# H这点目前似乎有争议,据说目前的参数设置会导致问题,因此这个版本的这方面事情最好再等等看。
作者: 老兵帅客    时间: 2011-8-17 21:26
回复 并非马甲 的帖子
* H" t( L1 `7 T+ x/ g, F1 Y* p/ K6 d6 o- Q
我说的就是linq,因为集合操作应该是类库的功能而非语言特性。
作者: 并非马甲    时间: 2011-8-18 00:07
回复 老兵帅客 的帖子
3 |, M/ ~' V& s3 U' p9 g- d2 t
; S- N/ n/ d& c- x& P' h1 C呃,有不同意见——这么说让SQL情何以堪啊~
作者: 老兵帅客    时间: 2011-8-18 01:31
回复 并非马甲 的帖子0 G: }9 J; @. w& _8 j% m+ {
1 O+ R9 Y( T0 R+ ]$ F
SQL是数据库操作语言而非编程语言,不是一码事
作者: 四处张望    时间: 2011-8-18 10:11
回复 老兵帅客 的帖子
7 r' D, j8 X" }8 P6 r& ~3 T, P2 G: S
我下过java 的beta版试用过一下,没有发现很明显的区别,短期内也不可能升级的。很多地方还是用java5
作者: 老兵帅客    时间: 2011-8-18 21:12
回复 四处张望 的帖子
* H2 V$ P7 H* c- {6 v
! B7 h; r8 T3 r! v' D: S当然不会有很明显的变化,历史上最大的变化是Java 5,那几乎是革命性的变化,虽然很多其实都是实现上的障眼法,但是在语言设施上进步巨大。跟它相比,后来的6和7的语言变化都远没有那么大,主要变化集中的其他方面,是否用得到就是你的事情了。
  a" _9 }6 G% r) ?  \+ A, A
, w' U6 i6 C" z至于现实使用,6已经用得比较多了,虽然1.4也还有不少地方在用。
作者: 并非马甲    时间: 2011-8-19 22:14
回复 老兵帅客 的帖子
/ D: h  H% K5 k6 i" a- O$ s9 C+ z  R1 l+ }4 z# `! v. _3 @
咳,我不觉得把集合操作提升到语言层面去做有什么不妥。集合操作在实际应用中太常见了,使用Linq对coding效率的提高是显著的。
作者: 老兵帅客    时间: 2011-8-19 22:40
回复 并非马甲 的帖子6 y% V% E- q( n' [7 m
, `5 d2 i* f7 _+ b
集合操作应该是类库级别的,而在哪个级别与性能无关,体现的是设计思想。
作者: 定风波    时间: 2011-8-21 23:09
回复 老兵帅客 的帖子  Z, i# g4 V3 W" U

% D) o5 L0 h4 L; [+ J% X用过c#,目前用乱七八糟的好几种脚本和语言,唯独不用java
作者: 李根    时间: 2011-8-26 02:54
回复 老兵帅客 的帖子; b: a  ?7 Z4 k' T' f9 J, g
* p3 V% Q( n% n9 J% L6 `% J
IntelliJ支持了吗?还是要等新版本的IntelliJ?
作者: 老兵帅客    时间: 2011-8-26 03:03
回复 李根 的帖子7 V' t0 |2 t- Z4 g) r5 ^* |! F- x$ \
# S" z% K3 B# q, Z, J7 ], _
10.5支持了
作者: 老兵帅客    时间: 2011-8-26 03:22
回复 定风波 的帖子
( H9 I. n" i8 W) f! o
+ N9 t% d/ ~1 m; n, ]不用Java你进来干什么,轰了出去!
作者: 定风波    时间: 2011-8-26 09:06
回复 老兵帅客 的帖子
# ]* v! M( f* \' K/ N9 h$ n
; h6 o" z1 F* X. g2 _6 _好歹也曾经用过仨月写过一个控制台程序呢
作者: 老兵帅客    时间: 2011-8-26 09:10
回复 定风波 的帖子7 B) W' @& C2 v4 p- |+ U! o. `
  }: ~7 ?2 I9 Y! U! y0 ?2 P
就这也好意思说,赶紧讥笑楼上一把
作者: 定风波    时间: 2011-8-26 09:23
回复 老兵帅客 的帖子
6 b% y2 |, K. v5 |
. ^7 V( ^: V& _1 H6 d% ?3 e哈哈,难得的是就这一个简单程序竟然商用了1年多才被忍无可忍的领导换掉,哈哈,很搞笑
作者: 大道至简    时间: 2011-8-26 10:42
对JAVA一窍不通的人先晕一会。
/ C$ i: d! u! \( u坐等更多的IT知识普及贴。
作者: 老兵帅客    时间: 2011-8-26 18:15
回复 定风波 的帖子1 y0 c* N2 ]4 x8 z# K

1 C, C: q; x$ f9 l. b  Y你们也忒能欺负领导了
作者: 老兵帅客    时间: 2011-8-26 18:16
回复 大道至简 的帖子  W0 I  y6 ^% M% w/ o( X' N& O
& W8 c8 ]$ q+ r, P, s$ U; F. ^1 j9 u
好,好,慢慢等,俺会写的哈
作者: 的名    时间: 2011-9-23 00:53
7,8 年没有碰过Java了,看了老兵的帖子才知道自己忘的有多干净。真是汗哪。
作者: 老兵帅客    时间: 2011-9-23 01:10
的名 发表于 2011-9-22 11:53 4 o( R5 H9 s$ s1 c% V1 Y9 r, Y- t" K
7,8 年没有碰过Java了,看了老兵的帖子才知道自己忘的有多干净。真是汗哪。 ...

- l2 a+ I' R$ u: r# Q3 v  w无所谓,就是个饭碗技能而已
作者: 的名    时间: 2011-9-23 01:56
老兵帅客 发表于 2011-9-22 12:10
- k+ ?) a. f5 \! X无所谓,就是个饭碗技能而已
0 U; V/ g* L  @4 n# {. m
说是这样啊,可是总觉得自己现在没有了技能,回头饭碗不好找啊。
6 D5 {" S) K0 M$ C- n9 n
作者: 老兵帅客    时间: 2011-9-23 02:02
的名 发表于 2011-9-22 12:56   N' {, D, H) ?9 E- n1 d- k8 w
说是这样啊,可是总觉得自己现在没有了技能,回头饭碗不好找啊。
6 u7 S, O* e" ?' H1 |+ ^
不会吧,你现在应该有了更好的饭碗,否则为什么丢掉以前已经有了的呢
作者: 老兵帅客    时间: 2011-9-24 20:38
更新一下,现在eclipse升级到3.7.1,已经支持java 7了。
作者: 的名    时间: 2011-9-27 04:15
老兵帅客 发表于 2011-9-22 13:02 4 E- y3 ^5 K0 s/ _' a
不会吧,你现在应该有了更好的饭碗,否则为什么丢掉以前已经有了的呢
; E7 D+ l% n0 k& J; E: ?- |
调头回来当学生了。而且学的不是CS了,所以正在为饭碗发愁呢。




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